drainer 同步到 tidb 延迟问题记录
作者: 春风十里不如你原文来源:https://tidb.net/blog/ef12fc0d
问题现象
1、drainer worker3 queue size 高。
2、数据同步到下游 tidb 延迟。
3、drainer 日志正常推进,但是 savepoint 有延迟
问题排查
1、检查大事务,未发现有写入量大的事务。
2、检查下游集群状态
下游 tidb 集群状态正常,集群没有负载,通过select * from information_schema.cluster_processlist where info is not null;
执行多次,只抓到一次正在执行的 sql,检查从集群的慢 SQL,也没有任何记录,说明从集群是没有任何问题的,那么问题就是卡在 drainer。
3、抓取 drainer debug 分析
sample 只有 90ms,是 profile 30s 的 0.3%,所以 cpu 是很空闲的。
4、检查是否有大量的小事务
发现在问题时间有大量的小事务在执行,通过 select * from information_schema.cluster_processlist where info is not null; 多次抓取发现都是同一张表的 update
问题结论
worker_N 的 N 是由 crc32(all unique keys) % worker_count 计算,并且如果 SQL 有因果关系会分发到一个 worker 上执行。而更新同一张表是有因果关系的,只能分发给同一个 worker 进行,所以需要尽量避免大量的单表更新。
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/572d7b6f0a07b44af26a879a8】。文章转载请联系作者。
评论