Ch08-MySQL 之 锁

Ch08-MySQL 之 锁

June 29, 2022
MySQL
Mysql

MySQL 锁机制

1. latch #

是内存结构中的一种轻量级的锁,在 MySQL 数据库中,latch 是用于保护内存中 List Page 完整性的锁结构,latch 可以分为有 mutex、SX rw-lock(spin lock),SX rw-lock 是 MySQL 5.7 的新特性,针对 Page 粒度加的内存锁,有助于提升索引访问效率(针对索引更新的模式)。

2. Lock #

lock

  • Record Lock(记录锁)锁住的为指定的行,也就是仅仅把一条记录锁上
  • Gap Lock(间隙锁)锁住的区间均为开区间,不包含记录本身
  • Next-Key Lock(临键锁)是 Record Lock + Gap Lock 的组合,锁定一个范围,并且锁定记录本身

2.1 锁与事务隔离级别 #

Isolation/Lock Lock Mode + Lock Type Rec Lock Type
Read uncommitted
Read commited LOCK_IX + TABLE_LOCK LOCK_X + ROW_LOCK LOCK_REC_NOT_GAP
Repeatable read LOCK_IX + TABLE_LOCK LOCK_X + ROW_LOCK LOCK_REC_NOT_GAP or LOCK_GAP or LOCK_ORDINARY
Serializable

2.2 锁降级 #

MySQL 加锁的基本单位 next-key lock,但是根据实际情况,可能退化成 record lock 或者 next-key lock

index lock

3. 参考文献 #