摘要:
上一篇blog介绍了因为sql查询information_schema表而导致内存暴涨的case。今天顺便做了一个thd内存的监控:先来介绍下MySQL的内存: 1. 线程内内存:thd->mem_root, 线程在执行sql的过程中,申请的内存从thd->mem_root进行分配,在sql结束的... 阅读全文
摘要:
case:下面的一条sql语句,导致mysql实例内存暴涨: select * from tables where table_name not in(select table_name from partitions group by table_name having count(*)>1 )... 阅读全文
摘要:
问题:1. MySQL对查询的结果集如果返回,一次性还是每条?2. 客户端如何接收结果集?1. 对于有返回结果集的查询,server端和client端交互的数据包由以下组成: p1:meta data packet p2:rows packetpn-1: rows packet pn:EOF or ... 阅读全文
摘要:
因为mysql的主从复制是逻辑复制,所以slave在apply relay log的过程中,经常会遇到错误,而参数sql_slave_skip_counter可以设置跳过多少个event,让slave sql继续。因为mysql的binlog是由event组成的。一个transaction是一个... 阅读全文
摘要:
运维的时候,经常遇到auto_increment的疑惑:机器异常crash,重启后id回退的问题性能考虑,每次获取肯定不会持久化,内存中取值,statement复制如何保证主备一致id的取值受binlog的保护吗1. auto_increment相关的参数控制 1.1 innodb_autoinc_... 阅读全文
摘要:
事务是关系型数据库的核心,贯穿整个源代码,先来瞅瞅相关的数据结构,揭开面纱:server层和innodb引擎层分别对应了不同的数据结构,但相互关联:server层需要引擎注册事务,以便server层能够引用。innodb层需要维持事务的状态,以及事务的状态转换的具体实现。1. 相关数据结构下面用一个... 阅读全文
摘要:
测试了两个case,属于之前blog的遗留问题: innodb如何加载数据字典 flush tables都做了什么操作先来看下innodb加载数据字典: 首次使用:select * from tt;1. 创建handler对象函数调用栈: open_binary_frm ... 阅读全文
摘要:
MySQL purge log简单吗?简单: purge log的功能很简单,purge master logs to 指定一个binlog,然后删除之前的文件系统上的binlog文件,并更新binlog.index文件。复杂: 需要保证purge的原子操作吗, 怎么保证, 有崩溃恢复吗?之前没有读... 阅读全文
摘要:
MySQL ddl丢表: MySQL server层为了和innodb层保持数据一致性,在写binlog和redo log时,引入了两阶段提交,但不同的变更产生的日志并非都使用这种策略。下面就来看看ddl语句产生的binlog日志写入交互过程,从源码的角度理解大家熟知的MySQL ddl丢表。 ... 阅读全文
摘要:
今天小伙伴问了一个sql的问题: update t set status=2 where id in(select id from t where status=1)这个sql,在并发的情况下,会不会有问题?假设:下面的讨论,数据库的事务隔离级别是read_committed其实这个可以很容易测试... 阅读全文