今天 mysql 服务器突然 CPU 告警,记录一下问题查找的过程
第一步查看具体是哪个线程占用CPU最高
1、在 Linux 中使用 top 命令找到 mysql 进程 PID
2、指定进程 PID,找到占用 CPU 最高的线程 ID
top -H -p PID
3、根据操作系统线程 ID 找到对应的 mysql 线程
SELECT
*
FROM
`performance_schema`.threads T
WHERE
T.THREAD_OS_ID = 线程ID
4、根据返回结果中的 PROCESLIST_INFO 等信息,来判断其执行的语句是否可以进行优化
补充
如果觉得先从分析线程入手比较麻烦,也可以直接通过查询当前正在执行的查询入手
SELECT * FROM `information_schema`.`processlist`
WHERE COMMAND != 'SLEEP' AND TIME > 1 ORDER BY TIME DESC
直接找出当前下大执行的查询,按执行时间排序,占用CPU高的查询往往耗时也比较长