记一次mysql负载过高处理

mysql 使用的是阿里云的RDS。某天 cpu 突然负载过高报警。

首先查询了连接数

netstat -nt |grep 3306 | wc -l

发现各台服务器上的mysql 连接数都不高。
于是猜测是某些查询有问题。

然后查看下mysql进程是否有锁

mysql -h xxx.mysql.rds.aliyuncs.com -u xxx -p -e "show processlist" | grep -i "locked" > locked.log

发现没有锁操作。但是用showprocess 看了下有很多时间超长的,最长的甚至超过1000s。

这个时候mysql压力很大,后续还有写操作堆积,只好先把这些有问题的超慢查询kill掉。

#查出慢查询的mysql进程id
mysql -h xxx.mysql.rds.aliyuncs.com -u xxx -p -e "show processlist" | awk '{if ($6 > 1000)  print $1}' > long.log
#将要kill的进程id 变成 sql
for line in `cat long.txt`;do echo "kill $line;" > kill.sql;  done
mysql -h xxx.mysql.rds.aliyuncs.com -u xxx -p < kill.sql

效果很明显 当然负作用也很大,那些没来得及写入的数据就丢掉了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容