Intention Locks(意向锁)
意向锁是一种表级锁
- IS (意向共享锁):事务有意向对表中的某些行加共享锁(S锁)
- IX (意向排它锁):事务有意向对表中的某些行加排它锁(X锁)
目的
当一个新的事务要对表级别加 S 锁或 X 锁时,不再需要去遍历表中的每页、每行是否已经添加了互斥的页锁、行锁,而只需要查看该表是否添加了对应的意向锁即可,提升了性能。
兼容互斥性
| IS | IX | S | X | |
|---|---|---|---|---|
| IS | 兼容 | 兼容 | 兼容 | 互斥 |
| IX | 兼容 | 兼容 | 互斥 | 互斥 |
| S | 兼容 | 互斥 | 兼容 | 互斥 |
| X | 互斥 | 互斥 | 互斥 | 互斥 |
在这张表格中,S, X 锁的层级与 IS, IX 锁的层级相同,例如都为表级锁,或者都锁了同一数据页
举例
事务 A 先获取了某一行的排他锁,并未提交:
SELECT * FROM users WHERE id = 6 FOR UPDATE;事务 B想要获取users表的共享锁,检测到事务 A 已经获取了表级的 IX 锁,于是加锁请求被阻塞。
References
IS lock IX lock