请教它关于mysql_pconnect

时间:2009-04-02 01:55:26

标签: php mysql

我读了PHP函数的mysql_pconnect规范。 “即使脚本的实践已经完成,mysql_pconnect也没有关闭与SQL服务器的连接。”

除非连接关闭,否则它会一直存在,但是直到mysql重新启动的时间才会保持连接吗?

3 个答案:

答案 0 :(得分:1)

我想,我可能错了,但是......

我认为pconnect是一个持久连接,不是为了运行脚本,而是在PHP会话/ MySQL会话期间,有一个由PHP维护的套接字连接,无论正在运行哪个脚本。有点像在单词中打开多个文档而不是多个记事本运行实例。通过使用通用数据库链接,不需要用于创建单个链接的处理能力。

然而,在阅读之后,我认为如果PHP作为Apache模块运行,而不是CGI模式,它似乎才有好处。

告诉我我的错误信息。

答案 1 :(得分:1)

mysql_pconnect允许Apache的mod_php模块进行连接池。您仍然可以调用mysql_close,但mod_php实际上不会关闭它;它只会使资源句柄无效。不幸的是,该模块没有任何配置,因此MySQL服务器通过其wait_timeout参数获得池化连接。这个默认值非常高,所以如果你想利用它,你可能想要降低那个变量。

连接池节省了两件事:连接设置和MySQL线程创建。与其他数据库相比,MySQL的连接设置非常快,但是高度需求的网站仍然可以从减少这一步骤中获益。 MySQL中线程创建的成本更依赖于底层操作系统,但它仍然可以成为繁忙站点的胜利。

需要从网站速度的大局和它在数据库中呈现的负载两个方面来看待这两个方面。使用连接池,可以使用足够忙碌的站点耗尽数据库上的连接线程。还有一个方面是您的应用程序需要尽力保持连接处于一致状态,因为您不能再依赖关闭连接来执行解锁表和回滚事务等操作。

PHP documentation中有更多信息。

答案 2 :(得分:0)

是的,但你可以使用mysql___close关闭它。

当您重启mysql服务器时,或者当连接在特定时间内保持空闲(未使用)时,它将关闭,在配置变量wait_timeout中定义。