2013-04-23 60 views
0

我需要一些信息,只要你能幫我解決一個問題。我設計了一個PHP應用程序,它查詢一個mysql數據庫並將響應作爲json返回。我已經加載測試了在pylot和apache jmeter中的json響應,這很好。我使用PHP的PDO使用持久連接。但是,即使連接是持​​久的,我仍然拒絕連接到數據庫,但出現以下錯誤。持續連接和max_user_connections

[23-Apr-2013 12:11:53] SQLSTATE[42000] [1203] User user already has more than 'max_user_connections' active connections 

我曾經認爲持續連接會減輕這一點,但它看起來像被忽略。任何建議將不勝感激。

$DBH = null; 

$host = "localhost"; 
$db_name = "my_db"; 
$user_name = "user"; 
$pass_word = "password"; 

try { 
    # MySQL with PDO_MYSQL 
    $DBH = new PDO("mysql:host=$host;dbname=$db_name;charset=utf8", $user_name, $pass_word, array(PDO::ATTR_PERSISTENT => true, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")); 
    $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 
catch(PDOException $e) { 
    error_log($e->getMessage(), 0); 
} 
+0

你有更多的apache連接比max_user_connections? (高負載或這樣的事情?) – bwoebi 2013-04-23 11:35:47

+0

滴加持久性將解決問題http://www.mysqlperformanceblog.com/2006/11/12/are-php-persistent-connections-evil/ – Waygood 2013-04-23 11:36:10

回答

0

如果你的意圖是減少連接數,使用pconnect將是錯誤的想法,因爲它實際上會增加數量。

所以,要解決這個問題,您必須增加mysql服務器配置中的max_user_connections數量以匹配apache線程/ nginx工作者的數量。

如果您不能增加max_user_connections的數量,那麼您不應該使用持久連接。

就是這樣。

0

根據我多年來的個人經驗,PHP腳本中的持久連接不會減輕* max_user_connection *錯誤消息。相反,他們通常是原因

不管什麼原因,連接池並不像廣告中那樣工作。即使有空閒的人坐在那裏,PHP也會打開新的連接。結果,一個相對較低的流量應用程序最終耗盡了最大值(並且90%的連接無所作爲)。

如果該功能存在,則必須有一個正常工作的場景。也許問題在於它只能在某些平臺或SAPI上正確運行。無論如何,我建議你禁用持續連接並監控你的應用程序。