Pump报错“slow write binlog RPC response”

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v3.0.8
  • 【问题描述】:

Pump 报错:
[WARN] [server.go:213] [“slow write binlog RPC response”] [“payload size =47”] [take second=44.19037601 ] [ label=succ]
[WARN] [storage.go: 820] [ take a long time tto write binlog ] [ binlog type = Prewrite ]

TiDB Server报错:
[pumps client] write binlog to pump failed
[critical error, stop the server listener]

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

看一下 pump 落盘 binlog 是不是写延迟问题,检查一下 pump 服务的写入的 I/O 的情况

两个Pump同时报这个日志,pump在不同主机应该不会同时出现磁盘问题

多个Pump实例有没有什么共享资源?
如果下面回写tikv很慢,会不会导致pump报 take a long time to write binlog
https://github.com/pingcap/tidb-binlog/blob/c7dfc87c9135504c6b7e9c53e7803a0d77f58d6f/pump/storage/storage.go#L859

会, tidb 采用两阶段提交的方式,两阶段提交是分布式事务比较常用的算法,分为 prepare 和 commit 阶段,在 Prepare 阶段,TiDB 同时向 TiKV 和 Pump 发起 prewrite 请求,只有 TiKV 和 Pump 全部返回成功了,TiDB 才认为 Prepare 成功。

详情可以了解下源码阅读
https://pingcap.com/blog-cn/tidb-binlog-source-code-reading-5/

仔细看了下,writeToKV是写 pump 本身的 goleveldb 吧?
哪行代码是由于tikv集群响应慢,导致pumptake a long time to write binlog

https://github.com/pingcap/tidb-binlog/blob/27030ddae9ec0e42f371694435245e9533e64dec/pump/storage/storage.go#L827

再看看日志的上下问题有打印 binlog 的信息?