MySQL睡眠者查询

显示完整进程列表时; 用0时间列返回一些“睡眠”状态查询,这是什么原因造成的? MySQL如何确定连接是否需要hibernate? 与mysql交谈的应用程序不使用持续连接。

睡眠状态仅表示空闲连接。 这是一个连接但不执行任何查询的客户端。

我build议检查你的应用程序是否closures了任何未使用的MySQL线程,即使你没有使用持久连接。

空闲的连接可以通过variableswait_timeout来“控制”服务器端。 但你最好find问题的根源。

你什么时候得到什么

 mysql> show global variables like "wait%"; 

尝试通过编辑my.cnf或使用下面的代码(以root身份)

 mysql> SET GLOBAL wait_timeout=28801; 

MySQL性能博客上有一篇关于睡眠查询的好文章http://www.mysqlperformanceblog.com/2007/02/08/debugging-sleeping-connections-with-mysql/

这值得一看http://rackerhacker.com/2007/05/20/mysql-connections-in-sleep-state/

另一个想法是重读丹的评论:虽然睡眠(0)时间很奇怪。 这似乎表明,有一些持续不断的连接并不真正睡眠,但至less每秒都会做一些事情来重置计时器。 如果你知道web应用程序没有使用持久连接,可能是直接调用sleep(),在循环或定时器函数中的某个地方?

另外 ,如果你使用的是PHP,你可以进入php.ini并设置mysql.allow_persistent = Off ,看看会发生什么。

PS你正在运行什么版本的MySQL? 类似的东西被报告为4.1中的一个严重的错误,但是那是在2005年。