可将网络断开,让数据库在无访问情况下,看占用高不高,
再就是大的访问量的情况,如果是此原因引起的,那只能优化访问的语句,降低访问次数,我也见过一些人,无限制地任意使用SQL语句,至数据库负荷重。
杀掉lock进程最快的方法是重启mysql,像你这种情况,1000多sql锁住了,最好是重启如果不允许重启,我提供一个shell脚本,生成 kill id命令杀掉lock线程,如下:
------------------------------------
#!/bin/bash
mysql -u root -e "show processlist"|grep -i "Locked" >>locked.txt
for line in awk '{print $1}' locked.txt
do
echo "kill $line">>kill_lock.sql
done
----------------------------------
执行完脚本后,会生成kill_lock.sql文件,内容类似如下:
kill 1
kill 2
kill 3
-------------------这些对应的都是lock的sessionid,直接复制文件里的内容,然后在mysql里执行就ok 了
至于排查哪条sql引起的,这个有点难了,不过你可以尝试开启慢查日志和无索引日志来确认比较耗时的查询,避免再次出现堵塞
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)