本节描述了性能模式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_locks
withdata_lock_waits
可以显示data_lock_waits
其中标识父行的行,其中父行data_locks
不再存在或尚不存在。事务和锁定表中的数据可能与
INFORMATION_SCHEMA
PROCESSLIST
表或性能模式threads
表中的数据不一致。例如,在
InnoDB
事务中比较数据和锁定表与表中的数据时要小心PROCESSLIST
。即使你发单SELECT
(比如joinINNODB_TRX
andPROCESSLIST
),那些表的内容一般也不一致。INNODB_TRX
可以引用不存在于中的行, 或者PROCESSLIST
对于当前正在执行的事务的 SQL 查询,与中所示的INNODB_TRX.TRX_QUERY
不同PROCESSLIST.INFO
。