Cpu突然上升至100%,磁盘读iops上升几十倍

【TDengine 使用环境】
生产环境

【TDengine 版本】

3.3.5.8

【操作系统以及版本】

ubuntu22

【部署方式】非容器部署

【集群节点数】3

【集群副本数】3

【描述业务影响】

慢插入,java客户端无法访问

【问题复现路径/shan】不稳定 无法复现

【遇到的问题:问题现象及影响】

初发阶段没有出现慢查询
重启服务即可恢复
今天出现了三次

【资源配置】8C32G

【报错完整截图】

1 个赞
  1. 请提供对应问题时间3个节点的taosdlog
  2. dmesg -T 检查一下 taosd 进程是否被异常终止
  3. journalctl -u taosd 看下进程的启动信息

taosd没有停止 show dnodes 一直都是正常的

我都是手动重启

日志我怎么给你

日志发我邮箱吧 yqdong@taosdata.com

邮件已发
昨天升级至12C48G 今天13点再次出现 但是自运行一段时间后平稳


从邮件的日志中总发现节点2 在21:09的数据落盘延迟明显增大,从21:01的400ms增到到90s,数据条数并没有明显变化。
结合资源监控,时间也能匹配

除处理落盘外,日志并没有明显异常,查询和写入都没有别阻塞的日志;且节点2 在21:23:27重启后,磁盘负载并没有下降,说明需要写入的数据量并没有变化。

对于这种中磁盘负载徒增,通常使用查询叠加写入导致。

排查方法:在下次出现类似现象时

  1. 在数据库执行 show queries 看是否存在慢查询
  2. 使用操作系统工具查看在读写哪些文件
  3. 与主机运营商沟通磁盘的IOPS和吞吐上限

对于CPU 100%的现象,在日志中没有对应记录,需要问题发生时,使用 top -H 确认占用负载最高的线程,并结合 perf 分析哪些函数负载最高。


对于数据库的集群配置,我们建议:

  1. vnode的数据小于2倍cpu核数
  2. commitThread 数量与vnode保持一致
  3. 磁盘IO应大于3倍(写入+查询)

使用注意事项:

  • 避免大范围投影查询(select * from xx where xxx), 尽量通过控制时间范围来缩小查询范围;
  • 对于大查询尽量进行拆分

好 下次再出现时 我再按照你的方法排查一下 是否需要修改日志级别进行排查
IOPS没有触发上限告警 前天升级了一下磁盘类型 IOPS上限31,800 带宽350MiB/s
show queries 在cpu突发时,必现慢查询 不管是插入还是查询 都存在 但平时运行平稳 不会出现慢查询

关键注意执行时间长(exec_usec)的投影查询

上面的负载属于正常范围。但是3个节点负载相差较大,是不是leader分布不均衡?
select count(*),dnode_id from information_schema.ins_vnodes where status=‘leader’ and db_name=‘test’ group by dnode_id order by dnode_id;

自行恢复之后

这个突然cpu上升是什么动作导致的 昨天8C32G的时候 调用的微服务会受影响 直接挂了


确实很不均衡

这个没办法 开源版只能通过重启触发选举 很难让他们平均分布

cpu的徒增大概率和查询相关。写入只会使用固定数量的commit线程,只有查询是不受限制的。

我们很多场景都是走子表查询了

有什么建议吗

把你们的查询拿出来做压测,看是否会推高CPU