tidb数据库间歇出现写入性能问题

【 TiDB 使用环境】生产环境
【 TiDB 版本】8.1
【复现路径】做过哪些操作出现的问题
每天间故障都会间歇性出现,到现在一直还没有解决。

【遇到的问题:问题现象及影响】
tidb数据库总共配置了9个节点,3个PD、3个TidbServer、3个TiKV(25、26、27). 最近总是服务间歇性出现写入性能问题,问题发生时更新数据的简单SQL会执行时间在10秒以上。目前故障没有明显的规律可循,发生时间和执行时间过长的SQL都是不固定的,检查故障发生时主机运行参数,也没发现主机CPU、内存、磁盘IO、网络等参数没有明显的大幅变化。我通过dashboard的“慢查询”功能,定位到更新慢的SQL,打开SQL查看执行时间,发现耗时主要是在“Prewrite 阶段耗时”这个参数上。在dashboard上的25节点日志上可以看到同一时间点有报错“[store 4] async write too slow, write_kv: 0s, write_raft: 14.781872366s, send: 0.000012071s, callback: 0.000010795s thread: store-writer-0"] [takes=14781] [thread_id=136]”,根据意思我理解是raft日志写入时间过长花费了14.7秒时间。 根据这个线索,查看了grafana系统上的tidb参数,排除了几种可能原因:

  1. 排除region压缩造成的短时间性能问题。(write Stall kv 下的参数正常,没有明显的变化)
  2. 排除region分步不均造成的写压力问题。(db-bigdata-accdb-Overview面板的region参数正常)

目前怀疑是25节点的raft日志写入时的问题。因为抽查了多个慢SQL,通过事务号查询发现都是发生在TikV的25节点上,对于12:50的故障案例, 也是发生在25节点。并且,25节点在12:50 的Append Log 、Commit Log 时间长超过10秒。另外查询日志还发现一个比异常的问题,统计了1周的数据发现,25节点总是出现transfer leader事件,并且从图表看有时25上的leader直接变为0,而26、27节点没这个问题。

现在问题还是在频繁发生没有解决,我使用tidb数据库的时间只有半年没有太多经验,请论坛里的大拿、专家帮忙分析一下可能的原因,给出一些解决建议。不胜感激,谢谢!

【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面



【附件:截图/日志/监控】







image

CPU、内存

磁盘
25的磁盘


26的磁盘

27的磁盘

日志
logs-tikv_10.66.28.25_20160.zip (3.3 KB)

锁的统计信息



看下25节点的diskperformance监控

2 个赞

内存看了吗

日志呢

已经在帖子上补充了,25节点的磁盘监控截图

日志已经补充到了帖子上

25的磁盘延迟看着偶尔会很大啊 ,你用的sda 这是测试环境吗

是生产环境,25、26、27三个主机都是虚拟机,物理磁盘是SSD

数据库有锁吗? 排查下是不是锁导致的,

你好,贴子里我补充了锁的监控数据

看监控是某个store 的瓶颈,有特点,检查tidb的监控kv request by store的耗时情况

看起来还是像硬盘IO问题

1 个赞

image
store4就是25节点,请求处理时间确实比另外两个节点多

虚拟机的问题最难差了,你这个 25 磁盘看起来肯定是有问题的,磁盘响应都达到了 100 多 ms 了,而且这个本身就是平均数,证明延迟肯定更高,吞吐量也不大,估计 IOPS 也不高,先解决磁盘的问题吧

2 个赞

明白了,经过各位大佬的分析,我现在也怀疑是磁盘问题,准备重新装一个节点替换掉现在的25节点。

看你这掉 leader 啥的出现的挺频繁的,你现在可以先把 25 上的 leader 驱逐走看下,这样集群应该就快了

换个好的固态性能会提升的

看看是不是网络的问题

问题的根本原因应该是25主机的虚拟机磁盘写入性能有问题,我们把25主机虚拟机迁移到了其它物理机上,经过周末1天的观察基本确认问题已经解决了

2 个赞

小型虚拟云资源池,磁盘IO和网络都是瓶颈