ポストマップでたまに下記エラーがでる。
User 'xxxxxxx' has exceeded the 'max_questions' resource (current value: 300000)
どうもMySQLへのリクエスト回数が1時間に30万回を超えると接続できなくなるようだ。
xserverに問い合わせしてみたけれど、その設定は上げられないようなので、解決策は、リクエスト回数を減らす仕組みにするか、専用サーバーを借りるということになりそう。
少し時間が経つと復帰するのだけれど、ここも含めて全部落ちちゃうので、なんとかはしたいな。
resource (current value: 300000)
で検索したら、死語調査がトップにでてきてびっくり。
MySQLのリクエスト回数
はじめまして。
max_questionsを検索してましたら、こちらのブログに辿り着きました。
日本のサイトで意外にこのエラーについて書かれてなかったので、こちらのエントリはとても参考になりました。
こちらにトラバをしたかったんですが、トラバアドレスが見当たらなかったので、コメント投稿で失礼しますね。
これからも度々お邪魔します、では。
max_questionsを検索してましたら、こちらのブログに辿り着きました。
日本のサイトで意外にこのエラーについて書かれてなかったので、こちらのエントリはとても参考になりました。
こちらにトラバをしたかったんですが、トラバアドレスが見当たらなかったので、コメント投稿で失礼しますね。
これからも度々お邪魔します、では。
| 匿名 | 2007/2/7 22:12 |
ユーザー登録システムだったんですね。
上記のコメントは、私でした。
上記のコメントは、私でした。
| endunham | 2007/2/7 22:18 |

| kuwa | 2007/2/8 16:00 |

ランダムでユーザーを選んでも、それが落ちてると繋がらないので、こんな感じにしてみた。これでユーザー5個が全部落ちるまで繋がるのだ。
$i = 0;
while(!$conn && $i < count($dbuser)){
$conn = @mysql_connect($sv,$dbuser[$i],$dbpass);
$i++;
}
mysql_select_db($dbname) or die('Sorry. Server is busy now.');
$i = 0;
while(!$conn && $i < count($dbuser)){
$conn = @mysql_connect($sv,$dbuser[$i],$dbpass);
$i++;
}
mysql_select_db($dbname) or die('Sorry. Server is busy now.');
| kuwa | 2007/3/8 02:48 |
max_questionsで落ちる場合は、以下の判定が使えます。
max_questionsエラーは、クエリーキャッシュが行われた場合は表示されない仕様なので、
キャッシュされないクエリーとして'SELECT 1+1'を使っています。
(詳しくは、http://bugs.mysql.com/bug.php?id=242... )
foreach (range(1,10) as $n){
$db_user_candidate = "mysql_user$n";
$test_conn = @mysql_connect(DB_SERVER, $db_user_candidate, DB_SERVER_PASSWORD);
$test_result = mysql_query('SELECT 1+1',$test_conn);
if (!$test_result){
mysql_close($test_conn);
continue;
}else{
mysql_close($test_conn);
break;
}
}
$db_user = $db_user_candidate; // use $db_user to connect mysql.
上の例だと、事前にmysql_user1〜mysql_user10というユーザを作成しています。
iPowerWebというレンタルサーバで動作確認しました。
max_questionsエラーは、クエリーキャッシュが行われた場合は表示されない仕様なので、
キャッシュされないクエリーとして'SELECT 1+1'を使っています。
(詳しくは、http://bugs.mysql.com/bug.php?id=242... )
foreach (range(1,10) as $n){
$db_user_candidate = "mysql_user$n";
$test_conn = @mysql_connect(DB_SERVER, $db_user_candidate, DB_SERVER_PASSWORD);
$test_result = mysql_query('SELECT 1+1',$test_conn);
if (!$test_result){
mysql_close($test_conn);
continue;
}else{
mysql_close($test_conn);
break;
}
}
$db_user = $db_user_candidate; // use $db_user to connect mysql.
上の例だと、事前にmysql_user1〜mysql_user10というユーザを作成しています。
iPowerWebというレンタルサーバで動作確認しました。
| tane | 2007/4/2 07:47 |

http://d.hatena.ne.jp/irijon/2007011...
Userを複数つくって、接続時に振り分けるみたいな解決法。
これで落ちないハズ。