0

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

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

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

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

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

这里的评论之一是:

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 一起使用?

4

1 回答 1

0

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

  1. 减少 MySQL 配置中数据库连接的超时
  2. 关闭应用程序中的数据库连接
  3. 为数据库查询制作自己的守护进程(但它非常复杂)
于 2013-08-24T19:52:59.123 回答