TDSTORE_PART_CTX

最近更新时间:2025-11-18 10:10:23

我的收藏

功能

TDSTORE_PART_CTX用于展示集群中所有 hybrid 节点的 TDStore 上所有悲观锁等待信息。

字段说明

字段名
类型
是否可以为 NULL
描述
trans_id
bigint unsigned
事务的唯一标识符。
state
varchar(16)
参与者的状态。
RUNNING:参与者正处于读写阶段(即还未进入提交流程),且未被悲观锁阻塞。
WAIT LOCK:参与者正处于读写阶段,且正在被悲观锁阻塞(此时 requested_lock_id blocking_lock_id 一定不为 NULL)。
COMMITTING:参与者正在尝试提交(并不意味着事务最终一定会提交成功)。
ROLLING BACK:参与者正在回滚。
commit_state
varchar(10)
参与者的提交状态。
INIT:参与者还未进入提交流程,或者已进入提交流程但正在同步 redo/prepare log。
FAILED:参与者 prepare 失败。
PREPARE:参与者 2PC prepare 成功。
COMMIT:参与者 2PC commit 成功。
ABORT:参与者 2PC prepare 成功,但在第二阶段 abort 了。
CLEAR:参与者 commit 或 abort 后,即将释放参与者上下文(这个状态十分短暂)。
状态的推进关系如下图所示:



snapshot_ts
bigint unsigned
参与者的快照读时间戳。
prepare_ts
bigint unsigned
事务的 prepare 时间戳。事务的所有已经 prepare 了的参与者,prepare 时间戳相同。当参与者还未 prepare 的时候,值为 NULL
commit_ts
bigint unsigned
事务的 commit 时间戳。事务的所有已经 commit 了的参与者,commit 时间戳相同。当参与者还未 commit 的时候,值为 NULL
is_replay
int
如果值为 1,代表参与者正在通过 replay raft log 来推进 2PC,这一般发生在 Follower 上,但也有可能发生在 Leader 上任之前。
data_space_type
varchar(32)
参与者对应的 data space。DATA_SPACE_TYPE_USER代表参与者访问了用户表,DATA_SPACE_TYPE_SYSTEM代表参与者访问了系统表。
replication_group_id
bigint unsigned
参与者对应的 replication group ID。
coordinator_replication_group_id
bigint unsigned
协调者对应的 replication group ID。当参与者还未 prepare 的时候,值为 NULL
expired_time
datetime
参与者超时释放时间。
requested_lock_id
varchar(128)
唯一标识正在申请的悲观锁,或者正在读取的 key 范围。格式参考 data_locks 表的 ENGINE_LOCK_ID 字段。如果没有正在等待悲观锁,值为 NULL
blocking_lock_id
varchar(128)
唯一标识正在等待的悲观锁。格式参考 data_locks 表的 ENGINE_LOCK_ID 字段。如果没有正在等待悲观锁,值为 NULL
lock_wait_milliseconds
bigint unsigned
累计等待悲观锁花费的耗时(单位:毫秒)。
single_keys_locked
bigint unsigned
持有的单条 key 悲观锁的数量。
ranges_locked
bigint unsigned
持有的 key 区间悲观锁的数量。
write_batch_size
bigint unsigned
write batch 大小(单位:字节)。NULL 值代表着收集参与者信息的 bthread 没能获取到参与者的锁,因此没能获取到相关信息,此时大概率参与者正在等待某个悲观锁的释放。
lock_memory_usage
bigint unsigned
悲观锁消耗的内存大小(单位:字节)。NULL 值代表着收集参与者信息的 bthread 没能获取到参与者的锁,因此没能获取到相关信息,此时大概率参与者正在等待某个悲观锁的释放。
isolation_level
varchar(16)
隔离级别。TDStore 仅支持两种隔离级别,REPEATABLE_READREAD_COMMITTED
submit_pending_log_num
bigint unsigned
正在同步的 raft 日志数量。NULL 值代表着收集参与者信息的 bthread 没能获取到参与者的锁,因此没能获取到相关信息,此时大概率参与者正在等待某个悲观锁的释放。
note
varchar(256)
备注信息。
空字符串:无备注信息。
fail to acquire participant lock:获取参与者锁失败。这种情况下,部分字段(如 write_batch_size )的值为 NULL
node_name
varchar(256)
开启该事务参与者的 SQLEngine 节点名称。
thread_id
bigint unsigned
运行该事务参与者的线程 ID。这是 Performance Schema 的内部线程 ID,在 Performance Schema 的生命周期内唯一,可用于可靠地关联 Performance Schema 的各类事件表。
sql_session_id
bigint unsigned
对应开启该事务参与者的会话连接(session)ID。

