tikv被标记为slow store,怀疑是raft store cpu 资源不够导致的, 大家多提提意见

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

【TiDB 使用环境】生产环境
【TiDB 版本】8.1.1
【部署方式】华为云
【操作系统/CPU 架构/芯片详情】

华为云部署了一套tidb集群,最近经常有tikv store 被标记为slow store,看了一下raft io 面板,确实是有异常的,append log 和 commit log 的延迟确实是高,特别是commit log duration的延迟很高,
99% Append log duration per server

99% Commit log duration per server

1.但是去查了node_exporter的磁盘性能监控图,磁盘io不是很高


iops确实升高明显
但是磁盘读写延迟不高,tikv store的读写延迟不超过5ms
disk 读写延迟 node_exporter

2.commit log为什么和append的 延迟差了这么多,按照原理来说,应该就是磁盘和网络的问题了,但是通过blackbo 来看,网络延迟也不高啊
大家有什么排查思路嘛

还有一点,raft store cpu 超过了 80% * raftstore.store-pool-size (默认设置为2)
所以有没有可能是raftstore 线程池cpu 不够,导致拖慢了tikv的commit log

极有可能是 CPU 资源争抢导致的处理阻塞

看看峰值的时候做了什么事务操作或者作业操作

从提供的信息分析:
raftstore.store-pool-size=2 意味着只有 2 个线程处理所有 raftstore 工作,总 CPU 上限就是 200%。当超过 160%(80% × 2)时,raftstore 线程池饱和,导致:
1、append log 延迟高 — raftstore 线程忙于处理 raft 消息和写 raft log,来不及调度
2、commit log 延迟高 — log 写入磁盘后需要通知 apply 线程提交,但 raftstore 线程积压
3、slow store — 其他 store 检测到你这个 store 响应慢,标记为 slow
并发处理能力差,如果云主机配置高,没必要限制的这么低。
在slow store时间点,看下线程池是否打满,区分写入延迟还是提交延迟。是否有大事务导致raftstore线程处理单条消息时间过长。

1 个赞

感觉可能是RaftStore 线程繁忙或网络同步延迟?

在slow store时间点,看下线程池是否打满,
raft store cpu 几乎都打满了,看了下在slow store的时间点 Raft Propose 下的 Propose wait duration 发现也是很高(和commit log 的延迟重合) 几乎是可以确定了还是raft store cpu的瓶颈,


您说的区分写入延迟还是提交延迟。是否有大事务导致raftstore线程处理单条消息时间过长 ,这是什么意思呢
我们这个集群是个大集群,有近90万个region,这种情况下,对raft store估计有不小的压力

就像你提到问题 ,我也认为是cpu问题。raftstore.store-pool-size 默认2 改大些 比如4
线程不够 / Region 太多 / 热点写入

总结得非常好

内存和磁盘都很低的话,查查看看是不是内存限制大小了。还有就是append日志并行度是否低了

  • 确认慢节点:Grafana PD → Store Slow Score
  • iostat + fio 测慢节点云盘性能
  • 看是否同盘:raft 与 data 是否同盘
  • 检查版本:<6.1 → 优先升级 + 开启 Raft Engine
  • 分离 raft 盘到极速云盘(见效最快)

看下网络流量

by AI

高手,学习了

怎么去看和确定问题?

用哪个工具画的?学习用一下

问题描述里,append 虽然慢了点但应该在合理范围内,commit 慢了几个数量级,主要问题矛盾推测在 leader 和 follower 同步数据

manus.im “tikv raft 的 append log, apply log 和 commit log 的区别,画个图说明“

  • 扩容 Raft 线程池tiup cluster edit-config 中将 raftstore.store-pool-size 调整为 CPU 核心数的 1/4~1/2(如 16 核机器设为 8,32 核设为 16)。
  • 同步扩容 Apply 线程池:设置 raftstore.apply-pool-sizestore-pool-size 一致,避免提交瓶颈。
  • 开启 Raft 流水线:开启 raftstore.pipelined: true,减少 Raft 日志提交队列阻塞。
  • 增加 Raft 队列长度:调大 raftstore.max-pending-msg10240,防止消息溢出。
  • 优化批量写入:业务侧将小事务合并为批量提交(如 100-1000 条 / 批),减少 Raft 日志频繁刷盘。

raftstore.store-pool-size 调整到4以后,高峰期 也没有发生过掉leader的现象

那之前就是 Raftstore 线程是瓶颈点?