2016-04-05 10 views
0

を固定私は、MySQLからこのエラーを取得しています: 「データベースに接続できません[ユーザーxyzxyzはすでに 『MAX_USER_CONNECTIONS』アクティブな接続よりも多く持っている」=MAX_USER_CONNECTIONSエラーの意味と

私の現在のMAX_USER_CONNECTIONSを50、と私は実行していますVPSで

最初のステップ(私はそれが助けてくれるはずです)を読んで私は自分のサイトの操作の大部分であるすべてのバックグラウンド操作を処理する新しいmysqlユーザーを作成しました。実際のサイトのユーザーから生成されただけのmysqlコールを処理 -

  • xyzxyz_backgrounds-取扱バックグラウンド処理
  • xyzxyz_users:だから今、私は2人のユーザーがいます。その変化のユーザー後も

はなって報告されている「すでにxyzxyz_users 『を有しMAX_USER_CONNECTIONS』アクティブな接続よりも」

これは私が実行している忙しいサイトですが、私は間違いを持っ​​ていない場合、私は疑問に思いますこれを引き起こしているコードで。

「SHOW PROCESSLIST」と「SHOW FULL PROCESSLIST」を実行しようとしましたが、返される行は2行しか表示されません(show processlistの1つのSLEEPと1つのQUERY)。

として、私の知る、私は永続的なMySQL接続のいずれかのタイプを持っていない以下

は私が(「必要」を使用して)各PHPファイルの先頭にMySQLの接続を開始使うコードです

if (!(isset($use_pdo))) { 
    $conn_mls = mysql_connect($dbhost, $dbuser, $dbpass); 
    mysql_select_db($dbname); 
    mysql_query("SET NAMES utf8"); 

}else{ 
    $options = array(
     PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', 
    ); 
    $dsn = "mysql:host=127.0.0.1;dbname=$dbname;charset=utf8"; 
    $conn = new PDO($dsn, $dbuser , $dbpass , $options); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

}; 

私はmysqliを使用していますが、永続的な接続を使用しているとは思わない場合は、必要に応じてコードを投稿できます。

いつmysqlが新しい接続を作成しますか? max_user_connections = 50の場合、同時に50人のユーザーしかWebサイトに接続できないということですか? コード内の接続を手動で閉じる必要がありますか?それともmysqlがそれを処理しますか?

+0

なぜPDOとmysqliの両方を使用していますか?このページ:http://php.net/manual/en/pdo.connections.phpが役に立つかもしれません。 –

+0

私はそうしているとしましょう。違いはありますか? pdo、msqli、legacy mysqlとは別の接続がありますか?私のすべてのページがpdoで、100人がサイトにアクセスしようとしている場合、私はまだこのエラーを受け取りますか? – hershkoy

答えて

0

私はいつでも永続的なPDO接続を実装することをお勧めします(時間を予算化できる場合)。必要に応じて最大接続数を増やしてください。これにより、アプリケーションの一貫性と可読性も向上します。

私は私のコメントで提供されるリンクが説明するように、PDOは、持続的な接続をキャッシュ:

「多くのWebアプリケーションは、持続的な接続データベースサーバへ を作るの恩恵を受ける永続的な接続が最後の で閉鎖されていません。そのスクリプトはキャッシュされ、別のスクリプトが同じ資格情報を使用して接続を に要求したときに再利用されます。 高速ウェブで応用。"

これは接続の問題を解決するとは確信していませんが、複数のユーザーが同じ資格情報を持っているかどうかによってパフォーマンスが向上し、接続の問題に良い影響を与える場合があります。もちろん、すべての同時ユーザーをサポートする最大接続数を増やすことができれば、PDO持続接続を実装せずに最大接続数を増やすことができます。