该 data_lock_waits
表实现了数据锁请求在 data_locks
表中的多对多关系,显示哪些数据锁请求被哪些持有的数据锁阻塞。
这些信息使您能够理解会话之间的数据锁依赖关系。该表不仅显示哪个锁一个会话或事务正在等待,还显示哪个会话或事务当前持有该锁。
示例数据锁等待信息:
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
与大多数性能模式数据收集不同,没有仪器来控制数据锁信息的收集或系统变量来控制数据锁表的大小。性能模式收集已经在服务器中可用的信息,因此不需要控制其收集的内存或 CPU 开销或需要参数来控制其收集。
使用 data_lock_waits
表来帮助诊断在高并发负载期间出现的性能问题。对于 InnoDB,请参阅 第 17.15.2 节,“InnoDB INFORMATION_SCHEMA 事务和锁定信息” 中的讨论。
因为 data_lock_waits
表的列与 data_locks
表的列相似,因此这里的列描述被缩短。有关详细的列描述,请参阅 第 29.12.13.1 节,“数据锁表”。
该 data_lock_waits
表具有以下列:
-
ENGINE
请求锁的存储引擎。
-
REQUESTING_ENGINE_LOCK_ID
存储引擎请求的锁 ID。要获取锁的详细信息,请将该列与
data_locks
表的ENGINE_LOCK_ID
列连接。 -
REQUESTING_ENGINE_TRANSACTION_ID
请求锁的事务的存储引擎内部 ID。
-
REQUESTING_THREAD_ID
请求锁的会话的线程 ID。
-
REQUESTING_EVENT_ID
在请求锁的会话中引起锁请求的性能模式事件。
-
REQUESTING_OBJECT_INSTANCE_BEGIN
请求锁的内存地址。
-
BLOCKING_ENGINE_LOCK_ID
阻塞锁的 ID。要获取锁的详细信息,请将该列与
data_locks
表的ENGINE_LOCK_ID
列连接。 -
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
表。