tikv 写入问题

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】
V4.0.8
【问题描述】
目前tidb写入数据很慢,sysbench的写入 800个连接,每秒才4200条/s,副本数是3,tikv数量是3,tidb、pd都是1台,查看3台tikv的ioutil 都已经是100%,当然磁盘是瓶颈,
现在想问一下,如果我把副本数降低到2,增加一台tikv,是不是写入会翻倍?


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

  1. 假设你测试的是 read_write,再增加一台 TiKV, 副本可以更加分散,可以环境磁盘压力。
  2. 副本数改为2,其实和 3 区别不大,raft 协议就是多副本。当3副本时,有两个写入成功就会反回了。
  3. 所以应该不会翻倍,但是磁盘压力会缓解,会提示。
  4. 不过,如果是按照官方文档配置,有 sysbench 的参考文档,感觉不应该这么少。
    https://docs.pingcap.com/zh/tidb/stable/benchmark-sysbench-v5-vs-v4
    https://docs.pingcap.com/zh/tidb/stable/hardware-and-software-requirements

纯write,写入就4200每秒,而且还要800-1000的连接数才有,不然好少,查看grafana,看到ioutil已经100%了。
我的理解是,当前3副本,其实是一条记录三个tikv再写,如果改成2个副本,tikv4台,也就是写入一条数据写入到两个tikv,那么io其实是double的,不知道我理解的对不对啊。

仅从写入数据量上这样理解是可以的。但是 TiDB 中还有 region 的调度、迁移、合并、分裂等操作,以及 compaction 和 GC 等都会涉及到 IO 的,所以实际效率需要以测试为准。

这有一个关乎写入流程的介绍文档,可以参考一下

理解,从各个指标看都比较平稳,就是ioutil被打满了,但是不理解的是为什么单个连接写入耗时会比mysql高那么多,难道是网络的原因造成的?单条数据,mysql写入几毫秒,tidb写入要10-20ms

单条sql肯定是mysql快,tidb 需要两阶段提交。