TiKV 内存参数性能调优

    本文档用于描述如何根据机器配置情况来调整 TiKV 的参数,使 TiKV 的性能达到最优。

    TiKV 最底层使用的是 RocksDB 做为持久化存储,所以 TiKV 的很多性能相关的参数都是与 RocksDB 相关的。TiKV 使用了两个 RocksDB 实例,默认 RocksDB 实例存储 KV 数据,Raft RocksDB 实例(简称 RaftDB)存储 Raft 数据。

    • 默认 RocksDB 实例将 KV 数据存储在内部的 defaultwritelock 3 个 CF 内。

      • write CF 存储的是数据的版本信息 (MVCC) 以及索引相关的数据,相关的参数位于 [rocksdb.writecf] 项中;
      • CF 存储的是锁信息,系统使用默认参数。
    • Raft RocksDB 实例存储 Raft log。

      • default CF 主要存储的是 Raft log,与其对应的参数位于 [raftdb.defaultcf] 项中。

    除了以上列出的 block-cache 以及 write-buffer 会占用系统内存外:

    1. TiKV 在处理大的查询的时候(例如 select * from ...)会读取数据然后在内存中生成对应的数据结构返回给 TiDB,这个过程中 TiKV 会占用一部分内存
    1. 生产环境中,不建议将 TiKV 部署在 CPU 核数小于 8 或内存低于 32GB 的机器上
    2. 如果对写入吞吐要求比较高,建议使用吞吐能力比较好的磁盘
    3. 如果对读写的延迟要求非常高,建议使用 IOPS 比较高的 SSD 盘