sync_diff_inspector分库分表校验时上游库并发太高

【概述】
使用sync-diff-inspector校验分库分表场景下的数据:

上游数据库
库名:sandbox
表名:box_{0-127} # 共128张分表

下游TiDB
库名:sandbox
表名:box

【问题】

  1. 检查数据的线程数量(check-thread-count)设置为1,上游数据库压力大,监控发现多了128个并发:

在分库分表的情况下,如何控制上游数据库的线程数?

  1. 全量对比的时候,最后一个chunk的range没有upper界限,这样会可能导致最后拉取的数据很大,造成性能突刺:

【版本】
sync_diff_inspector: v5.0.3

1 个赞

辛苦上传一下 sync-diff-inspector 的校验日志。

日志太大,我截取了前面和后面,中间都是相似的
diff.log (38.4 KB)

附上配置:

  1. 目前 sync-diff-inspector 非合库合表的场景是会根据 上游的数量以及 check-thread-count 进行连接数的初始化,在 合库合表的场景 会根据实际合表的情况进行调整上游的连接的调整。因为下游的一个 chunk 会依赖上游多个分表的数据。所以需要同时读取回来才能进行匹配。具体见代码:
    https://github.com/pingcap/tidb-tools/blob/master/sync_diff_inspector/diff.go#L418-L446
    (PS: 如果需要根据 check-thread-count 来精确控制连接数,可以在 github 上面提具体的 feature request)

  2. chunk 的切分范围目前如果在关闭 ignore-states 的参数的情况下是会通过 TiDB 这边的统计信息来切分 chunk 的。建议如果觉得 chunk 范围切分不准的话,可以先通过 analyze table 对下游需要校验的表进行统计信息更新再尝试。

合库合表的场景我们是需要根据check-thread-count或者其他的参数来精确控制连接数的,要不然分表太多,容易把上游数据库打爆,能否帮忙提下这个需求?

这块的需求欢迎到 github 上面提 feature request 哈:
https://github.com/pingcap/tidb-tools/issues

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。