一个 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 表”。