MySQL 休眠查询

MySQL 休眠查询

当 show full processlist; 返回大量时间列为 0 的“睡眠”状态查询时,这可能是什么原因造成的?MySQL 实际上如何决定连接是否需要睡眠?与 mysql 通信的应用程序未使用持久连接。

答案1

睡眠状态仅表示连接处于空闲状态。即客户端已连接但未执行任何查询。

我建议您检查应用程序是否在完成所有未使用的 MySQL 线程后将其关闭,即使您没有使用持久连接。

可以使用变量在服务器端“控制”空闲连接wait_timeout。但您最好找到问题的根本原因。

答案2

当你

mysql> show global variables like "wait%";

尝试通过编辑 my.cnf 来减少它,或者使用以下代码(以 root 身份)

mysql> SET GLOBAL wait_timeout=28801;

MySQL Performance Blog 上有一篇很好的文章,专门讨论睡眠查询http://www.mysqlperformanceblog.com/2007/02/08/debugging-sleeping-connections-with-mysql/

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

另一个想法是重读 Dan 的评论:不过,sleep(0) 时间很奇怪。在我看来,这似乎表明存在一些持久连接,它们实际上并没有处于休眠状态,而是至少每秒都会执行一些操作来重置计时器。如果您知道 Web 应用程序未使用持久连接,那么也许它会在循环或计时器函数中的某个地方直接调用 sleep()?

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

PS 你运行的是哪个版本的 MySQL?4.1 中曾报告过类似的严重错误,但那是在 2005 年...

相关内容