本节描述由性能模式公开的锁定信息data_locks
而且data_lock_waits
表,这些表将取代INFORMATION_SCHEMA
INNODB_LOCKS
而且INNODB_LOCK_WAITS
表。对于类似的讨论写在较老的术语INFORMATION_SCHEMA
表,请参阅InnoDB INFORMATION_SCHEMA事务和锁定信息,在MySQL 5.7参考手册.
一个INFORMATION_SCHEMA
表和两个Performance Schema表允许您监视InnoDB
事务和诊断潜在的锁定问题:
INNODB_TRX
:这INFORMATION_SCHEMA
表提供了关于当前在内部执行的每个事务的信息InnoDB
,包括事务状态(例如,它是在运行还是在等待锁)、事务启动的时间以及事务正在执行的特定SQL语句。data_locks
:这个Performance Schema表包含了每个持有锁和每个被阻塞的等待被持有锁释放的锁请求的一行:不管持有锁的事务的状态如何,每个持有的锁都有一行(
INNODB_TRX。TRX_STATE
是运行
,锁等待
,回滚
或提交
).InnoDB中等待另一个事务释放锁的每个事务(
INNODB_TRX。TRX_STATE
是锁等待
)被一个阻塞锁请求阻塞。阻塞锁请求是针对另一个事务以不兼容的模式持有的行锁或表锁。锁请求总是具有与阻塞请求的持有锁的模式不兼容的模式(读还是写,共享还是独占)。被阻塞的事务不能继续进行,直到其他事务提交或回滚,从而释放所请求的锁。对于每一个被阻止的交易,
data_locks
包含一行,描述事务请求的每个锁以及事务正在等待的锁。
data_lock_waits
:这个性能模式表表示哪些事务正在等待给定的锁,或者给定的事务正在等待哪个锁。对于每个被阻塞的事务,该表包含一行或多行,表示它请求的锁以及阻塞该请求的任何锁。的REQUESTING_ENGINE_LOCK_ID
值是指事务请求的锁,而BLOCKING_ENGINE_LOCK_ID
Value是指阻止第一个事务继续进行的锁(由另一个事务持有)。对于任何给定的阻塞事务,所有的行data_lock_waits
有相同的值REQUESTING_ENGINE_LOCK_ID
和不同的值BLOCKING_ENGINE_LOCK_ID
.
有关上述表的详细信息,请参见章节26.4.28,“INFORMATION_SCHEMA INNODB_TRX表”,第27.12.13.1节“data_locks表”,第27.12.13.2节“data_lock_waits表”.