示例

输出示例:
tdsql [(none)]> SELECT * FROM information_schema.tdstore_part_ctx LIMIT 3\\G
*************************** 1. row ***************************
trans_id: 28707112062290305
state: RUNNING
commit_state: INIT
snapshot_ts: 28707112062290305
prepare_ts: NULL
commit_ts: NULL
is_replay: 0
data_space_type: DATA_SPACE_TYPE_USER
replication_group_id: 257
coordinator_replication_group_id: NULL
expired_time: 2024-03-22 11:23:37
requested_lock_id: NULL
blocking_lock_id: NULL
lock_wait_milliseconds: 0
single_keys_locked: 4
ranges_locked: 0
write_batch_size: 3219
lock_memory_usage: 1008
isolation_level: REPEATABLE_READ
submit_pending_log_num: 0
note:
node_name: node-1-001
thread_id: 65
sql_session_id: 1048736
*************************** 2. row ***************************
trans_id: 28707112062290205
state: COMMITTING
commit_state: PREPARE
snapshot_ts: 28707112062290205
prepare_ts: 28707112062290205
commit_ts: 28707112062290368
is_replay: 0
data_space_type: DATA_SPACE_TYPE_USER
replication_group_id: 257
coordinator_replication_group_id: 257
expired_time: 2024-03-22 11:23:37
requested_lock_id: NULL
blocking_lock_id: NULL
lock_wait_milliseconds: 0
single_keys_locked: 7
ranges_locked: 0
write_batch_size: NULL
lock_memory_usage: NULL
isolation_level: REPEATABLE_READ
submit_pending_log_num: NULL
note: fail to acquire participant lock
node_name: node-1-001
thread_id: 65
sql_session_id: 1048736
*************************** 3. row ***************************
trans_id: 28707111676413643
state: LOCK WAIT
commit_state: INIT
snapshot_ts: 28707111676413643
prepare_ts: NULL
commit_ts: NULL
is_replay: 0
data_space_type: DATA_SPACE_TYPE_USER
replication_group_id: 257
coordinator_replication_group_id: NULL
expired_time: 2024-03-22 11:23:14
requested_lock_id: 28707111676413643_0000279C80018657
blocking_lock_id: 28707111676413316_0000279C80018657
lock_wait_milliseconds: 0
single_keys_locked: 4
ranges_locked: 0
write_batch_size: NULL
lock_memory_usage: NULL
isolation_level: REPEATABLE_READ
submit_pending_log_num: NULL
note: fail to acquire participant lock
node_name: node-1-002
thread_id: 65
sql_session_id: 1048704
查询示例:
-- 查询当前节点上参与者的数量
SELECT COUNT(*) FROM information_schema.tdstore_part_ctx \\G

-- 查询当前节点上,replication group 257 的参与者信息
SELECT * FROM information_schema.tdstore_part_ctx WHERE replication_group_id = 257 \\G

-- 查询当前节点上正在提交流程中的参与者信息
SELECT * FROM information_schema.tdstore_part_ctx WHERE state = 'COMMITTING' \\G

-- 查询当前节点上执行时间超过 5s 的事务的信息(目前 trans_id 右移 24 位得到的结果,是事务开始时间的 unix timestamp)
SELECT * FROM information_schema.tdstore_part_ctx WHERE trans_id >> 24 < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 5 SECOND)) \\G

-- 查询当前节点上 write batch 大小超过 128 MB 的大事务的信息(事务写过的数据,存储于 write batch 中)
SELECT * FROM information_schema.tdstore_part_ctx WHERE write_batch_size > 128 * 1024 * 1024 \\G