三个InnoDB
INFORMATION_SCHEMA
表使您能够监视事务并诊断潜在的锁定问题:
INNODB_TRX
:提供关于当前在内部执行的每个事务的信息InnoDB
,包括事务状态(例如,它是在运行还是在等待锁)、事务启动的时间以及事务正在执行的特定SQL语句。INNODB_LOCKS
: InnoDB中等待另一个事务释放锁的每个事务(INNODB_TRX。TRX_STATE
是锁等待
)被一个阻塞锁请求阻塞。阻塞锁请求是针对另一个事务以不兼容的模式持有的行锁或表锁。阻塞事务的锁总是以与请求锁的模式不兼容的模式持有(读还是写,共享还是独占)。被阻塞的事务不能继续进行,直到其他事务提交或回滚,从而释放所请求的锁。对于每一个被阻止的交易,INNODB_LOCKS
包含一行,描述事务请求的每个锁以及事务正在等待的锁。INNODB_LOCKS
也包含了阻塞另一个事务的每个锁的一行,不管持有锁的事务的状态如何(INNODB_TRX。TRX_STATE
是运行
,锁等待
,回滚
或提交
).INNODB_LOCK_WAITS
:这个表表示哪些事务正在等待给定的锁,或者某个给定的事务正在等待哪个锁。对于每个被阻塞的事务,该表包含一行或多行,表示它请求的锁以及阻塞该请求的任何锁。的REQUESTED_LOCK_ID
值是指事务请求的锁,而BLOCKING_LOCK_ID
Value是指阻止第一个事务继续进行的锁(由另一个事务持有)。对于任何给定的阻塞事务,所有的行INNODB_LOCK_WAITS
有相同的值REQUESTED_LOCK_ID
和不同的值BLOCKING_LOCK_ID
.
有关上述表的详细信息,请参见Section 24.4.28“INFORMATION_SCHEMA INNODB_TRX表”,Section 24.4.14“INFORMATION_SCHEMA INNODB_LOCKS表”,Section 24.4.15“INFORMATION_SCHEMA INNODB_LOCK_WAITS表”.