【问题标题】:Performance impact of not closing propel connection不关闭推进连接的性能影响
【发布时间】:2012-09-11 08:12:35
【问题描述】:

我正在为一个项目使用 symfony 1.4/propel 1.4,该项目是由其他开发人员早些时候制作的。在该项目中,使用以下代码进行推进连接

$con = Propel::getConnection(UsersPeer::DATABASE_NAME, Propel::CONNECTION_WRITE);

但是它永远不会关闭连接使用

Propel::close();

我刚刚搜索了1500多个这样的打开连接事件,我猜它们都没有关闭连接。

我知道关闭连接总是很好的做法,但在目前的情况下,我似乎无法解决所有问题,因为修复所有事件肯定需要很多时间,可能需要一整天。所以现在我很困惑是否应该解决这个问题。如果我让它这样,它会对性能产生任何影响吗?

编辑:仅供参考

本题第二部分Use of closing database connection in php

【问题讨论】:

  • 他们每次都连接到 Propel 吗?!从理论上讲,它是由 Symfony 完成的,您不必管理打开/关闭。顺便说一句,我猜如果你不告诉它显式地做,PHP 会在每个脚本的末尾关闭连接。这通常在__destruct 对象上执行。见this question/answers
  • 并非总是如此,但主要是在事务操作的情况下。但是,我也发现很少有地方发生简单查询。

标签: performance symfony1 symfony-1.4 propel database-performance


【解决方案1】:

如果有的话,显式关闭连接可能损害性能。 PDO 通常缓存从一个请求到下一个请求的连接,合理假设下一个请求将使用相同的凭据。

编辑:阅读docs,在我看来 PDO::ATTR_PERSISTENT 连接被缓存,无论是否尝试关闭它们,所以你最好不要打扰。

【讨论】:

  • 第一段是不是明确表示“不应关闭连接”?如果是,Propel::close() 的推荐用法是什么
  • 恕我直言,我认为你真的不需要调用 close()。而且我不会担心一遍又一遍地调用 getConnection() - Propel 有它自己的连接缓存,所以你每次都得到相同的连接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 2013-02-17
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
相关资源
最近更新 更多