记一次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

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

你可能感兴趣的:(记一次mysql负载过高处理)