2013-08-24 49 views
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连接。而且,为什么在我上面提到的例子中没有发生这种情况?

一位评论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.

难道不建议这意味着使用与Apache mysql_pconnect?

回答

0

每个数据库连接都会在php进程结束时死掉。所以预计持久连接不会与其他Web线程共享。 mysql_pconnect只能共享为不同类别之间的应用程序运行时的数据库连接,即 你的问题的解决方案是:

  1. 减少对数据库连接超时在MySQL配置在你的应用
  2. 化妆
  3. 接近DB连接自己的DB查询守护进程(但它非常复杂)