【发布时间】:2012-08-29 07:40:31
【问题描述】:
我继承了一个用 PHP 编写的 Web 应用程序,它使用 PostgresSQL 作为数据库服务器。 我对 PHP 和 PostgresSQL 没有任何经验,我来自 Java / C# 背景。 我正在研究它是如何工作的,当我分析它时,我注意到老程序员在每次页面请求期间都会实例化一个名为 Database 的类,他在其中使用以下方式打开与数据库的连接:
$this->connection = pg_connect($qs, PGSQL_CONNECT_FORCE_NEW)
分析器告诉我这是一个非常昂贵的调用(页面在 2.7 秒内加载...),我想知道是否以及何时真正需要标志 PGSQL_CONNECT_FORCE_NEW。由于连接字符串始终相同,因此我尝试使用 pg_pconnect 代替(甚至没有该标志的 pg_connect),并且页面加载时间仅为 741 毫秒。 现在一切似乎都很好,但我有点担心这可能会在某个地方破坏应用程序,而且由于我没有 PHP 经验,我想知道使用该标志的做法是否有某种意义我需要检查的场景。显然,没有可依赖的单元测试。 作为旁注,你知道关于这个 pg_(p)connect 如何真正工作的好资源吗?官方文档好像不够深入。
谢谢!
【问题讨论】:
-
性能提升似乎意味着每页调用 pg_connect 多次,否则应该没有任何区别。探查器结果是否表明每页有多个调用?
-
刚刚检查,你的假设是正确的,pg_connect 被调用了 12 次span>
-
这似乎很疯狂,连接不应该打开一次然后传递给需要它的人吗?
-
是的,那样会好很多。看起来最初的程序员不理解打开多个数据库连接的性能影响,并认为“强制新”听起来很安全。至少这比故意打开所有这些连接更合理。
标签: php postgresql