【问题标题】:PDO Connection BehaviourPDO 连接行为
【发布时间】:2014-05-30 14:17:29
【问题描述】:

我想知道的是 PDO 的基本连接行为。我将从问题开始。在工作中,我们与 MySQL 数据库有很多 CONNECTED 连接,现在我认为只要 PDO 对象被破坏(未设置或设置为 null),连接就会关闭,但这些连接似乎保持打开状态。在 MySQL“显示完整进程列表”中,似乎有超过 100 个连接处于“命令”睡眠状态。我正在尝试解决这是否是因为“interactive_timeout”默认设置为 28800(不确定是秒还是毫秒)http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_interactive_timeout,或者我可以对 PDO 做些什么,比如在session 而不是调用存储在包含文件中的变量中的相同实例。

任何帮助将不胜感激。

【问题讨论】:

  • 将 pdo 对象序列化到会话中是没有意义的。与其他数据库相比,mysql 的连接协议非常快。通过整个序列化/反序列化序列可能比首先开始一个新连接更昂贵。同样,当您序列化时,您仍然会丢失任何正在进行的交易,因为它仍然会切断连接。
  • 看起来你喜欢在工作中使用持久连接
  • 速度没有问题,根据mysql“完整进程列表”,持续打开的连接处于睡眠状态

标签: php mysql database pdo connection


【解决方案1】:

PDO 连接绝对没有什么特别之处。它只是一个常规的套接字连接,以脚本开始并在结束时关闭。

您在工作中遇到的问题可能是由 persistent connect 断层引起的,但它并不特定于 PDO,但可通过 mysql API 提供给所有驱动程序。无论脚本的生命周期如何,它都是保持连接打开的唯一目的。但是,不要误会该功能的性质:从脚本的角度来看,它始终是全新的连接。

【讨论】:

  • 我们不使用持久连接,除非它们默认启用。我认为这是一个需要在 PDO 中启用的选项
  • 是的,它需要。然后你必须调查是什么让这些连接保持打开状态。
猜你喜欢
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 2010-09-20
  • 2011-09-09
  • 2013-08-19
  • 2013-03-27
相关资源
最近更新 更多