mysql数据库sleep进程过多的处理办法

因为PHP代码的问题,导致论坛页面打开很慢
以为是数据库的问题,show processlist;发现数据库有大量的Sleep进程

上网查找资料,有这么多的Sleep进程,可能的原因有3个:
1.使用了太多持久连接
2. 程序中,没有及时关闭mysql连接
3.数据库查询不够优化,过度耗时

逐个排除,首先代码中没有使用持久连接,都是用mysql_connect而不是pconnect,排除第一点
公司使用是的PHP,每个页面在打开数据库后,执行SQL完成,当页面脚本结束的时候,这个MySQL连接会自动关闭并且释放内存,所以也可以排除第二点
至于第三点,那就更可以排除了,数据库是经过公司牛人优化过的,而且在线上跑了有1年多了,一直没有问题

所有可能性都排除了,Sleep的进程还是依旧多
那先把wait_timeout和interactive_timeout这两个超时时间的值先设置低一些
采用的是mysql默认的28800(即8个小时)
show variables like '%timeout%';
set global wait_timeout=100; 
set global  interactive_timeout=100;

修改了等待超时时间之后,Sleep的数量并没有减少
于是先手动的删除Sleep的进程
/usr/local/mysql/bin/mysql  -uroot -p123 -e "show processlist;" | grep Sleep | awk '{print $1}' | while read line; do /usr/local/mysql/bin/mysql  -uroot -p123 -e "kill $line"; done

删除之后,还是会不断的生成
唉,貌似完全没有作用啊
再请教牛人,他说这些Sleep的进程不用管它,不会对数据库有太大的影响
(当时数据库的负载和平时一样,大概在0.5左右,内存使用也和平时一样,CPU使用率也很低)
再后来随着PHP代码的问题解决了之后,数据库Sleep的进程也很少了

看来还是代码影响到了,记录一下

参考资料:
http://gaoerpeng777.blog.163.com/blog/static/94379450201181901428154/

你可能感兴趣的:(mysql,过多,Sleeep进程)