文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


17.15.2.2 InnoDB 锁和锁等待信息

当事务更新表中的一行,或使用 SELECT FOR UPDATE 锁定它时,InnoDB 会在该行上建立一个锁列表或队列。类似地,InnoDB 会为表级锁维护一个表上的锁列表。如果第二个事务想要更新或锁定先前事务以不兼容模式锁定的行或表,InnoDB 会将该行的锁请求添加到相应的队列中。为了使事务获取锁,必须删除先前输入该行或表的锁队列中的所有不兼容的锁请求(当持有或请求这些锁的事务提交或回滚时,就会发生这种情况)。

一个事务可能对不同的行或表有任意数量的锁请求。在任何给定时间,一个事务都可能请求另一个事务持有的锁,在这种情况下,它会被另一个事务阻塞。请求事务必须等待持有阻塞锁的事务提交或回滚。如果事务没有等待锁,则它处于 RUNNING 状态。如果事务正在等待锁,则它处于 LOCK WAIT 状态。(INFORMATION_SCHEMA INNODB_TRX 表指示事务状态值。)

性能架构 data_locks 表为每个 LOCK WAIT 事务保存一行或多行,指示阻止其进程的所有锁请求。此表还包含一行,描述给定行或表的待处理锁队列中的每个锁。性能架构 data_lock_waits 表显示了哪些事务已持有的锁正在阻塞其他事务请求的锁。