deadprogrammer Asked: 2009-06-12 07:45:07 +0800 CST2009-06-12 07:45:07 +0800 CST 2009-06-12 07:45:07 +0800 CST MySQL 睡眠者查询 772 显示完整进程列表时;返回许多具有 0 时间列的“睡眠”状态查询,这可能是什么原因造成的?MySQL 如何实际决定连接是否需要休眠?与 mysql 对话的应用程序没有使用持久连接。 mysql 2 个回答 Voted Dan Carley 2009-06-12T07:53:13+08:002009-06-12T07:53:13+08:00 睡眠状态仅表示空闲连接。那是一个已连接但不执行任何查询的客户端。 我建议检查您的应用程序是否在完成所有未使用的 MySQL 线程后关闭它们,即使您没有使用持久连接。 空闲连接可以使用变量“控制”服务器端wait_timeout。但是你最好找到问题的根本原因。 msanford 2009-06-13T06:30:46+08:002009-06-13T06:30:46+08:00 当你得到什么 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/ 重新阅读 Dan 的评论的另一个想法是:虽然 sleep(0) 时间很奇怪。在我看来,这似乎表明存在并非真正处于睡眠状态的持久连接,而是至少每秒执行一些操作来重置计时器。如果您知道 web 应用程序没有使用持久连接,那么它可能是在循环或计时器函数中的某个地方直接调用 sleep()? 此外,如果您使用的是 PHP,您可能会进入 php.ini 并设置mysql.allow_persistent = Off并查看会发生什么。 PS你运行的是什么版本的MySQL?类似的东西被报告为 4.1 中的一个严重错误,但那是在 2005 年......
睡眠状态仅表示空闲连接。那是一个已连接但不执行任何查询的客户端。
我建议检查您的应用程序是否在完成所有未使用的 MySQL 线程后关闭它们,即使您没有使用持久连接。
空闲连接可以使用变量“控制”服务器端
wait_timeout
。但是你最好找到问题的根本原因。当你得到什么
尝试通过编辑 my.cnf 或使用以下代码(以 root 身份)来减少它
有一篇关于(优秀的)MySQL 性能博客的好文章处理睡眠查询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 年......