【问题标题】:PHP and mod_dbdPHP 和 mod_dbd
【发布时间】:2010-12-24 03:06:15
【问题描述】:

有人知道使用 mod_dbd 进行数据库连接的 PHP 扩展吗?

我们的应用程序需要访问远程数据库。它曾经是一个使用 mod_dbd 进行数据库连接的 Apache 模块,事务大约需要 200 毫秒。现在我们将应用程序更改为 PHP,同样的事务现在需要超过 600 毫秒。我们希望某种池化可以提高性能。

我们改用mysql_pconnect(),但它的效果不如 mod_dbd。

【问题讨论】:

    标签: php mysql database connection-pooling


    【解决方案1】:

    我知道你可能已经放弃了答案,但是......

    我想你会发现大部分额外的时间是加载和编译 PHP 脚本。如果您之前的应用程序是 apache 模块,那么它会被预编译并始终加载,与 PHP 相比,用 c 语言编写的速度可能非常快。

    尝试使用像 eaccelerator 这样的 php 加速器。它使用共享内存和预编译脚本有时可以显着提高 PHP 应用程序的性能。

    直流

    【讨论】:

    • 我们知道 PHP 加载/编译时间不是决定因素,因为我们只看到没有数据库访问的其他事务增加了几毫秒。
    • 对此我感到很惊讶。您是否进行了一些分析以确定时间丢失的确切位置。 db 是否可能在此期间发生了变化,或者 sql 查询现在不同了?如果这意味着未使用索引或使用了错误的索引,即使是微小的差异也可能导致问题。 mysql_pconnect 通常不如您所希望的那样工作。我一直认为php使用池连接会很好。但 pconnect 是每个进程的连接。如果您不知道,还需要在 php.ini 中启用它。
    【解决方案2】:

    为了从 mod_dbd 的连接池功能中受益,您需要运行线程 MPM,以便多个线程可以共享池中的连接。不幸的是,我确实认为 PHP 不是线程安全的,并且不支持线程 MPM。

    如果你将 mod_dbd 与 pre-fork MPM 一起使用(它不是线程化的,建议用于 PHP),mod_dbd 将创建一个单一的持久数据库连接,与 PHP 中不使用 mod_dbd 的数据库连接相比,它不会给你带来任何巨大的优势.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      • 2015-01-23
      相关资源
      最近更新 更多