我的TiKV 节点的 CPU 和 IO 都不高,但整体 TPS 上不去,大佬们可能瓶颈在哪里呀。

我的TiKV 节点的 CPU 和 IO 都不高,但整体 TPS 上不去,大佬们可能瓶颈在哪里呀。

1 个赞

一、首先看:是不是有“慢SQL”在拖后腿?

这是最常见的原因。一个没走索引的全表扫描,就能把集群的 readpool 线程池打满,拖累所有查询。

快速验证

  • 打开 TiDB Dashboard → SQL 分析慢查询
  • 看耗时排名靠前的 SQL,点进去确认是否全表扫描大量扫 key

典型案例:一张150万行的表,查询条件是 where dataid = ? ,但 dataid 字段没加索引,应用还在循环调用,最终把整个集群拖垮。

解法explain 看执行计划 → 缺索引就加索引 → 优化后对比监控指标

:dart: 二、如果 SQL 正常,看:是不是有热点问题

即使 CPU、IO 都不高,热点也能让性能卡在单点——你看到的可能是整体平均值,但某个 TiKV 节点或某个 Region 已经跑满了。

快速验证

  • Dashboard 看 Key Visual ,检查 Region 访问是否集中在少数节点
  • 看各 TiKV 节点的 QPS/CPU 是否严重不均

典型场景:自增主键 导致所有写入集中在一个 Region,单节点 CPU 打满但其他节点空闲。

解法

  • 自增主键改 AUTO_RANDOM ,让数据随机打散
  • 开启 Load Base Split ,让小表热点自动分裂

:dart: 三、再往下看:TiKV 内部是不是在“内耗”?

RocksDB 的 Compaction 或 Write Stall 会在后台悄悄消耗资源,监控上不一定能看到明显异常。

快速验证

  • TiKV-Details → RocksDB → Write Stall ,看是否为 0
  • Compaction pending bytes 是否在持续增长

解法

  • 适当增加 max-background-jobs (32核建议 8-12)
  • 检查 block-cache-size 是否足够(建议内存的 40%-60%)
1 个赞