INNODB_LOCKS 详解

Posted by 道行尚浅 on January 9, 2021

系统表介绍

INNODB_LOCKS 记录了innodb 事务锁等待信息,包含求而不得的锁,以及一个事务阻塞另一个事务的信息。

列名 含义
lock_id InnoDB内部的唯一锁ID号
lock_trx_id 持有该锁事务编号
lock_mode 锁模式 (S,X,IS,IX,GAP,AUTO_INC UNKNOWN)
lock_type 锁类型 (record index)
lock_table 已锁定或包含锁定记录的表的名称。
lock_index 如是记录锁,存储索引名称,否则为空
lock_space 如是记录锁,存储所在表空间ID,否则为空
lock_page 如是记录锁,存储所在表空间ID
lock_rec 如是记录锁, 存储锁定的行数
lock_data 与锁相关的数据。如果lock_type为行锁时,该值是锁记录的主键值,否则为空。这列包含锁定行的主键列的值,转化为一个有效的字符串,如果没有主键,lock_data是唯一innodb内部行id号。如果是键值或者范围大于索引的最大值会使用间隙锁,lock_data表示为supremum pseudo-record。当包含锁记录的页不在buffer pool内,innodb不去从磁盘获取页,为了避免不必要的磁盘操作,lock_data为空。

实例


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