摘要:
索引结构(innodb) B Tree 每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为null,叶子结点不包含任何关键字信息 B+Tree 所有的叶子结点中包含了全部关键字的信息,非叶子节点只存储键值信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的 阅读全文
摘要:
事务回滚用,属于逻辑日志。 行记录隐藏列roll_pointer(7字节)会指向undolog,每条undolog中也有一个roll_pointer指向更早的undolog记录,在mvcc中会使用版本链来达到事务隔离的效果。 我们知道如果想要保证事务的原子性,就需要在异常发生时,对已经执行的操作进行 阅读全文
摘要:
在mysql中数据更新的流程是:1、执行器先从引擎中找到数据,如果在内存则直接返回,如果不在内存查询后返回。2、执行器拿到数据后,会先修改数据,然后记录undolog,调用引擎接口重新写入数据。3、引擎将数据更新到内存,同时写入redo log,此时处于prepare状态。4、执行器生成这个操作的b 阅读全文
摘要:
死锁的必要条件 多个并发事务(2个或者以上)。 每个事务都持有锁(或者是已经在等待锁)。 每个事务都需要再继续持有锁(为了完成事务逻辑,还必须更新更多的行)。 事务之间产生加锁的循环等待,形成死锁。 总结:当两个或多个事务相互持有对方需要的锁时,就会产生死锁。 死锁的检测(8.0版本增加) 当死锁检 阅读全文
摘要:
首先选择业务低峰期执行,如果24小时业务都频繁,有以下几种方式: 直接添加 如果该表读写不频繁,数据量较小(通常1G以内或百万以内),直接添加即可。 MySQL 5.6后自带OnlineDDL功能(MyISAM表无法使用,且不支持全文和空间索引),自身的OnlineDDL是inplace模式,当整个 阅读全文
摘要:
数据空洞 当对一条数据执行delete操作时,MySQL将数据删除后,并未将数据占用的空间返还给操作系统,而是将当前空间标记为"可复用",当有新的数据插入时,则不会重新申请空间,而是插入到"可复用"空间中,这种"可复用"空间,称之为数据空洞。 MySQL官方文档对此的解释如下: After dele 阅读全文
摘要:
explain语句进行分析。还需要进一步分析的话可以进行optimizer_trace,一共prepare、optimizer、execute阶段,主要关注optimizer阶段。 type 详见索引的访问类型。 key 实际使用的索引。 key_len 使用的索引的长度。可以分析联合索引用上了几个 阅读全文
摘要:
行记录隐藏列trx_id(占用 6 个字节)。 RC隔离级别是在每次执行sql时生成read view,RR隔离级别是在事务开始后第一次执行sql生成read view。 ReadView中主要包含4个比较重要的内容: m_ids:表示在生成ReadView时当前系统中活跃的读写事务的事务id列表。 阅读全文