2017-03-31 111 views
1

我切换到使用PDO持久连接。我遇到了以下情况:MySQL(正确)在其端点关闭连接(由于处于非活动状态),并且PDO没有启动它,将连接保留在其缓存中,并且从此开始 - 任何尝试使用此连接的结果失败了。PDO是否关闭永久连接?

从我读过的这种行为是“通过设计”(对我来说,看起来PDO正在走出不支持持续连接的方式)。

无论哪种方式,我想知道PDO是否会在之前关闭其连接池。我知道它不检查连接的状态,但是有没有任何种类的定时器或定期清理,可配置或硬编码?

+0

如果您希望保持与数据库的工作连接,您必须不时在PHP中手动ping连接。 MySQL关闭非活动连接的时间可以在MySQL配置中更改 –

+0

有关某些错误消息,您会得到什么? –

+0

@YourCommonSense尝试使用已关闭的连接时出现的错误类似于“MySQL服务器已经消失”。 – obe

回答

1

人们不应该担心连接的持久性。

如果您正在构建一个网页 - 它应该在连接超时之前完成。

如果您有一个长时间运行的应用程序没有触及数据库的时间跨度很长,那么请考虑重新安排代码或关闭并重新打开或发现它已关闭并重新打开。

请注意,连接可能会因为任何原因而关闭 - 许多原因与网络中的打嗝有关。因此,应用程序应该准备好从关闭的连接中恢复,无论它声称如何“持久”。

“连接池”在许多层次上处理 - 在客户端库中,在“代理服务器”中,即使在MySQL服务器中。他们的行为不同。

连接池并不是那么有用。事实上,我追逐的每个性能问题都与不是有关[重新]建立连接所需的时间。

其他RDBMS供应商的连接时间极其缓慢,导致业界发明连接池和持久连接。但MySQL对这种需求不大。

有几个超时可触发关闭连接;您受DBA/SE/Cloud提供程序的限制,即它们设置了哪些值。

PDO只是众多图层中的一个,所以您的问题太窄了。我希望我提供了更广泛的答案。

+1

我很欣赏这种努力和细节,但实际上并没有回答我的问题(这是狭义的,是关于特定的PDO行为(或缺乏))。一些注意事项:启用SSL后,MySQL连接需要更长的时间。尽管我同意每个(或几乎每个)性能问题都可以通过修改设计或编码实践来解决,但我认为在有效的业务情况下,切换到PDO持久连接可以提供所需的边缘,并且优于修改体系结构。 – obe

+0

关于正常处理错误:处理随机事件(可能只是向用户返回一些错误消息,甚至由于各种原因重新连接更可取),以及不可避免地经常出现这些错误(只是因为底层库不会定期重置连接)。 – obe