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_SCHEMAPROCESSLIST表或性能模式threads表中的数据不一致。例如,在比较
InnoDB事务中的数据和锁定表与表中的数据时应该小心PROCESSLIST。即使您发出一个单SELECT(例如连接INNODB_TRX和PROCESSLIST),这些表的内容通常也不一致。INNODB_TRX可以引用不存在于 中的行, 或者PROCESSLIST用于当前执行的事务的 SQL 查询与 中的INNODB_TRX.TRX_QUERY不同PROCESSLIST.INFO。