-1

大家好,我是新来的,这是我的第一篇文章。我有一个带有 log4php 的项目,但我无法建立持久连接。

是否可以通过log4php中的配置与LoggerAppenderPDO建立持久连接(pconnect)?有可能吗?

我尝试将“选项”添加到以下配置中,但它不起作用:

array(
    'appenders' => array(
        'default' => array(
            'class' => 'LoggerAppenderPDO',
            'params' => array(
                'dsn' => "mysql:host=localhost;dbname=logdb",
                'user' => 'logger',
                'password' => 'admin',
                'options' => array(PDO::ATTR_PERSISTENT => true),
                'table' => 'log4php'
            )
        )
    ),
    'rootLogger' => array(
        'appenders' => array('default'),
    ),
);

有人可以帮帮我吗?我真的很感激。

4

1 回答 1

0

问题是:“为什么需要持久连接?”

Log4PHP 只会在请求期间尝试创建一个用于记录的连接,因此持久连接在请求期间不会产生任何影响。

第二件事是:只有当 PHP 作为 Apache 模块运行时,才能创建持久连接。所有其他情况都不支持它们。

第三:如果使用不当,持久连接弊大于利。一方面是对于最终运行的每个 apache 子节点,数据库必须提供永久连接能力。因此,如果您的 Apache 允许 100 个子节点,那么您的数据库必须支持至少 100 个并发连接,仅用于日志记录。而且您可能需要更多连接,因为您不仅要进行日志记录,还要对数据库进行一些有用的操作。另一点是,如果您的脚本崩溃,则连接保持打开状态,这可能意味着未释放锁定或未取消事务。最后但并非最不重要的一点是:重新使用持久连接会在它留下的状态下使用它——这可能不是你想象的那样。

第四:与 MySQL 的持久连接并不比常规连接快多少,如果有的话。MySQL 经过优化以支持快速连接时间(对于其他数据库可能不是这样)。

所以最后,使用持久连接的动机并不多。如果您出于模糊的“性能原因”坚持使用它们,您应该通过衡量它们对您的应用程序性能的影响来证明它们是值得的。

更新:我想我可以添加这个性能比较状态,即使用持久连接不会以任何方式提高性能。您的里程可能仍会有所不同。

于 2013-10-01T19:17:07.393 回答