• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • data_locks表

    data_locks表显示了持有和请求的数据锁。有关哪些锁定请求被哪些保持的锁定阻止的信息,请参见“ data_lock_waits表”。

    数据锁信息示例:

    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
    

    与大多数Performance Schema数据收集不同,没有用于控制是否收集数据锁定信息或用于控制数据锁定表大小的系统变量的工具。性能架构收集服务器中已经可用的信息,因此没有内存或CPU开销来生成此信息,也不需要控制其收集的参数。

    使用该data_locks表可帮助诊断在高并行负载下发生的性能问题。对于InnoDB,请参见“ InnoDB INFORMATION_SCHEMA事务和锁定信息”中有关此主题的讨论。

    data_locks表包含以下列:

    • ENGINE

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

    • ENGINE_LOCK_ID

      存储引擎持有或请求的锁的ID。(ENGINE_LOCK_IDENGINE)值的元组是唯一的。

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

    • ENGINE_TRANSACTION_ID

      请求锁定的事务的存储引擎内部ID。可以将其视为锁的所有者,尽管锁可能仍处于挂起状态,但尚未实际授予(LOCK_STATUS='WAITING')。

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

      对于InnoDB,要获取有关交易的详细信息,请将此列与表的TRX_ID列连接在一起INFORMATION_SCHEMAINNODB_TRX

    • THREAD_ID

      创建锁的会话的线程ID。要获取有关线程的详细信息,请将此列与THREAD_ID“性能模式”threads表的列连接在一起。

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

    • EVENT_ID

      导致锁定的Performance Schema事件。(THREAD_IDEVENT_ID)值的元组隐式标识其他性能模式表中的父事件:

      • 表中的父级等待事件events_waits_xxx
      • 表中的父阶段事件events_stages_xxx
      • 表中的父语句事件events_statements_xxx
      • 在父事务事件events_transactions_current

      要获取有关父事件的详细信息,请在相应的父事件表中将THREAD_IDEVENT_ID列与名称相似的列连接在一起。

    • OBJECT_SCHEMA

      包含锁定表的架构。

    • OBJECT_NAME

      锁定表的名称。

    • PARTITION_NAME

      锁定分区的名称(如果有);NULL除此以外。

    • SUBPARTITION_NAME

      锁定的子分区的名称(如果有);NULL除此以外。

    • INDEX_NAME

      锁定索引的名称(如果有);NULL除此以外。

      在实践中,InnoDB总是创建索引(GEN_CLUST_INDEX),所以INDEX_NAME是不NULLInnoDB表。

    • OBJECT_INSTANCE_BEGIN

      锁的内存中的地址。

    • LOCK_TYPE

      锁的类型。

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

    • LOCK_MODE

      如何请求锁定。

      该值取决于存储引擎。为InnoDB,允许值是S[,GAP]X[,GAP]IS[,GAP]IX[,GAP]AUTO_INC,和UNKNOWN。如果存在,则除AUTO_INC和以外的其他锁定模式UNKNOWN表示间隙锁定。有关信息SXISIX,和差距锁,请参阅第15.7.1,“InnoDB的锁定”。

    • LOCK_STATUS

      锁定请求的状态。

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

    • LOCK_DATA

      与锁关联的数据(如果有)。该值取决于存储引擎。例如InnoDB,如果LOCK_TYPERECORD,则显示一个值,否则为NULL。显示了锁定记录的主键值,以表示放置在主键索引上的锁。显示锁定记录的二级索引值,并在二级索引上附加锁的主键值。如果没有主键,则根据控制规则,LOCK_DATA显示所选唯一索引的键值或唯一InnoDB内部行ID号InnoDB聚集索引的使用(请参见“聚集索引和二级索引”)。LOCK_DATA报告“最高伪记录”以获取对最高伪记录的锁定。如果包含锁定记录的页面不在缓冲池中,因为它是在持有锁定时被写入磁盘的,InnoDB则不会从磁盘中获取页面。而是LOCK_DATA报告NULL

    data_locks表具有以下索引:

    • ENGINE_LOCK_IDENGINE)上的主键
    • 在(ENGINE_TRANSACTION_IDENGINE)上的索引
    • 在(THREAD_IDEVENT_ID)上的索引
    • 在指数(OBJECT_SCHEMAOBJECT_NAMEPARTITION_NAMESUBPARTITION_NAME

    TRUNCATE TABLE不允许用于该data_locks表。