本节描述了性能模式data_locks
和
data_lock_waits
表公开的锁定信息,它们取代了MySQL 8.0 中的INFORMATION_SCHEMA
INNODB_LOCKS
和
INNODB_LOCK_WAITS
表。有关根据旧INFORMATION_SCHEMA
表编写的类似讨论,请参阅
MySQL 5.7 参考手册中的 InnoDB Lock and Lock-Wait Information。
当事务更新表中的一行或使用 锁定它时
SELECT FOR UPDATE
,InnoDB
会在该行上建立一个锁列表或队列。同样,
InnoDB
为表级锁维护一个表上的锁列表。如果第二个事务想要更新行或锁定已被先前事务以不兼容模式锁定的表InnoDB
,则将对该行的锁定请求添加到相应的队列中。对于要由事务获取的锁,必须删除之前进入该行或表的锁队列的所有不兼容的锁请求(这发生在持有或请求这些锁的事务提交或回滚时)。
一个事务可能对不同的行或表有任意数量的锁请求。在任何给定时间,一个事务可能会请求另一个事务持有的锁,在这种情况下,它会被另一个事务阻塞。请求事务必须等待持有阻塞锁的事务提交或回滚。如果一个事务没有在等待锁,那么它就处于一个RUNNING
状态。如果事务正在等待锁,则它处于一个LOCK WAIT
状态。(该INFORMATION_SCHEMA
INNODB_TRX
表指示事务状态值。)
Performance Schemadata_locks
表为每个事务保存一行或多行LOCK
WAIT
,指示阻止其进程的任何锁定请求。该表还包含一行,描述给定行或表的挂起锁队列中的每个锁。Performance Schema
data_lock_waits
表显示了一个事务已经持有的哪些锁是其他事务请求的阻塞锁。