在 v7.5.5 版本中,检查 GC Safepoint 的步骤如下:
-
查询当前 GC Safepoint 时间戳
在上游 TiDB 执行 SQL:SELECT VARIABLE_VALUE AS gc_safe_point FROM mysql.tidb WHERE VARIABLE_NAME = 'tikv_gc_safe_point';
输出示例:
+----------------------------+ | gc_safe_point | +----------------------------+ | 2024-06-01 12:00:00.000000 | +----------------------------+
-
关联 TiCDC 同步进度
查看 TiCDC Changefeed 的checkpoint-ts
:./cdc cli changefeed list --pd=http://pd:2379
输出示例:
{ "id": "ticdc-zhongtai-bak", "checkpoint-ts": 456128358773424215, "checkpoint-time": "2024-06-01 12:30:00.000" }
- 关键逻辑:若
checkpoint-ts
大于gc_safe_point
的时间戳,说明 TiCDC 同步进度正常,GC Safepoint 应能推进,Redo Log 应被清理。 - 异常情况:如果
gc_safe_point
长时间停滞,需检查 TiCDC 服务状态或下游同步是否阻塞。
- 关键逻辑:若
为何 v7.5.5 可能因 GC Safepoint 导致 Redo Log 堆积?
以下是常见原因和修复方案:
原因 | 现象 | 解决方案 |
---|---|---|
TiCDC 服务异常或宕机 | GC Safepoint 停止更新 | 重启 TiCDC 节点,确保集群健康 |
下游同步长时间阻塞 | checkpoint-ts 不推进 |
解决下游写入问题(如死锁、高负载) |
TiCDC 与 PD 网络隔离 | TiCDC 无法注册 Service GC Safepoint | 检查网络连通性,确保 TiCDC 可访问 PD 节点 |
上游 TiDB 的 GC 生命周期过短 | GC 过早清理未同步的数据 | 调整 GC 生命周期:SET GLOBAL tidb_gc_life_time = '24h'; (默认 10m) |
4. 针对 v7.5.5 的 Redo Log 清理优化建议
若无法立即升级版本,可通过以下配置和操作缓解问题:
-
调整 GC 生命周期
延长上游 GC 时间,避免数据被过早清理:-- 在上游 TiDB 执行 SET GLOBAL tidb_gc_life_time = '24h'; -- 根据业务需求调整
-
优化 TiCDC 配置
修改 Changefeed 配置,减少 Redo Log 碎片:[consistent] level = "eventual" max-log-size = 128 # 增大单个文件大小(单位 MiB) flush-interval = 1000 # 降低刷新间隔(单位毫秒) storage = "local:///disk1/zhongtai_bak_redo"
-
监控 GC Safepoint 推进
在 Grafana 监控面板中观察以下指标:- TiCDC > Service GC Safepoint:确认 Safepoint 时间戳持续更新。
- TiKV-Details > GC > GC Safepoint:确保与 TiCDC 的 Safepoint 一致。
哥们,也不知道对不对。你看着查吧。