读性能慢-热点问题

读热点解决方法

根据监控面板 TiKV-Details -> RocksDB KV -> Block Cache hit 命中率来判断

  • 若 BlockCache 的命中率下降或者抖动,可能是存在全表扫描的 SQL、执行计划选择不正确的 SQL、存在大量 count(*) 操作的 SQL 等等,解决方法:
  1. 优化具体的 SQL
    若 BlockCache 命中率比较稳定,则可能是 Region 并发读取过高导致,在业务查询频繁的命中个别 Region 最终时会导致单个 TiKV 节点性能达到极限,几种解决方法供参考:
  2. 在 4.0 版本中 针对小表的读热点提供了新的解决办法 Load Base Split ,通过调整 TiKV 参数 set config tikv split.qps-threshold=2000 到一个更小的值来 解决读热点问题。具体操作方法参见链接 。
    • Load Base Split
    • 传统的方法: 将小表改造成 hash 分区表,打散 Region 分布,或者将小表热点 region leader 进行手工 split 和 transfer
  3. 若同时也存在写热点,可以使用 shard_row_id_bits 处理热点表,可以有效缓解读写热点问题
  4. 开启 Coprocessor Cache 功能,开启该功能后,将在 TiDB 实例侧缓存下推给 TiKV 计算的结果,对于小表读热点能起到比较好的效果
  5. 使用 Follower Read 功能,在一定程度上可以缓解读热点问题 此特性目前还是实验特性