The 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
表来帮助诊断在高并发负载期间发生的性能问题。 对于 InnoDB
,请参阅 第 17.15.2 节,“InnoDB INFORMATION_SCHEMA 事务和锁定信息” 中对此主题的讨论。
由于 data_lock_waits
表中的列与 data_locks
表中的列类似,因此此处对列描述进行了简化。 有关更详细的列描述,请参阅 第 29.12.13.1 节,“data_locks 表”。
The 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
在请求锁的会话中导致锁请求的 Performance Schema 事件。
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
在持有阻塞锁的会话中导致阻塞锁的 Performance Schema 事件。
BLOCKING_OBJECT_INSTANCE_BEGIN
阻塞锁在内存中的地址。
The 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
表。