功能
PERFORMANCE_SCHEMA.DATA_LOCK_WAITS 用于展示集群中所有 hybrid 节点的 TDStore 上所有悲观锁等待信息。在用户没有查询
DATA_LOCK_WAITS 表的时候,DATA_LOCK_WAITS 不会带来额外的开销。用户不需要将 performance_schema 系统变量设置为 ON,即可查询 DATA_LOCK_WAITS 表。字段说明
字段名 | 类型 | 描述 |
ENGINE | varchar(32) | 存储引擎。对于 TDStore,值是 RocksDB。 |
REQUESTING_ENGINE_LOCK_ID | varchar(128) | 唯一标识被阻塞的事务正在申请的悲观锁,或者正在读取的 key 范围。对于 TDStore,其格式为 <持有锁的事务 ID>_<锁范围>。<锁范围>的格式是:如果锁的范围是一个单条的 key,则 <锁范围>为 key 的十六进制表示。例如:锁标识符 28673778183569468_00002797 表示 ID 为 28673778183569468的事务在十六进制编码为 00002797 的 key 上加了一个悲观锁。如果锁的范围是一个 key 区间,则 <锁范围>格式为 [<hex_start_key>,<hex_end_key>)(左闭右开)或 (<hex_start_key>,<hex_end_key>)(开区间)。例如:锁标识符 28673778183569468_[00002797,00002798),表示 ID 为 28673778183569468的事务在 [00002797,00002798) 区间加了一个悲观锁。当 key 的十六进制编码过长的时候,可能无法在128字符内表示完全。这个时候,字段值的后两个字符会被置为 ..,表示这不是一个完整的锁标识符。这种情况下,用户通过 ENGINE_LOCK_ID 查询悲观锁信息时,也需要使用带有..的字段值做查询。 |
REQUESTING_NODE_ID | bigint unsigned | 开启被阻塞事务的 SQLEngine 节点 ID。 |
REQUESTING_NODE_NAME | varchar(64) | 开启被阻塞事务的 SQLEngine 节点名称。 |
REQUESTING_ENGINE_TRANSACTION_ID | bigint unsigned | 被阻塞的事务的唯一标识符。对于 TDStore,如果被阻塞的是只读请求,则值为 0。 |
REQUESTING_THREAD_ID | bigint unsigned | 执行被阻塞的事务的线程 ID。Performance Schema 内部维护的线程 ID,可用于关联 Performance Schema 的各类事件表。 |
REQUESTING_EVENT_ID | bigint unsigned | 导致被阻塞的事务加锁的 Performance Schema 事件 ID。对于 TDStore,值为 NULL。 |
REQUESTING_OBJECT_INSTANCE_BEGIN | bigint unsigned | 等锁请求在内存中的地址。 |
BLOCKING_ENGINE_LOCK_ID | varchar(128) | 悲观锁的唯一标识。对于 TDStore ,格式参考 data_locks表的 ENGINE_LOCK_ID字段。 |
BLOCKING_NODE_ID | bigint unsigned | 开启持有悲观锁的事务的 SQLEngine 节点 ID。 |
BLOCKING_NODE_NAME | varchar(64) | 开启持有悲观锁的事务的 SQLEngine 节点名称。 |
BLOCKING_ENGINE_TRANSACTION_ID | bigint unsigned | 持有悲观锁的事务的唯一标识符。如果这个悲观锁是读锁,被多个事务共同持有,则只会展示其中一个事务的唯一标识符。 |
BLOCKING_THREAD_ID | bigint unsigned | 执行持有悲观锁的事务的线程 ID,是 Performance Schema 内部维护的线程 ID,可用于关联 Performance Schema 的各类事件表。 |
BLOCKING_EVENT_ID | bigint unsigned | 导致持有悲观锁的事务加锁的 Performance Schema 事件 ID。对于 TDStore ,值为 NULL。 |
BLOCKING_OBJECT_INSTANCE_BEGIN | bigint unsigned | 悲观锁在内存中的地址。 |
TINDEX_ID | int unsigned | 悲观锁对应的 tindex ID。通过这个字段的值,我们可以执行 SELECT * FROM information_schema.statistics WHERE tindex_id=... 从系统表中获取 tindex ID 对应的表信息。 |
DATA_SPACE_TYPE | varchar(32) | 悲观锁对应的 data space。 DATA_SPACE_TYPE_USER代表对用户表的部分数据加锁,DATA_SPACE_TYPE_SYSTEM代表对系统表的部分数据加锁。 |
REPLICATION_GROUP_ID | bigint unsigned | 悲观锁对应的 replication group ID。 |
KEY_RANGE_REGION_ID | bigint unsigned | 悲观锁对应的 key range region ID。 |
示例
输出示例:
tdsql [(none)]> SELECT * FROM performance_schema.data_lock_waits \\G*************************** 1. row ***************************ENGINE: RocksDBREQUESTING_ENGINE_LOCK_ID: 28681541555060779_[00002797,00002798)REQUESTING_NODE_ID: 2REQUESTING_NODE_NAME: node-1-002REQUESTING_ENGINE_TRANSACTION_ID: 28681541555060779REQUESTING_THREAD_ID: 44REQUESTING_EVENT_ID: 0REQUESTING_OBJECT_INSTANCE_BEGIN: 139759771095568BLOCKING_ENGINE_LOCK_ID: 28681535313936395_0000279780000001BLOCKING_NODE_ID: 1BLOCKING_NODE_NAME: node-1-001BLOCKING_ENGINE_TRANSACTION_ID: 28681535313936395BLOCKING_THREAD_ID: 44BLOCKING_EVENT_ID: 0BLOCKING_OBJECT_INSTANCE_BEGIN: 139759768476120TINDEX_ID: 10135DATA_SPACE_TYPE: DATA_SPACE_TYPE_USERREPLICATION_GROUP_ID: 257KEY_RANGE_REGION_ID: 7312
查询示例:
-- 查询所有节点上,等待悲观锁的请求数量SELECT COUNT(*) FROM performance_schema.data_lock_wais \\G-- 查询所有节点上,replication group 257 的 key range region 7312 的所有的悲观锁等待信息(仅指定 key_range_region_id 也可查询,但效率较差,无法利用索引加速查询)SELECT * FROM performance_schema.data_lock_waits WHERE replication_group_id = 257 AND key_range_region_id = 7312 \\G-- 查询所有节点上,事务 28682479434989637 正在等待的悲观锁的信息SELECT blocking_engine_lock_id FROM performance_schema.data_lock_waits WHERE requesting_engine_transaction_id = 28682479434989637;-- engine_lock_id 指定为第一条 sql 查询获得的 blocking_engine_lock_id 字段值。SELECT * FROM performance_schema.data_locks WHERE engine_lock_id = '29417475275751454_00002C7B80000003';