更新时间:2019-03-21 17:55:16浏览次数:1+次
最近系统总是出现数据库巨卡的问题,最后发现是有很多Sleep的连接。查看的办法是在执行SQL的地方执行:
show processlist这样就可以看到mysql的进程列表,也就是各个连接的进程。这些Sleep的进程怎么来的呢?
1.客户端程序在退出之前没有调用mysql_close().简单理解就是,客户端断开了数据库的连接,但是没有通知mysql。而mysql默认的连接超时时间还没有到,所以这些连接就都要进入Sleep状态。因为既没有到超时时间,又没有活跃,所以先让其休眠,减少系统开销。如果客户端开始活跃了,这个连接会恢复,如果不活跃,则在超时时间到了之后就会择机干掉这些进程。
2.客户端sleep的时间在wait_timeout或interactive_timeout规定的秒内没有发出任何请求到服务器.
3.客户端程序在结束之前向服务器发送了请求还没得到返回结果就结束掉了。
wait_timeout = 60这里的时间的单位是秒。需要提醒的是,此配置要添加在[mysqld]下而不是在[mysqld_safe]下哦。
service mysqld restart修改之后,即使客户端没有主动断开而直接关闭,60秒后这些无效的连接也会被自动干掉,以免使数据库变得缓慢。
相关资讯