我转而使用PDO持久连接。我遇到了MySQL(正确)在其端部关闭连接的情况(由于不活动)并且PDO没有接收它,保持连接在其缓存中可用,并且从那时起 - 任何尝试使用此连接结果在失败中。
从我所看到的这个行为是“按设计”(对我来说,看起来PDO不会支持持久连接)。
无论哪种方式,我想知道PDO是否永远关闭其池中的连接。我知道它没有检查连接的状态,但有没有任何类型的计时器或定期清理,可配置或硬编码?
答案 0 :(得分:1)
人们不应该担心连接的持久性。
如果您正在构建网页 - 它应该在连接超时之前很久就完成。
如果您的长时间运行的应用程序没有触及数据库以进行大量时间跨度,那么请考虑重新排列代码或关闭并重新打开或发现它已关闭并重新打开。
请注意,连接可能由于很多原因而关闭 - 许多原因与网络中的打嗝有关。因此,您的应用程序应该准备好从已关闭的连接中恢复,无论它声称是多么“持久”。
“连接池”在许多级别处理 - 在客户端库中,在“代理服务器”中,甚至在MySQL服务器中。他们都采取不同的行动。
连接池并不是那么有用。实际上,我追赶的每个性能问题而不是与重新建立连接所花费的时间有关。
其他RDBMS供应商的连接时间非常缓慢,导致业界发明连接池和持久连接。但MySQL几乎没有必要这样做。
有几个超时可以触发关闭连接;您受DBA / SE / Cloud提供商的支配,关于它们设置的值。
PDO只是众多层中的一个,所以你的问题太狭隘了。我希望我提供了更广泛的答案。