Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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 表显示了哪些锁已经被事务持有,阻止了其他事务的锁请求。