MySQL数据库连接未关闭:会发生什么?

时间:2011-07-24 19:52:07

标签: php mysql database performance

我正在使用PHP查询我网站上的MySQL数据库。请回答以下问题:

  1. 如果我最终在查询数据库时不使用mysql_close()会怎样?连接将保持打开状态?如果是,那么多少时间?如果没有那么为什么?
  2. 如果我在一个地方的几个地方打开和关闭与MySQL的连接 网页,性能如何受到影响?即每次在单个网页上需要访问数据库时再次建立连接。
  3. mysql_close()与绩效有何关系?我是否应该在每次需要访问数据库时打开一个新连接,或者我应该只保留一个连接并最终关闭它?
  4. 如果我没有关闭连接,那么如果用户正在尝试 再次访问一些数据,将使用新连接还是旧连接 将使用开放连接?

4 个答案:

答案 0 :(得分:10)

  1. 在破坏阶段完成PHP脚本运行时,它将自动关闭。
  2. 表现会受到负面影响。打开一个新的套接字(特别是对外部数据库服务器)比在内存中保留指向当前连接的指针更加昂贵和耗时。
  3. 见答案编号。 2
  4. 将通过新的PHP请求执行对数据的访问。因此,您将拥有一个新的数据库连接。没问题。
  5. 我建议在构建阶段打开数据库连接,在整个脚本执行期间重新使用该连接(如果它是基于OO的,为数据库连接分配一个类变量并在期间使用$this->db整个脚本),并在销毁期间关闭它(或者根本不打算关闭它,因为它将被关闭,即使没有特别声明)。

答案 1 :(得分:2)

来自php.net:

  

通常不需要使用mysql_close(),因为非持久性打开链接会在脚本执行结束时自动关闭。

性能取决于情况,使用时间,空闲时间等等(例如长时间执行)。在大多数情况下,有一个单例模式,通过它可以有一个打开的连接,并使用该打开句柄进行所有查询。但总而言之,并非如此,因为mysql_connect本身就是一种支持:

  

如果使用相同的参数对mysql_connect()进行第二次调用,则不会建立新的链接,而是返回已打开的链接的链接标识符。 new_link参数修改了这种行为,并使mysql_connect()始终打开一个新的链接,即使之前使用相同的参数调用了mysql_connect()。

所以基本上,当涉及短版本脚本时,不需要mysql_close。

答案 2 :(得分:1)

与不需要时保持打开的资源使用情况相比,关闭连接的性能损失可以忽略不计。最好在完成连接后立即关闭连接,并在需要时再次打开连接。

答案 3 :(得分:1)

如果使用非持久连接,则当PHP脚本完成执行时,所有打开的MySQL连接都将自动关闭。