一个 INFORMATION_SCHEMA
表和两个性能模式表使您能够监控 InnoDB
事务并诊断潜在的锁定问题
INNODB_TRX
: 此INFORMATION_SCHEMA
表提供有关当前在InnoDB
内执行的每个事务的信息,包括事务状态(例如,是否正在运行或正在等待锁)、事务开始时间以及事务正在执行的特定 SQL 语句。data_locks
: 此性能模式表包含每个持有锁和每个被阻止等待持有锁释放的锁请求的行对于每个持有锁,无论持有锁的事务状态如何(
INNODB_TRX.TRX_STATE
为RUNNING
、LOCK WAIT
、ROLLING BACK
或COMMITTING
),都会有一行。InnoDB 中每个正在等待另一个事务释放锁的事务(
INNODB_TRX.TRX_STATE
为LOCK WAIT
)都由一个阻塞锁请求阻塞。该阻塞锁请求是为了另一个事务以不兼容模式持有的行锁或表锁。锁请求总是具有与阻塞请求的持有锁的模式不兼容的模式(读取与写入,共享与独占)。被阻止的事务无法继续,直到另一个事务提交或回滚,从而释放请求的锁。对于每个被阻止的事务,
data_locks
包含一行,描述事务请求的每个锁,以及阻止该请求的任何锁。
data_lock_waits
: 此性能模式表指示哪些事务正在等待给定锁,或者给定事务正在等待哪个锁。此表包含被阻止的每个事务的一行或多行,指示其请求的锁以及阻止该请求的任何锁。REQUESTING_ENGINE_LOCK_ID
值指的是事务请求的锁,而BLOCKING_ENGINE_LOCK_ID
值指的是阻止第一个事务继续的锁(由另一个事务持有)。对于任何给定的被阻止的事务,data_lock_waits
中的所有行对REQUESTING_ENGINE_LOCK_ID
具有相同的值,而对BLOCKING_ENGINE_LOCK_ID
具有不同的值。
有关上述表的更多信息,请参阅 第 28.4.28 节,“INFORMATION_SCHEMA INNODB_TRX 表”、第 29.12.13.1 节,“data_locks 表” 和 第 29.12.13.2 节,“data_lock_waits 表”。