关闭mysql连接重要吗?


Answers:


89

文档中

注意:脚本执行结束后,将立即关闭服务器链接,除非通过显式调用mysql_close()提前关闭了该链接。

如果您的脚本在提取结果后要执行大量处理,并且已检索到完整的结果集,则绝对应该关闭连接。如果您不这样做,那么当Web服务器使用率过高时,MySQL服务器就有可能达到其连接限制。如果直到脚本结束前都无法关闭MySQL连接,这样做会更干净,尽管不必显式这样做。

我不确定fastcgi如何影响事物。 一页声称,支持fastcgi的PHP构建将创建持久连接,即使对于mysql_connect也是如此。这与文档相矛盾,因为该文档在进程而不是脚本结束时关闭了连接。我将建议使用mysql_close()而不是对其进行测试。实际上,我建议使用PDO(如果可用)。


我想同样适用于ftp_close吗?
doc_id 2011年

4
这是否意味着,如果用户(例如)提前关闭页面(或出现某些错误),连接可能会保持打开状态?
托尼·米歇尔·考贝特2013年

1
@Toni Michel Caubet"The link to the server will be closed as soon as the execution of the script ends."当用户提前关闭页面时,对于PHP服务器而言都无关紧要。它像往常一样运行脚本,并像往常一样结束脚本。只有用户看不到结果。
arrowman

9

至关重要吗?没那么多

遵循它是否被认为是一种好习惯?是。

我不明白您为什么不想关闭它。


6
好吧,考虑到甚至手册页上也mysql_close说“通常不需要使用mysql_close(),因为在脚本执行结束时,非持久性打开链接会自动关闭。” 我不认为不关闭连接不是一个坏习惯。
nico 2010年

4
“我不明白为什么你不想关闭它。” 如果完全有可能再次需要它,则您不想关闭它。
Frank Farmer

1
如果U使用ajax,则如果连接关闭,则每次尝试使用ajax时,连接都会再次打开和关闭,这比将连接保持对服务器开放和客户端不在乎连接是否打开值得。关心网站的速度
罗伯特·罗伯特(Robert Robert)

这确实很关键!!!如果服务器负载很高,并且您有很多未关闭的连接,就像其他人所说的那样,这可能导致服务器无响应,所以我将其称为至关重要!
oliiix

最好关闭。简单而没有问题。
何塞·卡洛斯·PHP

4

当使用cgi之类的东西时,完全不需要关闭mysql连接,因为它们会在脚本执行结束时自动关闭。当使用诸如mod_perl等持久性技术来维护请求之间的连接时,跟踪连接,全局变量等非常重要。

基本上,对于持久性数据,请自己清理。对于琐碎的非持久性数据,无论如何,当请求完成时,所有数据都会消失。无论哪种方式,最佳实践都是始终关闭连接。


1
他说的是PHP,它不是持久性的,因此不适用。
2009年

2

脚本完成执行后立即关闭。除非您打开了持久连接。理想情况下,您应该在完成使用后立即释放资源(此处为连接)。除非极有可能您很快会在执行中再次需要它。

如果在单个数据库服务器后面,则连接池或使用持久连接(如果这就是您的意思)是个好主意。但是,如果有更多服务器并且您正在负载均衡,则可能会损害工作分配。通常,一些客户端运行繁重的查询,而另一些则运行较轻的查询。因此,如果在n个以上使用同一连接,则某些服务器将承受沉重的负载,而另一些服务器将被利用不足。考虑使用较小的ttl和可变的连接池大小。


1

大多数CMS在请求结束时关闭MySQL连接,这实际上是没有意义的,因为PHP还是会这样做。

但是,如果您有一个脚本,其中不再需要连接,请在脚本中间说,然后进行其他繁重的活动,那么最好显式关闭连接。这将释放一些资源。

现在,关于关闭连接的好处已说了很多,但是关于不关闭连接的好处却几乎没有说过。本质上,如果您没有在脚本末尾关闭连接,那么您实际上是在节省一些资源。想象一个Web应用程序(或任何应用程序)每秒接收100次浏览量。因此,您每秒需要调用mysqli_close100次-这意味着您每秒需要进行100次不必要的往返数据库服务器往返操作,以关闭打开的连接。从性能的角度来看,这纯粹是开销,因为无论脚本何时完成,PHP都会检查打开的连接并关闭这些连接,这可能是因为一切发生得如此之快,使得PHP看不到您拥有关闭这些连接,然后尝试再次关闭它们。

注意:上面的答案假定您未使用持久连接(任何主要CMS中均未使用持久连接)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.