rocksdb CPU负载始终较高

https://docs.pingcap.com/zh/tidb/stable/tune-tikv-thread-performance#线程池介绍

  • RocksDB 线程池是 RocksDB 进行 Compact 和 Flush 任务的线程池,通常不需要配置。
    • 如果机器 CPU 核数较少,可将 rocksdb.max-background-jobsraftdb.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参数。不然多几个线程可能作用也很有限。