那么造成sleep的原因,有三个,下面是mysql手册给出的解释:
1.客户端程序在退出之前没有调用mysql_close().[写程序的疏忽,或者数据库的db类库没有自动关闭每次的连接。。。]
2.客户端sleep的时间在wait_timeout或interactive_timeout规定的秒内没有发出任何请求到服务器.
[类似常连,类似于不完整的tcp
ip协议构造,服务端一直认为客户端仍然存在(有可能客户端已经断掉了)]
3.客户端程序在结束之前向服务器发送了请求还没得到返回结果就结束掉了.
[参看:tcp ip协议的三次握手]
解决的方法也很简单
在配置文件中加入如下代码:
[mysqld]
wait_timeout=10
或者:
mysql>set global wait_timeout=10
一般是睡眠连接过多,严重消耗mysql服务器资源(主要是cpu, 内存),并可能导致mysql崩溃。解决办法 :
mysql的配置my.ini文件中,有一项:
wait_timeout, 即可设置睡眠连接超时秒数,如果某个连接超时,会被mysql自然终止。
wait_timeout过大有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放,拖累系统性能,不过也不能把这个指设置的过小,否则你可能会遭遇到“MySQL has gone away”之类的问题,通常来说,我觉得把wait_timeout设置为10是个不错的选择,但某些情况下可能也会出问题,比如说有一个CRON脚本,其中两次SQL查询的间隔时间大于10秒的话,那么这个设置就有问题了(当然,这也不是不能解决的问题,你可以在程序里时不时mysql_ping一下,以便服务器知道你还活着,重新计算wait_timeout时间):
mysql>show global variables like 'wait_timeout'
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| wait_timeout | 120|
+----------------------------+-------+
mysql>set global wait_timeout=20
至此,mysql占用cpu下降了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)