ticdc执行极其缓慢,几个小时了才同步几分钟的数据

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
上游tidb版本6.1.1,ticdc也同样6.1.1
下游tidb版本 v7.1.2

【复现路径】做过哪些操作出现的问题
两个tidb集群都是用物理机ssd盘,下游tidb没有任何请求,上游会有业务请求,两个集群ping延迟在50ms
目前想把上游的数据全量迁移到下游tidb,已经使用了dumpling+tidb-light的方式全量同步了,全量完成后大概有一天的增量数据使用ticdc同步。
同步的数据是3个库,使用2个ticdc任务来同步,其中一个大库单独使用一个ticdc进程
【遇到的问题:问题现象及影响】
目前的问题是大库的那个ticdc进程同步非常缓慢,完全跟不上上游业务的数据增量,Changefeed checkpoint lag越来越大。

  • Changefeed checkpoint lag:这个指标代表上游 TiDB 集群和下游系统之间的数据复制延迟,延迟以时间为单位。该指标反映了 Changefeed 整体的数据同步状况是否健康,通常情况下,lag 越小,说明同步任务状态越好。而当 lag 上升时,通常说明 Changefeed 的同步能力或者下游系统的消费能力无法匹配上游的写入速度。
  • Changefeed resolved ts lag:这个指标代表了上游 TiDB 集群与 TiCDC 节点之间的数据延迟,延迟以时间为单位。该指标能够反映 Changefeed 拉取上游数据变更的能力,当 lag 上升时,说明 Changefeed 无法及时地拉取上游产生的数据变更。

还有一个点是大库的ticdc进程,其中一个ticdc节点是跟得上的,checkpoint lag保持在2秒,另一个节点则几小时了才同步几分钟

目前看日志没有什么异常,下游的集群负载也很低
ticdc配置如下,其他的都是用默认
force-replicate = true
[mounter]
worker-num = 16

我想知道这是什么原因,有什么可以优化的地方吗
是不是两个集群延迟50ms有关
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

目前看ticdc的进程并不是完全停住,而且极其缓慢,同步了20多个小时了,数据才跑了3小时。延迟越来越长



  • Sink flush rows/s:TiCDC 节点中 Sink 模块每秒往下游输出的数据变更个数。该指标反映的是同步任务向下游进行同步的速率,当 Sink flush rows/s 小于 Puller output events/s 时,同步延迟可能会上升。

下游的写入效率怎么样

qps很低,只有几百,也没什么慢sql
机器各个资源看起来也很空闲,日志也没报错。。。

在上游服务器上手动传送一个大点文件到下游服务器,看一下传输速度正常不,然后再确定是否tidb配置的问题

log.tar.gz 72% 1566MB 9.9MB/s 00:59 ETA

速度在9MB/s左右,跟这个有关吗

tidb的配置采用的都是默认的


奇怪,这里突然有个下降,然后有开始上升了

文件传输速度9M/s,两个集群的机器是不在一起吗?速度这么慢?

是不是有什么大事务在执行

两个集群的网速慢,也可以看一下两个集群的服务器IO情况

不在一起的,离得很远。50ms的ping物理延迟距离。
现在发现是上游超过tps 1000+就同步的特别慢

有什么方式或者配置可以提速吗,不然跟不上

io都比较低,目前发现是ticdc的同步完全跟不上上游的写入,上游1000+tps

你这不同的版本有点麻烦,如果是同版本,我的建议是把cdc部署在下游,不同版本的话,部署在下游可能有问题。

我们不久前遇到类似的问题,当时的QPS只有5k左右,优化后可以达到50k。

通过优化TiCDC进程per-table-memory-quota调参,以及对于TiCDC同步到下游TiDB集群的情况调整Sink worker-count并发实现提速。

你可以参考我这例子,直接进行优化

2 个赞

per-table-memory-quota是哪个文档有,下游是tidb,我找不到有这个参数

我的版本太低了吗。ticdc v5.1.2

低版本没有文档有,是看源代码里发现的。高版本文档才放出来

1 个赞