本节描述了性能模式data_locks和
data_lock_waits表公开的锁定信息,它们取代了MySQL 8.0 中的INFORMATION_SCHEMA
INNODB_LOCKS和
INNODB_LOCK_WAITS表。有关根据旧INFORMATION_SCHEMA表编写的类似讨论,请参阅
MySQL 5.7 参考手册中的 InnoDB 事务和锁定信息的持久性和一致性。
事务和锁定表(INFORMATION_SCHEMA
INNODB_TRX表、性能模式data_locks和
data_lock_waits表)公开的数据代表了对快速变化数据的一瞥。这不像用户表,其中数据仅在发生应用程序启动的更新时发生变化。底层数据是内部系统管理的数据,并且可以非常快速地改变:
INNODB_TRX、data_locks和data_lock_waits表 之间的数据可能不一致 。data_locks和data_lock_waits表公开来自存储引擎的实时数据 ,InnoDB以提供有关表中事务的锁定信息INNODB_TRX。从锁表中检索的数据在SELECT执行时存在,但在客户端使用查询结果时可能会消失或更改。连接
data_lockswithdata_lock_waits可以显示data_lock_waits其中标识父行的行,其中父行data_locks不再存在或尚不存在。事务和锁定表中的数据可能与
INFORMATION_SCHEMAPROCESSLIST表或性能模式threads表中的数据不一致。例如,在
InnoDB事务中比较数据和锁定表与表中的数据时要小心PROCESSLIST。即使你发单SELECT(比如joinINNODB_TRXandPROCESSLIST),那些表的内容一般也不一致。INNODB_TRX可以引用不存在于中的行, 或者PROCESSLIST对于当前正在执行的事务的 SQL 查询,与中所示的INNODB_TRX.TRX_QUERY不同PROCESSLIST.INFO。