【发布时间】:2010-10-27 05:22:01
【问题描述】:
关闭 mysql 连接的效率至关重要,还是在 php 文件运行后自动关闭?
【问题讨论】:
-
我猜这同样适用于 ftp_close?
-
关闭mysql连接重要吗?是的,它就像 c++ 中的析构函数
关闭 mysql 连接的效率至关重要,还是在 php 文件运行后自动关闭?
【问题讨论】:
大多数CMS在请求结束时关闭MySQL连接,这真的没有意义,因为PHP无论如何都会这样做。
但是,如果您有一个不再需要连接的脚本,比如说在脚本中间,然后发生了其他繁重的活动,那么明确关闭连接是个好主意。这将释放一些资源。
现在,关于关闭连接的好处已经说了很多,但关于不关闭连接的好处几乎没有人说。本质上,如果您没有在脚本结束时关闭连接,那么您确实在节省一些资源。想象一个 Web 应用程序(或任何应用程序)每秒接收 100 次网页浏览。因此,每一秒,您都需要调用mysqli_close 100 次——这意味着在每一秒内,您有 100 次不必要的往返数据库服务器来关闭打开的连接。从性能的角度来看,这是纯粹的开销,因为 PHP 将在脚本完成时检查打开的连接并关闭这些连接,并且可能是因为一切都发生得如此之快,以至于 PHP 看不到你有关闭这些连接并将尝试再次关闭它们。
注意:上面的答案假设您没有使用持久连接(任何主要的 CMS 都不使用持久连接)。
【讨论】:
脚本完成执行后立即关闭。除非您打开了持久连接。 理想情况下,您应该在完成后立即释放资源(此处为连接)。除非你很有可能在执行过程中很快再次需要它。
如果您在单个数据库服务器后面,连接池或使用持久连接(如果这就是您的意思)是一个好主意。 但是,如果有更多服务器并且您正在负载平衡,则可能会损害工作分配。通常,一些客户端运行繁重的查询,而其他客户端运行较轻的查询。因此,如果在 n 次以上使用相同的连接,则某些服务器会负载过重,而另一些服务器会利用率不足。 考虑使用更小的 ttls 和可变的连接池大小。
【讨论】:
注意:到服务器的链接将在脚本执行结束后立即关闭,除非它通过显式调用 mysql_close() 提前关闭。
如果您的脚本在获取结果后需要执行大量处理并检索到完整的结果集,那么您绝对应该关闭连接。如果你不这样做,当 Web 服务器被大量使用时,MySQL 服务器有可能达到它的连接限制。如果在脚本接近尾声之前无法关闭 MySQL 连接,虽然没有必要明确地这样做,但它会更简洁。
我不确定 fastcgi 如何影响事物。 One page 声称支持 fastcgi 的 PHP 构建将创建持久连接,即使对于 mysql_connect 也是如此。这与文档相矛盾,因为当进程而不是脚本结束时连接关闭。我建议使用 mysql_close(),而不是对其进行测试。实际上,我建议使用PDO,如果可用的话。
【讨论】:
"The link to the server will be closed as soon as the execution of the script ends." 当用户提前关闭页面时,PHP 服务器无关紧要。它一如既往地运行脚本并一如既往地结束脚本。只有用户不会看到结果。
使用 cgi 之类的东西时,完全没有必要关闭 mysql 连接,因为它们会在脚本执行结束时自动关闭。当使用像 mod_perl 等持久性技术来维护请求之间的连接时,跟踪连接、全局变量等很重要。
基本上,对于持久性数据,请自行清理。对于琐碎的非持久性数据,无论如何,当请求完成时,它都会消失。无论哪种方式,最佳做法是始终关闭您的连接。
【讨论】:
这很重要吗?没那么多
这是否被认为是一种好的做法?是的。
我不明白你为什么不想关闭它。
【讨论】:
mysql_close 的手册页也说“通常不需要使用 mysql_close(),因为非持久打开的链接会在脚本执行结束时自动关闭。”我真的不会认为不关闭连接是不好的做法。