该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 号(请参阅InnoDB
InnoDB
第 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_SCHEMA
COLUMNS
表或SHOW COLUMNS
语句查看有关此表的列的其他信息,包括数据类型和默认值。有关使用信息,请参阅 第 14.16.2.1 节,“使用 InnoDB 事务和锁定信息”。