Documentation Home

27.12.13.2 data_lock_waits 表

data_lock_waits表实现多对多关系,显示表中的哪些数据锁请求被data_locks表中的哪些数据锁阻塞 data_locks。只有当它们阻止某些锁定请求时 ,持有的锁 data_locks才会出现 。data_lock_waits

此信息使您能够了解会话之间的数据锁依赖关系。该表不仅公开了会话或事务正在等待哪个锁,而且还公开了当前持有该锁的会话或事务。

示例数据锁定等待信息:

mysql> SELECT * FROM performance_schema.data_lock_waits\G
*************************** 1. row ***************************
                          ENGINE: INNODB
       REQUESTING_ENGINE_LOCK_ID: 140211201964816:2:4:2:140211086465800
REQUESTING_ENGINE_TRANSACTION_ID: 1555
            REQUESTING_THREAD_ID: 47
             REQUESTING_EVENT_ID: 5
REQUESTING_OBJECT_INSTANCE_BEGIN: 140211086465800
         BLOCKING_ENGINE_LOCK_ID: 140211201963888:2:4:2:140211086459880
  BLOCKING_ENGINE_TRANSACTION_ID: 1554
              BLOCKING_THREAD_ID: 46
               BLOCKING_EVENT_ID: 12
  BLOCKING_OBJECT_INSTANCE_BEGIN: 140211086459880

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

使用该data_lock_waits表可帮助诊断在并发负载较重时发生的性能问题。对于,请参阅第 15.15.2 节“InnoDB INFORMATION_SCHEMA 事务和锁定信息”InnoDB中对此主题的讨论 。

由于表中的列与 data_lock_waits表中的列相似,data_locks此处的列说明有所简化。有关更详细的列描述,请参阅 第 27.12.13.1 节,“data_locks 表”

data_lock_waits表有以下列:

  • ENGINE

    请求锁的存储引擎。

  • REQUESTING_ENGINE_LOCK_ID

    存储引擎请求的锁的 ID。要获取有关锁的详细信息,请将此列与表的列连接 ENGINE_LOCK_ID起来 data_locks

  • REQUESTING_ENGINE_TRANSACTION_ID

    请求锁的事务的存储引擎内部 ID。

  • REQUESTING_THREAD_ID

    请求锁定的会话的线程 ID。

  • REQUESTING_EVENT_ID

    在请求锁定的会话中导致锁定请求的性能模式事件。

  • REQUESTING_OBJECT_INSTANCE_BEGIN

    请求的锁在内存中的地址。

  • BLOCKING_ENGINE_LOCK_ID

    阻塞锁的 ID。要获取有关锁的详细信息,请将此列与表的列连接 ENGINE_LOCK_ID起来 data_locks

  • BLOCKING_ENGINE_TRANSACTION_ID

    持有阻塞锁的事务的存储引擎内部 ID。

  • BLOCKING_THREAD_ID

    持有阻塞锁的会话的线程 ID。

  • BLOCKING_EVENT_ID

    在持有它的会话中导致阻塞锁的性能模式事件。

  • BLOCKING_OBJECT_INSTANCE_BEGIN

    阻塞锁在内存中的地址。

data_lock_waits表具有以下索引:

  • REQUESTING_ENGINE_LOCK_ID( , ENGINE) 上的索引

  • BLOCKING_ENGINE_LOCK_ID( , ENGINE) 上的索引

  • REQUESTING_ENGINE_TRANSACTION_ID( , ENGINE) 上的索引

  • BLOCKING_ENGINE_TRANSACTION_ID( , ENGINE) 上的索引

  • REQUESTING_THREAD_ID( , REQUESTING_EVENT_ID) 上的索引

  • BLOCKING_THREAD_ID( , BLOCKING_EVENT_ID) 上的索引

TRUNCATE TABLE不允许用于data_lock_waits表。

笔记

在 MySQL 8.0.1 之前,该表中提供了类似于 Performance Schema data_lock_waits表中的 INFORMATION_SCHEMA.INNODB_LOCK_WAITS 信息,它提供了有关每个阻塞 InnoDB事务的信息,指示它已请求的锁以及正在阻塞该请求的任何锁。 INFORMATION_SCHEMA.INNODB_LOCK_WAITS已弃用并从 MySQL 8.0.1 开始删除。 data_lock_waits应该改用。

这些表所需的权限不同: INNODB_LOCK_WAITS表需要全局 PROCESS权限。该 data_lock_waits表需要通常的 Performance Schema 权限 SELECT才能从中选择表。

下表显示了从 INNODB_LOCK_WAITS列到 data_lock_waits列的映射。使用此信息将应用程序从一个表迁移到另一个表。

表 27.5 从 INNODB_LOCK_WAITS 到 data_lock_waits 列的映射

INNODB_LOCK_WAITS 列 data_lock_waits 列
REQUESTING_TRX_ID REQUESTING_ENGINE_TRANSACTION_ID
REQUESTED_LOCK_ID REQUESTING_ENGINE_LOCK_ID
BLOCKING_TRX_ID BLOCKING_ENGINE_TRANSACTION_ID
BLOCKING_LOCK_ID BLOCKING_ENGINE_LOCK_ID