该INNODB_LOCKS表提供有关InnoDB
事务已请求但尚未获取的每个锁的信息,以及事务持有的阻塞另一个事务的每个锁的信息。
从 MySQL 5.7.14 开始不推荐使用此表,并在 MySQL 8.0 中删除。
该INNODB_LOCKS表有以下列:
LOCK_ID内部的唯一锁 ID 号
InnoDB。将其视为不透明字符串。虽然LOCK_ID目前包含TRX_ID,但其中数据的格式LOCK_ID随时可能更改。不要编写解析该LOCK_ID值的应用程序。LOCK_TRX_ID持有锁的事务的 ID。要获取有关交易的详细信息,请将此列与表的列连接
TRX_ID起来INNODB_TRX。LOCK_MODE如何请求锁。允许的锁定模式描述符是
S、X、IS、IX、GAP、AUTO_INC和UNKNOWN。锁定模式描述符可以结合使用来标识特定的锁定模式。有关InnoDB锁定模式的信息,请参阅 第 14.7.1 节,“InnoDB 锁定”。LOCK_TYPE锁的类型。允许的值
RECORD用于行级锁,TABLE用于表级锁。LOCK_TABLE已锁定或包含锁定记录的表的名称。
LOCK_INDEX索引的名称,如果
LOCK_TYPE是RECORD;否则NULL。LOCK_SPACE锁定记录的表空间 ID,如果
LOCK_TYPE是RECORD; 否则NULL。LOCK_PAGE锁定记录的页码,如果
LOCK_TYPE是RECORD; 否则NULL。LOCK_REC页面内锁定记录的堆号,如果
LOCK_TYPE是RECORD; 否则NULL。LOCK_DATA与锁关联的数据(如果有)。如果 是 则显示一个值
LOCK_TYPE,RECORD否则该值为NULL。对于放置在主键索引上的锁,显示锁定记录的主键值。对于放置在唯一二级索引上的锁,显示锁定记录的二级索引值。如果二级索引不唯一,二级索引值将附加主键值显示。如果没有主键,则根据聚簇索引使用规则LOCK_DATA显示选定唯一索引的键值或唯一 内部行 ID 号(请参阅InnoDBInnoDB第 14.6.2.1 节,“聚簇索引和二级索引”)。LOCK_DATA报告在 supremum 伪记录上获取的锁的“ supremum pseudo-record ”。如果包含锁定记录的页面不在缓冲池中,因为它是在持有锁时写入磁盘的,InnoDB则不会从磁盘中获取该页面。相反,LOCK_DATA报告NULL。
例子
mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS\G
*************************** 1. row ***************************
lock_id: 3723:72:3:2
lock_trx_id: 3723
lock_mode: X
lock_type: RECORD
lock_table: `mysql`.`t`
lock_index: PRIMARY
lock_space: 72
lock_page: 3
lock_rec: 2
lock_data: 1, 9
*************************** 2. row ***************************
lock_id: 3722:72:3:2
lock_trx_id: 3722
lock_mode: S
lock_type: RECORD
lock_table: `mysql`.`t`
lock_index: PRIMARY
lock_space: 72
lock_page: 3
lock_rec: 2
lock_data: 1, 9
笔记
使用此表可帮助诊断在高并发负载期间出现的性能问题。其内容如 第 14.16.2.3 节,“InnoDB 事务和锁定信息的持久性和一致性”中所述进行了更新。
您必须具有
PROCESS查询此表的权限。使用
INFORMATION_SCHEMACOLUMNS表或SHOW COLUMNS语句查看有关此表的列的其他信息,包括数据类型和默认值。有关使用信息,请参阅 第 14.16.2.1 节,“使用 InnoDB 事务和锁定信息”。