mysql 使用的是阿里云的RDS鲤遥。某天 cpu 突然負(fù)載過高報(bào)警。
首先查詢了連接數(shù)
netstat -nt |grep 3306 | wc -l
發(fā)現(xiàn)各臺(tái)服務(wù)器上的mysql 連接數(shù)都不高查剖。
于是猜測(cè)是某些查詢有問題沟于。
然后查看下mysql進(jìn)程是否有鎖
mysql -h xxx.mysql.rds.aliyuncs.com -u xxx -p -e "show processlist" | grep -i "locked" > locked.log
發(fā)現(xiàn)沒有鎖操作。但是用showprocess 看了下有很多時(shí)間超長(zhǎng)的,最長(zhǎng)的甚至超過1000s彤灶。
這個(gè)時(shí)候mysql壓力很大看幼,后續(xù)還有寫操作堆積,只好先把這些有問題的超慢查詢kill掉幌陕。
#查出慢查詢的mysql進(jìn)程id
mysql -h xxx.mysql.rds.aliyuncs.com -u xxx -p -e "show processlist" | awk '{if ($6 > 1000) print $1}' > long.log
#將要kill的進(jìn)程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
效果很明顯 當(dāng)然負(fù)作用也很大诵姜,那些沒來得及寫入的數(shù)據(jù)就丟掉了