24.32.13 INFORMATION_SCHEMA INNODB_LOCKStable
INNODB_LOCKStable 提供有关InnoDB
事务已请求但尚未获取的每个锁的信息,以及事务持有的阻止另一个事务的每个锁的信息。
Note
自 MySQL 5.7.14 起不推荐使用此 table,并已在 MySQL 8.0 中删除。
INNODB_LOCKStable 具有以下列:
LOCK_ID
InnoDB
内部的唯一锁 ID 号。将其视为不透明的字符串。尽管LOCK_ID
当前包含TRX_ID
,但是LOCK_ID
中的数据格式随时可能更改。不要编写解析LOCK_ID
值的应用程序。
LOCK_TRX_ID
持有锁的事务的 ID。要获取有关 Transaction 的详细信息,请将此列与INNODB_TRXtable 的TRX_ID
列连接在一起。
LOCK_MODE
如何请求锁定。允许的锁定模式 Descriptors 为S
,X
,IS
,IX
,GAP
,AUTO_INC
和UNKNOWN
。锁定模式 Descriptors 可以组合使用以标识特定的锁定模式。有关InnoDB
锁定模式的信息,请参见第 14.7.1 节“ InnoDB 锁定”。
LOCK_TYPE
锁的类型。行级锁的允许值为RECORD
,table 级锁的允许值为TABLE
。
LOCK_TABLE
已锁定或包含锁定记录的 table 的名称。
LOCK_INDEX
索引的名称(如果LOCK_TYPE
为RECORD
);否则NULL
。
LOCK_SPACE
锁定记录的 table 空间 ID(如果LOCK_TYPE
为RECORD
);否则NULL
。
LOCK_PAGE
锁定记录的页码(如果LOCK_TYPE
为RECORD
);否则NULL
。
LOCK_REC
页面中锁定记录的堆号(如果LOCK_TYPE
为RECORD
);否则NULL
。
LOCK_DATA
与锁关联的数据(如果有)。如果LOCK_TYPE
为RECORD
,则显示一个值,否则为NULL
。显示锁定记录的主键值,以 table 示放置在主键索引上的锁。显示了锁定记录的二级索引值,用于放置在唯一二级索引上的锁。如果辅助索引不是唯一的,则显示辅助索引值并附加主键值。如果没有主键,则根据控制InnoDB
聚集索引使用的规则(请参见第 14.6.2.1 节“群集索引和二级索引”),LOCK_DATA
将显示所选唯一索引的键值或唯一InnoDB
内部行 ID 号。 LOCK_DATA
报告“最高伪记录”,以获取对最高伪记录的锁定。如果包含锁定记录的页面不在缓冲池中,因为它是在持有锁定时被写入磁盘的,则InnoDB
不会从磁盘获取页面。而是LOCK_DATA
报告NULL
。
Example
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
Notes
-
使用此 table 可帮助诊断在并发负载很大时发生的性能问题。其内容按照第 14.16.2.3 节“ InnoDB 事务和锁定信息的持久性和一致性”中的说明进行更新。
-
您必须具有PROCESS特权才能查询此 table。
-
使用
INFORMATION_SCHEMA
COLUMNStable 或SHOW COLUMNS语句查看有关此 table 列的其他信息,包括数据类型和默认值。 -
有关使用信息,请参阅第 14.16.2.1 节,“使用 InnoDB 事务和锁定信息”。