我们如何杀死mysql睡眠过程如:
+------+-----------+-----------+------------------------+---------+------+----------------+-------------------------------------------------------------------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +------+-----------+-----------+------------------------+---------+------+----------------+-------------------------------------------------------------------------------------------+ | 2477 | stageuser | localhost | jj_production_11102013 | Query | 0 | end | SELECT * FROM wp_comments WHERE blog_id = 1071 ORDER BY comment_date_gmt DESC LIMIT 0, 50 | | 3050 | stageuser | localhost | jj_production_11102013 | Query | 0 | Sorting result | SELECT * FROM wp_comments WHERE blog_id = 1071 ORDER BY comment_date_gmt DESC LIMIT 0, 50 | | 3052 | stageuser | localhost | jj_production_11102013 | Sleep | 336 | | NULL | | 3056 | stageuser | localhost | NULL | Query | 0 | NULL | show processlist | | 3057 | stageuser | localhost | jj_production_11102013 | Sleep | 301 | | NULL | | 3058 | stageuser | localhost | jj_production_11102013 | Sleep | 299 | | NULL | | 3059 | stageuser | localhost | jj_production_11102013 | Sleep | 298 | | NULL | | 3061 | stageuser | localhost | jj_production_11102013 | Sleep | 273 | | NULL | | 3068 | stageuser | localhost | jj_production_11102013 | Sleep | 251 | | NULL | | 3072 | stageuser | localhost | jj_production_11102013 | Sleep | 233 | | NULL | | 3111 | stageuser | localhost | jj_production_11102013 | Sleep | 1 | | NULL | +------+-----------+-----------+------------------------+---------+------+----------------+-------------------------------------------------------------------------------------------+ 11 rows in set (0.00 sec)
此睡眠过程是否会影响网站性能,如同其他慢查询一样?
答案 0 :(得分:10)
我做到了。
创建kill_sleep.sh文件
mysql -u<user> -p<password> -h<host> -e "select concat('KILL ',id,';') into outfile '/tmp/sleep_processes.txt' from information_schema.processlist where Command = 'Sleep'"
mysql -u<user> -p<password> -h<host> -e "source /tmp/sleep_processes.txt;"
rm -rf /tmp/sleep_processes.txt
将kill_sleep.sh设置为cron job。
答案 1 :(得分:5)
如果您在MySQL服务器上运行该命令,Vishal的答案很有效,但是如果您远程连接到服务器或者您没有运行SOURCE或{{1}的权限,它将无效。 (例如亚马逊的RDS)。有可能重写它不依赖于这些功能,然后它可以在任何地方工作:
SELECT ... INTO OUTFILE
答案 2 :(得分:2)
语法为:
KILL thread_id
在你的情况下:
mysql > KILL 3057
但是为了删除所有的睡眠过程,不能使用一个命令,你需要循环遍历整个进程列表,在获取tmp表中的所有进程并循环遍历它之后:
select concat('KILL ',id,';') from information_schema.processlist where Command='Sleep';
select concat('KILL ',id,';') from information_schema.processlist where Command='Sleep' into outfile '/tmp/a.txt';
摘自here
答案 3 :(得分:0)
Percona工具:
pt-kill --match-command Sleep --idle-time 100 --victims all --interval 30 --kill
这将找到&#34; Sleep&#34;状态并闲置100秒或更长时间并杀死它们。 --interval 30将使它每30秒继续这样做。所以你可以打开一个屏幕-S ptkill然后在那个屏幕上运行上面的命令,然后按ctrl-A,D分离并退出终端,它将继续运行清理你的连接。
https://www.percona.com/doc/percona-toolkit/2.1/pt-kill.html
答案 4 :(得分:0)
一种简单的方法:
for i in `mysql -e "show processlist" | awk '/Sleep/ {print $1}'` ; do mysql -e "KILL $i;"; done