https://docs.pingcap.com/zh/tidb/stable/tune-tikv-thread-performance#线程池介绍
- RocksDB 线程池是 RocksDB 进行 Compact 和 Flush 任务的线程池,通常不需要配置。
- 如果机器 CPU 核数较少,可将
rocksdb.max-background-jobs
与raftdb.max-background-jobs
同时设置为 4。- 如果遇到了 Write Stall,可查看 Grafana 监控上 RocksDB-kv 中的 Write Stall Reason 有哪些指标不为 0。
- 如果是由 pending compaction bytes 相关原因引起的,可将
rocksdb.max-sub-compactions
设置为 2 或者 3(该配置表示单次 compaction job 允许使用的子线程数量,TiKV 4.0 版本默认值为 3,3.0 版本默认值为 1)。- 如果原因是 memtable count 相关,建议调大所有列的
max-write-buffer-number
(默认为 5)。- 如果原因是 level0 file limit 相关,建议调大如下参数为 64 或者更高:
rocksdb.defaultcf.level0-slowdown-writes-trigger
rocksdb.writecf.level0-slowdown-writes-trigger
rocksdb.lockcf.level0-slowdown-writes-trigger
rocksdb.defaultcf.level0-stop-writes-trigger
rocksdb.writecf.level0-stop-writes-trigger
rocksdb.lockcf.level0-stop-writes-trigger
cpu是几核的?
超过10核以上可能有调整max-background-jobs
的意义。因为超过10核根据公式,这个值最大也就到9.小于10核,恐怕没什么调整的必要。
另外还有就是到底是否遇到了 Write Stall。这个原因会比较多。
rocksdb 线程池只做flush(把memtable持久化)和compact(压缩,可能涉及很多sst文件的调整),隐含的意思更像是你的磁盘慢了。这个rocksdb cpu高还要关注一下磁盘的io是否够用。在考虑调整max-background-jobs
参数。不然多几个线程可能作用也很有限。