记一次mysql导致服务器CPU突然暴涨的问题
9月30号20点,感觉网站后台怎么越来越慢,打开阿里云看了服务器CPU竟然在几天内,一直是99%~100%,
今天一天就觉得网站访问慢,还想着优化读取数据,原来CPU早就干爆了。
想想有人攻击的话也不至于一直这样,putty上top一下,果然是mysql占满了CPU,大致查找策略如下
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);
我自己还是查了一下performance_schema.threads,找到THREAD_OS_ID的值和 top -Hp xxxx 对应
在THREADS中查看PROCESSLIST_INFO的内容,有某条sql的记录,这条sql就是耗费CPU的sql,
发现这个sql中where业务表某个字段,这个业务表也就是6万多条数据,于是将这个字段设置为索引,眼睁睁的看到占用CPU从300%跌倒20%左右。
因为一件蠢的事情CPU占用,总算的有了找问题的思路