我在其中一个应用程序中使用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?