一次mysql cpu占用300%的排查过程记录

某个项目反馈,cpu一直占用300%不降下来,马上远程排查。记录下排查过程。

1、查询mysql 进程id,直接top 查看。果然一直都降不下来。

2、检查mysql服务是否正常,发现查询什么都挺正常的。怀疑是某个sql导致的。

3、根据进程id找mysql下的线程,看cpu占用很高的那几个。top -H -p 123

4、根据线程id到数据库查询信息。

SELECT
    * 
FROM
    `performance_schema`.threads T 
WHERE
    T.THREAD_OS_ID = id

在查询结果中有个字段PROCESLIST_INFO,里面就是执行的sql。

5、把sql拿出来看,发现只是一个简单的单表查询,根据某个字符串查结果,为什么会消耗这么高呢?打开索引就发现了,不知道是谁,建了个多列联合索引。

6、把上述sql里面的条件字段,从多列联合索引中删除,单独建了个索引,占用瞬间就下来了。

参考地址:如何找出Mysql中CPU占用高的查询 - 简书 (jianshu.com)

posted @ 2022-07-06 10:04  Rolay  阅读(872)  评论(0编辑  收藏  举报