TiDB 高并发下大量慢SQL,出现 region is unavailable 读写间歇性失败

一个好的问题描述有利于社区小伙伴更快帮你定位到问题,高效解决你的问题

【TiDB 环境】生产
【TiDB 版本】v8.0.0
【问题描述】业务高峰时段,部分读写请求间歇性失败,应用抛出异常,查看TiDB日志可见报错 region is unavailable ,监控观察部分Region短时间不可用,无明显节点宕机。
日志片段:
[2026/08/20 14:32:15.456 +08:00] ERROR kv: region is unavailable, region_id=6892345

region is unavailable 多半是 leader 在切或短暂不可达,不是整节点挂了。高峰先看 PD 调度、TiKV 心跳和该 region 所在 store 的 CPU/IO。排查 region_id 的 leader、是否在 split/merge、网络丢包。临时可降并发、避开热点键;根因常是热点或调度过猛。

1 个赞

大量全扫描慢 SQL 耗尽 TiKV 的 cop 与 raftstore 处理能力,请求排队超时引发间歇性Region is unavailable;应急 kill 慢 SQL 止损,根本上优化 SQL、设置语句超时、大查询卸载到 TiFlash,避免分析负载冲击在线 TiKV 节点。

有更详细点的日志吗

业务高峰期的话主要怀疑以下方面:

  1. tikv 出现了热点,单个/某几个 tikv 实例压力格外大
  2. pd 压力较大,心跳处理不及时
  3. 硬件瓶颈

看这个报错,大概率是热点Region导致的。先确认下是不是单Region热点:

  1. 查下热点分布:
SELECT TABLE_ID, INDEX_ID, REGION_ID, HOT_DEGREE 
FROM INFORMATION_SCHEMA.TIDB_HOT_REGIONS 
WHERE REGION_ID=6892345;
  1. 如果确认是热点,试试这几个方案:
  • 拆Region:SPLIT TABLE t BETWEEN (0) AND (1000000) REGIONS 16; 按业务键值拆
  • 看下是不是索引热点,调整下索引顺序或加随机后缀
  • 检查下TiKV的raftstore线程是否打满:top看cpu,或者看Grafana里TiKV的thread cpu
  1. 另外确认下TiKV配置:
[raftstore]
raft-base-tick-interval = "1s"
raft-heartbeat-ticks = 2

如果副本数多,可以适当调大raftstore.apply-pool-sizeraftstore.store-pool-size

先查热点,大概率是key分布不均,拆完Region应该能缓解。