Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

29.12.13.1 数据锁表

data_locks 表显示了持有的数据锁和请求的数据锁。有关哪些锁请求被哪些持有的锁阻塞的信息,请参见 第 29.12.13.2 节,“数据锁等待表”

示例数据锁信息:

mysql> SELECT * FROM performance_schema.data_locks\G
*************************** 1. row ***************************
               ENGINE: INNODB
       ENGINE_LOCK_ID: 139664434886512:1059:139664350547912
ENGINE_TRANSACTION_ID: 2569
            THREAD_ID: 46
             EVENT_ID: 12
        OBJECT_SCHEMA: test
          OBJECT_NAME: t1
       PARTITION_NAME: NULL
    SUBPARTITION_NAME: NULL
           INDEX_NAME: NULL
OBJECT_INSTANCE_BEGIN: 139664350547912
            LOCK_TYPE: TABLE
            LOCK_MODE: IX
          LOCK_STATUS: GRANTED
            LOCK_DATA: NULL
*************************** 2. row ***************************
               ENGINE: INNODB
       ENGINE_LOCK_ID: 139664434886512:2:4:1:139664350544872
ENGINE_TRANSACTION_ID: 2569
            THREAD_ID: 46
             EVENT_ID: 12
        OBJECT_SCHEMA: test
          OBJECT_NAME: t1
       PARTITION_NAME: NULL
    SUBPARTITION_NAME: NULL
           INDEX_NAME: GEN_CLUST_INDEX
OBJECT_INSTANCE_BEGIN: 139664350544872
            LOCK_TYPE: RECORD
            LOCK_MODE: X
          LOCK_STATUS: GRANTED
            LOCK_DATA: supremum pseudo-record

与大多数性能模式数据收集不同,没有控制数据锁信息收集的仪器或系统变量来控制数据锁表大小。性能模式收集已经在服务器中可用的信息,因此不需要控制其收集的内存或 CPU 开销或参数。

使用 data_locks 表来帮助诊断在高并发负载期间出现的性能问题。对于 InnoDB,请参见 第 17.15.2 节,“InnoDB INFORMATION_SCHEMA 事务和锁定信息” 中的相关讨论。

data_locks 表具有以下列:

  • ENGINE

    持有或请求锁的存储引擎。

  • ENGINE_LOCK_ID

    存储引擎持有的或请求的锁的 ID。 (ENGINE_LOCK_ID, ENGINE) 值对是唯一的。

    锁 ID 格式是内部的,可能随时更改。应用程序不应依赖锁 ID 具有特定格式。

  • ENGINE_TRANSACTION_ID

    请求锁的交易的存储引擎内部 ID。这可以被认为是锁的所有者,尽管锁可能仍然是待定的,尚未授予 (LOCK_STATUS='WAITING')。

    如果交易尚未执行任何写操作(仍被认为是只读的),则该列包含内部数据,用户不应尝试解释。否则,该列是交易 ID。

    对于 InnoDB,要获取交易的详细信息,请将该列与 INFORMATION_SCHEMA INNODB_TRX 表的 TRX_ID 列进行连接。

  • THREAD_ID

    创建锁的会话的线程 ID。要获取线程的详细信息,请将该列与 Performance Schema threads 表的 THREAD_ID 列进行连接。

    THREAD_ID 可以与 EVENT_ID 一起使用,以确定在内存中创建锁数据结构的事件。(该事件可能发生在锁请求之前,如果数据结构用于存储多个锁。)

  • EVENT_ID

    导致锁的 Performance Schema 事件。 (THREAD_ID, EVENT_ID) 值隐式标识其他 Performance Schema 表中的父事件:

    • 父等待事件在 events_waits_xxx 表中

    • 父阶段事件在 events_stages_xxx 表中

    • 父语句事件在 events_statements_xxx 表中

    • 父事务事件在 events_transactions_current 表中

    要获取父事件的详细信息,请将 THREAD_IDEVENT_ID 列与相应父事件表中的同名列进行连接。请参见 第 29.19.2 节,“获取父事件信息”

  • OBJECT_SCHEMA

    锁定的表所在的模式。

  • OBJECT_NAME

    锁定的表的名称。

  • PARTITION_NAME

    锁定的分区名称,如果有;否则为 NULL

  • SUBPARTITION_NAME

    锁定的子分区名称,如果有;否则为 NULL

  • INDEX_NAME

    锁定的索引名称,如果有;否则为 NULL

    实际上, InnoDB 总是创建一个索引(GEN_CLUST_INDEX),因此 INDEX_NAME 对于 InnoDB 表不是 NULL

  • OBJECT_INSTANCE_BEGIN

    锁的内存地址。

  • LOCK_TYPE

    锁的类型。

    该值取决于存储引擎。对于 InnoDB,允许的值是 RECORD,表示行级锁,和 TABLE,表示表级锁。

  • LOCK_MODE

    锁的请求方式。

    该值取决于存储引擎。对于 InnoDB,允许的值是 S[,GAP]X[,GAP]IS[,GAP]IX[,GAP]AUTO_INCUNKNOWN。锁模式除了 AUTO_INCUNKNOWN 之外,均表示 gap 锁,如果存在。有关 SXISIX 和 gap 锁的信息,请参阅 第 17.7.1 节,“InnoDB 锁定”

  • LOCK_STATUS

    锁请求的状态。

    该值取决于存储引擎。对于 InnoDB,允许的值是 GRANTED(锁被持有)和 WAITING(锁正在等待)。

  • LOCK_DATA

    锁关联的数据,如果有。该值取决于存储引擎。对于 InnoDB,如果 LOCK_TYPERECORD,则显示锁定的记录的主键值,否则为 NULL。如果没有主键,则 LOCK_DATA 显示唯一索引的键值或 InnoDB 内部行 ID 号,根据 InnoDB 聚集索引使用规则(参阅 第 17.6.2.1 节,“聚集索引和次要索引”)。 LOCK_DATA 报告 supremum 伪记录 对于 supremum 伪记录的锁。如果锁定的记录所在的页面不在缓冲池中,因为它在锁定时被写入磁盘,InnoDB 不会从磁盘中获取该页面。相反,LOCK_DATA 报告 NULL

data_locks 表具有以下索引:

  • 主键在 (ENGINE_LOCK_ID, ENGINE)

  • 索引在 (ENGINE_TRANSACTION_ID, ENGINE)

  • 索引在 (THREAD_ID, EVENT_ID)

  • 索引在 (OBJECT_SCHEMA, OBJECT_NAME, PARTITION_NAME, SUBPARTITION_NAME)

TRUNCATE TABLE 不允许用于 data_locks 表。