January 25, 2014

[MySQL5.7] Innodb的索引锁优化

背景: . 这是一个臭名昭彰的问题,Innodb的btree发生合并/分裂等可能修改B-tree的操作时,都需要对其加排他的索引锁,这时候是无法对该索引进行读写操作的,极大的影响了性能;关于index lock,可以看看大神Domas的这篇博文:“Innodb locking makes me sad”  以及Vadim的这篇博客  . 总而言之,MySQL5.7.2的这个功能点的改进是万众期待的!  . 以下是阅读Rev6232的笔记,大概理了下关于索引锁优化的几个点。有些只是自己的理解,可能还需要仔细求证; 写的比较乱,同学们慎入- -!!  . 1.新的读写锁类型:SX锁  . 在之前的版本中,Innodb层有两种锁类型,一种是S共享锁,一种是X排他锁,在5.7.2增加了一种新的读写锁类型称为SX共享排他锁,这三类锁的关系为:         | S|SX| X|       –+–+–+–+        S| o| o| x|       –+–+–+–+       SX| o| x| x|       –+–+–+–+        X| x| x| x|       –+–+–+–+  . S锁和X锁与之前的逻辑相同,没有做变动 SX与SX和X互斥,与S共享,内部定义为RW_SX_LATCH,根据描述,在加上SX锁之后,不会影响读操作,但阻塞写操作 对应的加SX锁接口函数:rw_lock_sx_lock_func […]