MySQL 5.7 原理 InnoDB 事务和锁定信息的持久性和一致性
笔记
本节描述了由性能模式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
可以data_lock_waits
显示标识不再存在或尚不存在data_lock_waits
的父行的行 。data_locks
- 事务表和锁定表中的数据可能与
INFORMATION_SCHEMA
PROCESSLIST
表或性能模式threads
表中的数据不一致。例如,在比较
InnoDB
事务中的数据和锁定表与表中的数据时应该小心PROCESSLIST
。即使您发出一个单SELECT
(例如连接INNODB_TRX
和PROCESSLIST
),这些表的内容通常也不一致。INNODB_TRX
可以引用不存在于 中的行, 或者PROCESSLIST
用于当前执行的事务的 SQL 查询与 中的INNODB_TRX.TRX_QUERY
不同PROCESSLIST.INFO
。