【发布时间】:2013-10-08 14:13:52
【问题描述】:
我正在使用 PDO 连接到 Postgresql 数据库,使用 PDO::ATTR_PERSISTENT 属性可以显着加快应用程序的速度。
但是我遇到了一个问题,经过调试,发现在最后一个SQL查询执行后大约2小时11分钟后,与DB的连接就死了! 故障出在服务器之间的防火墙上,但是网络人员拒绝将限制设置为高于 24 小时(说这会减慢防火墙速度),而我需要禁用它。
我无法通过简单的使用来刷新池连接,因为我无法控制或确保所有池连接都在一个旋转的基础上提供服务,确保没有连接会死(导致稍后在服务器上有负载时难以调试问题,并且一些连接已死,而另一些连接还活着)。
那么,有人对这个问题有什么建议吗?除了强制网络人员为这两个特定服务器禁用这个愚蠢的超时规则之外,如何保持池连接处于活动状态?
谢谢!
【问题讨论】:
-
我完全不明白这个问题。死连接有什么问题?你说的是在线脚本,还是某种恶魔,永久连接到数据库?
-
@YourCommonSense 了解持久连接php.net/manual/en/pdo.connections.php
-
@Marek 好的,我读到了。下一步是什么?你能回答我问 OP 的问题吗?
-
@YourCommonSense OP 解释得很好。 Postgresql 有一个连接池(TCP/IP 连接)。如果一个连接超过 2 小时没有使用,它就会从防火墙的表中删除,它是死的。在使用连接之前,客户端不会意识到这一点,因此客户端有责任处理这种情况并重新连接。
标签: php pdo database-connection connection-pooling php-pgsql