背景
监控平台告警mysql服务器cpu利用率过高。
当时第一反应是平时的cpu利用率一直都在50%以下,怎么会突然过高呢?怀疑是有某些sql语句导致的。
排查过程
1、通过ps命令查找mysql进程id
ps aux |grep mysqld
假设找到的pid为1796
2、使用top查找高cpu利用率的线程id
top -hp 1796
记录高cpu利用率的线程id,例如:12345
3、找到线程对应的sql语句
select * from information_schema.processlist where id = (select thread_id from performance_schema.threads a where thread_os_id = 12345);
看到有一条长sql执行了2min还没结束。
结论:是这条sql导致的cpu利用率过高
4、sql优化
通过explain去分析查询sql
- 减少查询行数
- 使用索引查询
总结
通过利用率过高的mysql线程id找到 对应的执行sql ,然后通过explain去优化查询语句。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论