我继承了一个用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)连接如何真正起作用的良好资源?官方文件似乎不够深入。
谢谢!
答案 0 :(得分:0)
使用时,此常量告诉pg_connect每次都创建一个新连接,而不是使用已经打开的连接。这可能表明程序使用了一些与会话相关的功能,如:
答案 1 :(得分:0)
警告:pg_pconnect将在每个Apache后端的生命周期内保持一个连接,因此如果最终有大量连接,请不要感到惊讶。如果他们最终都会在阻止数据库服务器的同时发出查询。
我从未听说过连接数据库需要2秒钟。我可以启动psql,连接,发出查询并获得0.2秒的响应,这是我的旧上网本。检查你的网络设置或其他一些 - 这里有一些奇怪的事情。