Ch08-MySQL 之 锁
June 29, 2022
MySQL 锁机制
1. latch #
是内存结构中的一种轻量级的锁,在 MySQL 数据库中,latch 是用于保护内存中 List Page 完整性的锁结构,latch 可以分为有 mutex、SX rw-lock(spin lock),SX rw-lock 是 MySQL 5.7 的新特性,针对 Page 粒度加的内存锁,有助于提升索引访问效率(针对索引更新的模式)。
2. 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