繁体   English   中英

关闭mysql连接重要吗?

[英]Is closing the mysql connection important?

明智地关闭mysql连接是否至关重要,还是在php文件运行后自动关闭?

文档

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

如果您的脚本在获取结果后需要执行大量处理并检索到完整的结果集,则您绝对应该关闭连接。 如果不这样做,当 Web 服务器使用量很大时,MySQL 服务器可能会达到它的连接限制。 如果您在脚本接近尾声之前无法关闭 MySQL 连接,尽管没有必要明确这样做,但它会更清晰。

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

关键吗? 没那么多

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

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

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

基本上,对于持久数据,请自行清理。 对于琐碎的、非持久性的数据,不管怎样,当请求完成时它都会消失。 无论哪种方式,最佳做法是始终关闭您的连接。

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM