如何找到tiflash里最占cpu资源的sql?

现象描述:
线上集群,tiflash的几个节点,cpu突然被打满
按照经验应该是一批烂SQL打进去的

问题:
从什么途径能够找到,tiflash中最占cpu的SQL?
dashboard的top sql里,只能看到tidb和tikv节点

在慢sql日志里面找
查找日志文件路径show variables like’tidb_slow_query_file’;

【【TiDB CPU使用率过高之一】Scheduler worker CPU】https://mbd.baidu.com/ma/s/De4rR9bl

SELECT QUERY, query_time, stats
FROM information_schema.slow_query
WHERE Plan LIKE ‘%tiflash%’
ORDER BY Query_time DESC;
看一下

1 个赞

感谢上面两位的帮助
慢SQL不好查的,CPU被打高了之后,所有sql都是慢SQL了
线上环境,qps在100多,很难肉眼排查,只能依赖于Top SQL这种统计信息

非常难找。
可以尝试用楼上这个sql列出所有可疑对象。
然后进plan这个执行计划字段里面,就找actRows 这一列对应很大数字的。
这个数字越大就越耗资源,cpu和内存都耗的多。
不过我发现内存的统计可能不准,有的时候内存都爆了,统计却很低。
但是共同点就是actRows 和estRows的数字都很大。越大就越容易炸。

1 个赞

找返回值多的,频繁执行的

其实 tiflash cpu 高对应的就是扫描的数据多,扫描数据多又分两种情况

  1. 单次扫描数据不多,但是同样类型的sql执行了很多次,导致总体扫描的数据多
  2. 单次执行扫的数据就很多
    可以通过cluster_slow_query 中的 process_key 和 total_key 找到对应的 sql,找到的 sql 再通过执行计划去分辨一下是在tikv 执行的还是在tiflash执行的

可以参考以下sql(需要自行修改时间范围)

平均扫描 key 最多 key 的 SQL

select sum(total_keys)/count(digest) avg_keys,digest,min(query)
from CLUSTER_SLOW_QUERY
WHERE Time > ‘2022/02/12 12:00:00’
AND time < ‘2022/02/12 13:00:00’
group by digest
ORDER BY avg_keys DESC
LIMIT 10;

一段时间内 cop 处理过的 key 最多的 SQL

select sum(Process_keys),digest,min(query) from CLUSTER_SLOW_QUERY
WHERE Time > ‘2022/02/12 12:00:00’
AND time < ‘2022/02/12 13:00:00’
group by digest
ORDER BY sum(Process_keys) DESC
LIMIT 10;

3 个赞

新版本 dashboard 里面有 top SQL,选下 tikv 节点会自动弹出 top SQL。

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。