关闭mysql连接很重要吗?

时间:2009-05-19 03:48:23

标签: php mysql

关键是要有效地关闭mysql连接,还是在php文件运行后自动关闭?

5 个答案:

答案 0 :(得分:86)

来自documentation

  

注意:一旦脚本执行结束,服务器的链接就会关闭,除非通过显式调用mysql_close()将其关闭。

如果您的脚本在获取结果后要执行相当多的处理并检索完整的结果集,那么您肯定应该关闭连接。如果不这样做,当Web服务器使用率很高时,MySQL服务器有可能达到连接限制。如果你不能关闭MySQL连接,直到接近脚本的结尾,虽然没有明确的必要,但它更干净。

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

答案 1 :(得分:9)

这至关重要吗?不是那么多

它被认为是一种好习惯吗?是。

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

答案 2 :(得分:4)

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

基本上,对于持久数据,请自行清理。对于琐碎的非持久性数据,无论如何,它都会在请求完成时消失。无论哪种方式,最佳做法是始终关闭您的联系。

答案 3 :(得分:2)

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

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

答案 4 :(得分:0)

大多数CMS在请求结束时关闭MySQL连接,这实际上毫无意义,因为PHP无论如何都会这样做。

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

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

注意:上面的答案假定您没有使用持久连接(任何主要CMS都不使用持久连接)。