【问题标题】:Open and close connection to db or keep it打开和关闭与 db 的连接或保留它
【发布时间】:2015-07-22 09:43:22
【问题描述】:

我已经看到很多关于.NETC# 应用程序的答案,但是我没有找到我正在寻找的关于Web 应用程序的内容(或者我没有很好地搜索,对此我深表歉意)。

我的问题是关于查询期间与数据库的连接:我应该打开和关闭我正在执行的每个查询的连接,还是应该创建一个连接并保持很长时间?
我想这是第一个,但我想要一些关于 PerformanceSecurity 之间差异的信息。

此外,这足以关闭连接吗:

$dbh = new PDO('mysql:host=localhost;dbname=foo', '', '')
// queries
$dbh = null;

【问题讨论】:

  • PHP 将在脚本结束时自动关闭连接。这并不是说您不应该手动执行此操作。通过手动操作,您可以将新的数据库打开到不同的数据库或服务器。就我个人而言,我相信一旦你不需要它们就关闭它们会提高性能,因为 PDO 查询已经关闭并停止执行任务,这可能只会减少 1-3ms 的时间,但在你需要的时候就足够了。
  • PHP 会自动关闭连接,即使我在每次查询前使用global $dbh
  • 未全局定义,将 PDO 对象视为持久连接,如果全局定义,它不会自动关闭连接,PHP 将存储该全局并使其在后台运行。
  • 那我以后也得关了吧?
  • 也许会,我会测试一下,我会回复你。

标签: php database


【解决方案1】:

没有。如果您想要性能,您应该关闭连接。通过手动关闭连接,您将对安全性产生 0 影响。关闭连接会使事情变慢。

我将根据您的性能标准编写其余的答案,我假设您通过php-fpm 提供 php(如果不是,您应该这样做)。

关闭和打开连接会带来与 MySQL 握手和打开文件描述符的开销。如果您有很多请求正在进行,则此过程将影响性能而无济于事。 但是,使用持久连接会提高性能。

原因如下:一旦 php 脚本结束,php 将保持连接打开。下一个请求将使用已经建立的连接——你避免了握手、tcp 开销等等。

摘自php手册:

许多网络应用程序都将从建立持久连接中受益 到数据库服务器。持久连接最后没有关闭 脚本,但在另一个脚本请求时被缓存并重新使用 使用相同凭据的连接。持久连接 缓存允许您避免建立新的开销 每次脚本需要与数据库通信时连接,导致 在更快的网络应用程序中。

Source -> 向下滚动到示例 4 以查看如何实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多