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