我的TiKV 节点的 CPU 和 IO 都不高,但整体 TPS 上不去,大佬们可能瓶颈在哪里呀。
1 个赞
一、首先看:是不是有“慢SQL”在拖后腿?
这是最常见的原因。一个没走索引的全表扫描,就能把集群的 readpool 线程池打满,拖累所有查询。
快速验证 :
- 打开 TiDB Dashboard → SQL 分析 → 慢查询
- 看耗时排名靠前的 SQL,点进去确认是否全表扫描 或大量扫 key
典型案例:一张150万行的表,查询条件是 where dataid = ? ,但 dataid 字段没加索引,应用还在循环调用,最终把整个集群拖垮。
解法 :explain 看执行计划 → 缺索引就加索引 → 优化后对比监控指标
二、如果 SQL 正常,看:是不是有热点问题 ?
即使 CPU、IO 都不高,热点也能让性能卡在单点——你看到的可能是整体平均值,但某个 TiKV 节点或某个 Region 已经跑满了。
快速验证 :
- Dashboard 看 Key Visual ,检查 Region 访问是否集中在少数节点
- 看各 TiKV 节点的 QPS/CPU 是否严重不均
典型场景:自增主键 导致所有写入集中在一个 Region,单节点 CPU 打满但其他节点空闲。
解法 :
- 自增主键改
AUTO_RANDOM,让数据随机打散 - 开启 Load Base Split ,让小表热点自动分裂
三、再往下看: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 个赞