大家好我是新来的,这是我的第一篇文章。我有一个使用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'),
),
);
有人可以帮帮我吗?我真的很感激。
答案 0 :(得分:0)
问题是:“为什么要持久连接?”
Log4PHP将仅在请求期间尝试创建一个用于记录的连接,因此持久连接在请求期间不会产生任何差异。
第二件事是:只有PHP作为Apache模块运行才能创建持久连接。所有其他情况都不支持它们。
第三:如果使用不正确,持久连接弊大于利。一个方面是对于最终运行的每个apache子,数据库必须提供永久连接能力。因此,如果Apache允许100个子节点,则数据库必须支持至少100个并发连接才能进行日志记录。而且您可能需要更多连接,因为您不仅要进行日志记录,还要对数据库进行一些有用的操作。另一点是,如果您的脚本崩溃,连接将保持打开状态,这可能意味着未释放锁定或未取消事务。最后但并非最不重要的一点:重新使用持久连接会在它剩下的状态下使用它 - 这可能不是你想象的那样。
第四:与MySQL的持久连接并不比常规连接快得多,如果有的话。 MySQL经过优化,可以支持快速连接时间(对于其他数据库可能不是这样)。
所以最后,使用持久连接的激励并不多。如果您坚持使用它们是出于模糊的“性能原因”,那么您应该通过衡量它们对您的应用程序性能的影响来证明它们是值得的。
更新:我想我可以添加this performance comparison states that using persistent connections does NOT improve performance in any way。您的里程可能会有所不同。