功能
INFORMATION_SCHEMA.LOGSERVICE_ELAPSED 视图用于监控和分析灾备环境下各复制组(Replication Group,RG)在 binlog 生成过程中的时耗表现。该视图详细展示了日志处理流水线中各个关键阶段的耗时情况,帮助您定位数据同步过程中的性能瓶颈,优化灾备链路 / binlog 生成的效率。适用版本
适用于 TDSQL Boundless V16.0.0 及以上版本。
V21.6.2 版本新增
DumpWaitLock、PushAppliedIndex 字段。V21.6.4.0 版本新增
WaitForMemoryQuota、WaitForDiskQuota 字段,用于统计等待内存配额与磁盘配额的耗时。字段说明
字段名 | 类型 | 描述 |
sid | bigint unsigned | LogService 的唯一标识符 |
rep_group_id | bigint unsigned | 复制组(RG)的 ID |
IsRunning | bigint unsigned | Log Handler 处于运行状态的总耗时 |
DecodeKV | bigint unsigned | 解析 Key-Value 数据的耗时 |
SendLog | bigint unsigned | 发送 Binlog 到 peer Client 的耗时 |
GetUserRgList | bigint unsigned | 获取 User RG 列表的耗时 |
SendMsg | bigint unsigned | 向 peer Client 发送消息的耗时 |
UpdateCommitTsBarrier | bigint unsigned | 更新提交时间戳屏障的耗时 |
WaitParentRg | bigint unsigned | 等待父复制组数据就绪的耗时 |
WaitVanishedRgDispatch | bigint unsigned | 等待已移除复制组调度的耗时 |
WaitSysRgOrVanishedRgCommitTsAdvance | bigint unsigned | 等待系统复制组或已移除复制组提交时间戳推进的耗时 |
WaitUsrRgCommitTsAdvance | bigint unsigned | 等待用户复制组提交时间戳推进的耗时 |
GetVanishedRgMinBarrier | bigint unsigned | 获取已移除复制组最小屏障的耗时 |
WaitRaftLog | bigint unsigned | 等待 Raft 日志同步的耗时 |
GetMergeLogJobIdStat | bigint unsigned | 获取日志合并任务状态的耗时 |
WaitAllMergeLogApplied | bigint unsigned | 等待所有合并日志回放完成的耗时 |
GetRaftLogFromBackup | bigint unsigned | 从备份中获取 Raft 日志的耗时 |
WaitRaftNodeShutDown | bigint unsigned | 等待 Raft 节点关闭的耗时 |
GetRaftLogFromBackupFinish | bigint unsigned | 从备份中获取 Raft 日志完成的耗时 |
RaftOnApply | bigint unsigned | 回放 Raft 日志的耗时 |
BackupRaftApply | bigint unsigned | 回放从备份中获取的 Raft 日志的耗时 |
GetRaftLogFromBackupInExitProcess | bigint unsigned | 节点退出过程中从备份获取 Raft 日志的耗时 |
BatchKVFlushToDisk | bigint unsigned | 当 RG 内存占用超过 per-RG 配额时,批量将 batch_row 数据写入 RocksDB 释放内存所产生的耗时 |
WaitCachedMsgConsumed | bigint unsigned | Binlog Dump 模式下,等待缓存消息被消费的耗时 |
WaitAllRepGroupRun | bigint unsigned | Binlog Dump 模式下,等待所有复制组开始回放的耗时 |
DumpWaitLock | bigint unsigned | Binlog Dump 模式下,等待消息推送锁的耗时 |
WaitGlobalTsBarrierAdvanced | bigint unsigned | Binlog Dump 模式下,等待全局时间戳屏障推进的耗时 |
WaitForMemoryQuota | bigint unsigned | 等待内存配额的耗时 |
WaitForDiskQuota | bigint unsigned | 等待磁盘配额的耗时 |
PushAppliedIndex | bigint unsigned | 推送已应用日志索引的耗时 |
说明:
所有耗时字段的单位为秒(s)。
通过分析各阶段耗时比例,可识别性能瓶颈所在环节。
示例
tdsql > SELECT * FROM INFORMATION_SCHEMA.LOGSERVICE_ELAPSED LIMIT 1\\G*************************** 1. row ***************************sid: 29629282460369180rep_group_id: 257IsRunning: 6DecodeKV: 13SendLog: 0GetUserRgList: 0SendMsg: 3UpdateCommitTsBarrier: 0WaitParentRg: 0WaitVanishedRgDispatch: 0WaitSysRgOrVanishedRgCommitTsAdvance: 10WaitUsrRgCommitTsAdvance: 0GetVanishedRgMinBarrier: 0WaitRaftLog: 1017GetMergeLogJobIdStat: 0WaitAllMergeLogApplied: 0GetRaftLogFromBackup: 0WaitRaftNodeShutDown: 0GetRaftLogFromBackupFinish: 0RaftOnApply: 0BackupRaftApply: 0GetRaftLogFromBackupInExitProcess: 0BatchKVFlushToDisk: 5WaitCachedMsgConsumed: 0WaitAllRepGroupRun: 0DumpWaitLock: 0WaitGlobalTsBarrierAdvanced: 0WaitForMemoryQuota: 0WaitForDiskQuota: 0PushAppliedIndex: 01 row in set (0.00 sec)
结果解读:
该复制组(ID: 257)的主要耗时集中在 WaitRaftLog(1017s),表明 Raft 日志同步是当前的主要瓶颈
DecodeKV 和 BatchKVFlushToDisk 也有一定耗时,反映了解码和磁盘操作的开销
其他多数阶段耗时接近零,说明这些环节当前没有产生时耗
BatchKVFlushToDisk 字段说明
BatchKVFlushToDisk 记录 LogService 在 MySQL 模式下,RG 内存占用超过 per-RG 配额时,批量将 batch_row 数据写入 RocksDB 释放内存所消耗的时间。触发落盘的参数如下:
参数名 | 类型 | 默认值 | 取值范围 | 说明 |
binlog_mysqlclient_cache_max_size | ulonglong | 1 GB | [1 GB, 64 GB] | binlog mysqlclient 全局内存软限制。当总内存占用超过此值时,非全局最小 commit_ts 的 RG 将触发 batch_row 落盘以释放内存 |
log_service_per_rg_mem_limit | ulonglong | 100 MB | [1 MB, UINT64_MAX] | 每个复制组(RG)的内存配额。单个 RG 内存超限时触发该 RG 的 batch_row 落盘 |
落盘的累积统计(写入批次/字节数、回读行数/字节数、当前驻盘数据量等)可通过
INFORMATION_SCHEMA.LOGSERVICE_MEMORY_STAT 视图查询。