文档主页
MySQL 9.0 参考手册
相关文档 下载此手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (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 表显示事务持有的哪些锁正在阻止其他事务请求的锁。