TIkv 磁盘IO 和 压缩数据问题

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

  • 【TiDB 版本】:Tikv v3.0.5
  • 【问题描述】:1、 在测试 Tikv 的时候,和其他KV 类存储对比了下,发现 Tikv 在写入数据的时候, 磁盘 iops 明显高于其他 kv 存储。所以好奇为什么会高这么多?如下图,第一个峰是 tikv, 第二个峰是小米的Pegasus 。 2、同样的数据,数据本身占用 7.4G,但是存储后,发现 Tikv 的部署目录大小为4.2G,小米的Pegasus 9.1G。想问下,除了 RocksDB 基本的 l4 压缩,Tikv 还额外做了什么,数据占用这么小。

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

  1. 影响 io 的有很多因素。因为除了数据以外还有一些其他的需要磁盘读写的,比如 raft log 、 split check 等等。
  2. RocksDB 每一层数据的压缩方式,可选的值为:no,snappy,zlib,bzip2,lz4,lz4hc,zstd 。 3.0 版本默认情况下下 level0 和 level1 不压缩,level2 到 level4 采用 lz4 压缩算法,level5 和 level6 采用 zstd 压缩算法。具体可以看下 Tikv 的参数说明 https://pingcap.com/docs-cn/stable/reference/performance/tune-tikv/#参数说明

我做了一系列的对比实验,发现是 raft log 的问题。如果把 sync_log 改为 false,iops 下降到200。 可以推测出来,我这个测试,raft log 的 io 占据了绝大多数。

好的。欢迎整理成测试对比的文章进行分享。