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

11

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

  1. 如果在结束数据库查询时不使用mysql_close(),会发生什么?连接将保持打开状态吗?如果是,则保持多长时间?如果不是,则为什么?
  2. 如果在单个网页上的多个位置打开和关闭到MySQL的连接,性能会受到影响吗?即每次需要访问数据库时都重新建立连接。
  3. mysql_close()如何与性能相关?应该每次需要访问数据库时都打开新的连接,还是保持一个连接并在最后关闭它?
  4. 如果不关闭连接,则用户再次尝试访问某些数据时,会使用新连接还是旧的打开连接?
4个回答

10
  1. PHP脚本在析构阶段运行完毕时会自动关闭。
  2. 性能会受到负面影响。打开一个新的套接字(特别是对于外部数据库服务器)比仅在内存中保留当前连接指针更加昂贵且耗时。
  3. 请参见答案2。
  4. 访问数据将通过新的PHP请求执行。因此,您将拥有一个新的数据库连接。没有任何问题。

建议您在构造阶段打开数据库连接,在整个脚本执行期间重新使用该连接(如果基于OO,请将数据库连接分配给类变量并在整个脚本中使用$this->db),并在析构期间关闭它(或者干脆不要费心关闭它,因为即使未明确声明,它也会被关闭)。


2

来自php.net:

通常情况下,使用mysql_close()是不必要的,因为非持久性开放链接会在脚本执行结束时自动关闭。

对于性能问题,它取决于情况,它被使用了多长时间,闲置了多长时间等等(例如长时间执行)。在大多数情况下,有单例模式,您可以使用一个打开的连接进行所有查询。但这并非完全正确,因为mysql_connect本身也支持这种方式:

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

因此,基本上,在短时间运行的脚本中,mysql_close并不是非常必要。


1

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


1

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


如何使我的连接非持久化? - EntzY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接