【问题标题】:Persistent DB Connections aren't Getting Reused持久的数据库连接没有被重用
【发布时间】:2013-08-24 19:23:07
【问题描述】:

我在我的一个应用程序中使用 phpgacl 库进行授权。这个库正在使用 mysql_pconnect 连接到数据库。问题是连接没有被重用,有时整个应用程序因错误太多连接而崩溃。 我没有太多并发用户,因此增加 mysql 中的最大连接数不会永久解决问题。 我做了一个简单的测试来简化问题。我写了一个简单的php脚本/var/www/a.php

<?
mysql_pconnect('localhost', 'root', 'root');
?>

当我第一次点击localhost/a.php 时,我在 mysql 进程列表中看到一个与数据库的连接。 当我第二次点击该链接时,我希望该连接能够被重用。但是,事实并非如此。创建了一个新连接,我看到两个连接处于睡眠状态。每次点击链接时计数都会增加。

当我重新启动 apache 时,所有这些连接都会关闭。

我想知道 php mysql_pconnect 是如何工作的,以及它是如何使用之前建立的 mysql 连接的。而且,为什么在我上面提到的示例中没有发生这种情况?

其中一个 cmets here 写道:

You are probably using a multi-process web server such as Apache. Since database connections cannot be shared among different processes a new one is created if the request happen to come to a different web server child process.

这是否意味着不建议使用 mysql_pconnect 和 apache?

【问题讨论】:

    标签: php mysql database-connection mysql-connect mysql-pconnect


    【解决方案1】:

    每个数据库连接都会随着 php 进程的结束而终止。所以预计持久连接不会与其他网络线程共享。 mysql_pconnect 只能在不同类之间共享数据库连接以用于应用程序运行时,即 您的问题的解决方案是:

    1. 减少 MySQL 配置中数据库连接的超时时间
    2. 关闭应用中的数据库连接
    3. 为数据库查询创建自己的守护进程(但非常复杂)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 2010-09-21
      • 2015-06-09
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多