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