本节描述了性能模式data_locks和 data_lock_waits表所公开的锁定信息,这些信息取代了MySQL 8.0中的INFORMATION_SCHEMA INNODB_LOCKS和 INNODB_LOCK_WAITS表。
一个INFORMATION_SCHEMA表和两个Performance Schema表使您可以监视 InnoDB事务并诊断潜在的锁定问题:
1、INNODB_TRX:此 INFORMATION_SCHEMA表提供有关内部当前正在执行的每个事务的信息 InnoDB,包括事务状态(例如,它是正在运行还是正在等待锁),事务何时开始以及事务正在执行的特定SQL语句。
2、data_locks:此性能模式表中的每个保留锁行和每个被锁定等待释放保留锁的锁请求都包含一行:
有一行各举行了锁,无论是持有锁的事务的状态(INNODB_TRX.TRX_STATE是 RUNNING,LOCK WAIT, ROLLING BACK或 COMMITTING)。
InnoDB中等待另一个事务释放锁(INNODB_TRX.TRX_STATEis LOCK WAIT)的每个事务都恰好被一个阻塞锁定请求阻塞。该阻塞锁请求是针对另一个事务以不兼容模式持有的行锁或表锁。锁定请求始终具有与阻止请求的保持锁定模式不兼容的模式(读与写,共享与独占)。
在其他事务提交或回滚之前,被阻止的事务无法继续进行,从而释放请求的锁。对于每个被阻止的事务, data_locks包含一行,描述该事务已请求的每个锁以及正在等待的锁。
3、
data_lock_waits:此性能架构表指示哪些事务正在等待给定的锁,或者给定事务正在等待哪个锁。此表包含每个被阻止事务的一行或多行,指示它请求的锁和阻止该请求的任何锁。REQUESTING_ENGINE_LOCK_ID值是指事务请求的锁,BLOCKING_ENGINE_LOCK_ID值是指阻止第一个事务继续进行的锁(由另一个事务持有)。对于任何给定的阻塞事务,data_lock_waits中的所有行都具有相同的REQUESTING_ENGINE_LOCK_ID的值,以及不同的BLOCKING_ENGINE_LOCK_ID的值。