持久连接和max_user_connections

时间:2013-04-23 11:33:32

标签: php mysql pdo

我需要一些信息,以帮助我解决问题。我在PHP中设计了一个应用程序,它查询mysql数据库并以json的形式返回响应。我已经在pylot和apache jmeter中加载测试了json响应,这很好。我使用PHP的PDO使用持久连接。但是,即使连接是持​​久的,我仍然会被拒绝与数据库的连接,并出现以下错误。

[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 );
}

2 个答案:

答案 0 :(得分:0)

如果你的意图是减少连接数,那么使用pconnect是错误的想法,因为它实际上会增加数量。

所以,要解决这个问题,你必须增加mysql server配置中的max_user_connections数量,以匹配apache线程/ nginx worker的数量。

如果无法增加max_user_connections的数量,则不应使用持久连接。

就是这样。

答案 1 :(得分:0)

根据我多年来的个人经验,PHP脚本中的持久连接不会缓解* max_user_connection *错误消息。相反,它们通常是原因

无论是什么原因,连接池都没有像宣传的那样工作。 PHP倾向于打开新连接,即使在那里闲置的连接也是如此。因此,流量相对较低的应用最终会耗尽最大值(并且90%的连接无效)。

如果该功能存在,则必须存在可正常运行的方案。也许问题是它只能在某些平台或SAPI上正常运行。无论如何,我建议您禁用持久连接并监控您的应用。

相关问题