https://docs.pingcap.com/zh/tidb/stable/tune-tikv-memory-performance
本文档用于描述如何根据机器配置情况来调整 TiKV 的参数,使 TiKV 的性能达到最优。你可以在 etc/config-template.toml 找到配置文件模版,参考使用 TiUP 修改配置参数进行操作,部分配置项可以通过在线修改 TiKV 配置方式在线更新。具体配置项的含义可参考 TiKV 配置文件描述。
TiKV 最底层使用的是 RocksDB 做为持久化存储,所以 TiKV 的很多性能相关的参数都是与 RocksDB 相关的。TiKV 使用了两个 RocksDB 实例,默认 RocksDB 实例存储 KV 数据,Raft RocksDB 实例(简称 RaftDB)存储 Raft 数据。
TiKV 使用了 RocksDB 的 Column Families
(CF) 特性。
默认 RocksDB 实例将 KV 数据存储在内部的 default
、write
和 lock
3 个 CF 内。
default
CF 存储的是真正的数据,与其对应的参数位于 [rocksdb.defaultcf]
项中;write
CF 存储的是数据的版本信息 (MVCC) 以及索引相关的数据,相关的参数位于 [rocksdb.writecf]
项中;lock
CF 存储的是锁信息,系统使用默认参数。Raft RocksDB 实例存储 Raft log。
default
CF 主要存储的是 Raft log,与其对应的参数位于 [raftdb.defaultcf]
项中。所有的 CF 默认共同使用一个 block cache 实例。通过在 [storage.block-cache]
下设置 capacity
参数,你可以配置该 block cache 的大小。block cache 越大,能够缓存的热点数据越多,读取数据越容易,同时占用的系统内存也越多。
每个 CF 有各自的 write-buffer
,大小通过 write-buffer-size
控制。
除了以上列出的 block-cache
以及 write-buffer
会占用系统内存外:
select * from ...
)会读取数据然后在内存中生成对应的数据结构返回给 TiDB,这个过程中 TiKV 会占用一部分内存