打开和关闭数据库连接还是保持连接?

6
我看到了很多关于.NET和C#应用程序的答案,但是在Web应用程序方面没有找到我要的内容(或者我没有好好搜索,对此我深表歉意)。
我的问题是关于在查询期间连接数据库:我应该每次进行查询时都打开和关闭一个连接,还是创建一个并一直保持连接? 我猜是前者,但我想了解两者之间在性能和安全方面的区别。
此外,是否仅关闭连接就足够了:
$dbh = new PDO('mysql:host=localhost;dbname=foo', '', '')
// queries
$dbh = null;

1
PHP会在你的脚本结束时自动关闭连接,这并不意味着你不应该手动关闭。通过手动关闭,你可以打开到另一个数据库或服务器的新连接。个人认为一旦不再需要它们,关闭它们会提高性能,因为PDO查询已经关闭并停止执行任务,这可能只会减少1-3毫秒的时间,但在你需要它时这是很重要的。 - Jamie Harding
PHP会自动关闭连接,即使我在每个查询之前使用global $dbh吗? - tektiv
也许会,我会测试一下然后再回复你。 - Jamie Harding
@N.B. 那么如何保持其活跃以提高性能呢?与结束当前的活动状态并不断运行后台进程相比,您更愿意让它继续运行吗? - Jamie Harding
@JamieSterling - 你应该意识到,如果你不查询数据库,那么你所想象的这个过程就毫无意义了。你听说过“空闲”这个词吗?你所写的东西毫无意义,没有任何事实支持,只是你认为是正确的。我们可以争论,但那将毫无意义——你的假设是错误的。不关闭=更高的性能。就这么简单。 - N.B.
显示剩余4条评论
1个回答

9
不,如果你想要更好的性能,就不应该关闭连接。手动关闭连接对安全性没有影响。关闭连接会使事情变得更慢。
我将根据您的性能要求编写剩余的答案,并假设您是通过php-fpm提供php服务(如果不是,请使用php-fpm)。
关闭和打开连接会带来与MySQL握手和打开文件描述符相关的开销。如果有很多请求正在进行,这个过程将影响性能,而没有任何收益。然而,使用持久连接会提高性能。
原因如下:一旦php脚本结束,php将保持连接处于打开状态。下一个进来的请求将使用已经建立的连接——避免了握手、tcp开销等等。
以下是来自php手册的摘录:
许多Web应用程序从与数据库服务器建立持久连接中受益。持久连接在脚本结束时不会关闭,而是在另一个脚本使用相同凭据请求连接时缓存并重复使用。持久连接缓存允许您避免每次脚本需要与数据库通信时建立新连接的开销,从而加快Web应用程序的速度。 ->向下滚动到示例4以查看如何实现此功能。

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