MySQL 8.0 参考手册 / 第 15 章 InnoDB 存储引擎 / 15.15 InnoDB INFORMATION_SCHEMA 表 / 15.15.2 InnoDB INFORMATION_SCHEMA 事务和锁定信息 /
14.16.2.2 InnoDB 锁定和锁定等待信息
当事务更新表中的一行或使用 锁定它时
SELECT FOR UPDATE
,InnoDB
会在该行上建立一个锁列表或队列。同样,
InnoDB
为表级锁维护一个表上的锁列表。如果第二个事务想要更新行或锁定已被先前事务以不兼容模式锁定的表InnoDB
,则将对该行的锁定请求添加到相应的队列中。对于要由事务获取的锁,必须删除之前进入该行或表的锁队列的所有不兼容的锁请求(这发生在持有或请求这些锁的事务提交或回滚时)。
一个事务可能对不同的行或表有任意数量的锁请求。在任何给定时间,一个事务可能会请求另一个事务持有的锁,在这种情况下,它会被另一个事务阻塞。请求事务必须等待持有阻塞锁的事务提交或回滚。如果一个事务没有在等待锁,那么它就处于一个RUNNING
状态。如果事务正在等待锁,则它处于一个LOCK WAIT
状态。(该INFORMATION_SCHEMA
INNODB_TRX
表指示事务状态值。)
该INNODB_LOCKS
表为每个事务保存一行或多行LOCK WAIT
,指示阻止其进行的任何锁定请求。该表还包含一行,描述给定行或表的挂起锁队列中的每个锁。该
INNODB_LOCK_WAITS
表显示了一个事务已经持有的哪些锁是其他事务请求的阻塞锁。