2013-08-24 51 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查詢守護進程(但它非常複雜)