PHP,MySQL和“睡眠”连接

时间:2010-08-02 07:08:32

标签: php mysql

我正在运行一个由PHP / MySQL驱动的Web服务,最近发现了一个奇怪的问题。

当我运行“show full processlist;”时通过SSH终端的SQL命令,我注意到几个“睡眠”连接:

| Id        | User    | Host      | db      | Command | Time | State | Info                  |
+-----------+---------+-----------+---------+---------+------+-------+-----------------------+
| 218121282 | test_user | localhost | test_db | Sleep   |    0 | NULL  | NULL                  |

由于在脚本末尾没有使用mysql_close(),这些“睡眠”连接是否会发生?

如果这是原因,我可以通过使用“register_shutdown_function”PHP函数并在回调函数上运行mysql_close()来解决这个问题吗?

感谢您的建议。

3 个答案:

答案 0 :(得分:2)

  

由于在脚本末尾没有使用mysql_close(),这些“睡眠”连接是否会发生?

没有。无论如何,MySQL连接在脚本末尾都会关闭,除非它们是持久的。

这些休眠连接意味着您要么使用持久连接,要么在某个地方出现问题导致MySQL连接长时间保持打开状态,这可能是因为PHP脚本运行的时间很长,或者是其他原因。

如果您不知道是否需要持久连接,最好将其关闭。与流行的建议相反,在很多情况下,他们实际上可能会产生比他们解决的问题更多的问题,例如导致您更快地耗尽资源。但是,在某些特定情况下需要它们,但是您需要知道自己在做什么,不知道自己在做什么,以避免可能会打开并让数百个连接长时间处于睡眠状态的情况等等。

答案 1 :(得分:0)

您使用的是持久连接(mysql_pconnect())吗?如果配置不当,他们就有这种无限期留守的习惯。

答案 2 :(得分:0)

wait_timeoutinteractive_timeout变量更改为小值

可能会在centos中的my.cnf文件中更改