tidb卡死,找不到导致死机的sql

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

【TiDB 使用环境】生产环境
【TiDB 版本】v8.5.4
【部署方式】云上部署(腾讯云)/机器部署
【操作系统/CPU 架构/芯片详情】rocky linux x86
【机器部署详情】CPU大小/内存大小/磁盘大小 32c64g *2
【集群数据量】 600g+
【集群节点数】2
【问题复现路径】跑耗资源的sql
【遇到的问题:问题现象及影响】tidb卡死,找不到导致死机的sql,需要找到影响tiflash死机的sql
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】

本集群专门用来做olap,同步mysql的数据过来,定时跑分析任务,或者实时跑分析任务,会有多张大表join再聚合分析,
开启了资源管控(resource control),
开启了中间结果落盘(https://docs.pingcap.com/zh/tidb/stable/tiflash-spill-disk/)
(SET tiflash_mem_quota_query_per_node = 32 << 30;
SET tiflash_query_spill_ratio = 0.8;)
有一定几率导致tiflash卡死,需要找到那条sql,请大佬指导一下吧

ps:不知道是不是和健康度相关,大表健康度可能在90-95之间


有类似这样的执行计划

你是tiflash 卡死?去dashboard界面慢查询里面找对应时间段的慢sql吧

先扩节点
​单节点没办法保证高可用
​先用闲置机器把有问题的节点先扩多两个

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

去 dashboard 上找对应时间点的长耗时的 sql

集群节点的配置是不合理的, tiflash 做单独的部署吧

top SQL语句情况呢,看看执行计划是不是耗时异常了

tiflash非常吃资源,得分开部署

不能混布,增加点资源吧

一般出现 TiFlash 卡死,通常是以下几种情况:

1)TiFlash CPU 100%

特征:

tiflash 进程 CPU 高
查询一直不结束
spill 到磁盘
IO 高
某条 SQL 长时间 running

本质:

大表 Join + 聚合 + Spill 导致执行时间极长

2)TiFlash 内存耗尽或频繁 Spill

特征:

SET tiflash_mem_quota_query_per_node = 32 << 30;
SET tiflash_query_spill_ratio = 0.8;

意味着:

每个查询最多用 32G

80% 就开始 spill

如果:

多个 SQL 同时运行

就会出现:

大量 spill
磁盘 IO 打满
查询卡住

看起来像 TiFlash 卡死。

3)TiFlash 被资源组限制

你开启了:

Resource Control

可能出现:

SQL被限速
线程拿不到资源

表现:

running
但不动

类似卡死。

2 个赞

看看历史慢 SQL

执行:

SELECT
time,
query_time,
digest,
query
FROM information_schema.cluster_slow_query
WHERE query LIKE ‘%tiflash%’
ORDER BY time DESC
LIMIT 50;

2 个赞

查查cluster_slow_query看看那个时间点有没有慢查询

  • TiFlash 当前内存最高 SQL
  • 杀掉它
  • 重启 TiFlash 即可永久稳定

可以先重启,现在死机,操作也受限。

定位 SQL:过滤 TiFlash 高耗内存查询
立即可用:全局禁用 TiFlash 自动选择,彻底杜绝故障复现
长期方案:2 节点混部必须扩容,否则无法稳定支撑生产