2009-07-14 18 views
1

私はプロダクションサーバー上のエラーをデバッグしようとしています。時々MySQLが諦め、私のWebアプリケーションはデータベースに接続できません( "接続が多すぎます"というエラーが出ています)。サーバは、(挿入、50の000行をループし、重複など削除)数千の訪問者昼と夜に、私は時々、いくつかの重いMySQLの作業を行い、いくつかのcronジョブを実行しているを持っているMySQLの「接続が多すぎます」

  • サーバーの実行を両方
  • MySQLは
  • ウェブアプリは

PHPをかなり標準ベースの構成(最大接続数)が使用されている同じマシン上でApacheとMySQLはどのようにこの問題をデバッグするのですか?どのログファイルを読むべきですか? 「邪悪な」スクリプトを見つけるにはどうすればいいですか?奇妙なのは、MySQLサーバを再起動すると、再び動作することです。

編集:

  • 異なるアプリケーション/スクリプトそのデータベース(主にmysqliのもZend_Dbの)に異なるコネクタを使用している

答えて

2

まず、あなたの接続を監視するために(それをグーグル)innotopを使用しています。これはInnoDBの統計に合わせたものですが、トランザクションに含まれていないものも含めてすべての接続を表示するように設定できます。

それ以外の場合は、次の点にご注意ください。Webアプリケーションで永続的な接続/接続プールを使用する。あなたの最大接続数を増やしてください。

2

これは必ずしも長時間実行されるSQLクエリではありません。

ページの開始時に接続を開くと、クエリが実行されていなくても、PHPスクリプトが終了するまで接続が解放されません。

あなたのページにいくつかの統計情報を追加して、最も遅いものと最もヒットしたものを見つけ出す必要があります。可能であれば、接続を早期に終了することが役立ちます。

2

永続的な接続(mysql_pconnect)を使用すると、MySQL接続を常に開いたり閉じたりすることによるサーバーの負荷を軽減できます。

0

mysqlサーバでプロセスのリストを取得するには、おそらくmysqladmin processlistを使用するのがよいでしょう。次のステップは、あなたが見つけたものに依存します。

関連する問題