最近、トラフィックが多いときに mySQL の「接続が多すぎます」というエラーが発生するようになりました。私の Rails アプリは、共有ホスト上に 2 つのインスタンスを持つ mongrel クラスターで実行されます。それを促進している可能性のある最近の変更:
- サイトへのトラフィックが増加しました。現在、1 日平均約 4K ページです。
- データベースのサイズが増加しました。私の最大のテーブルには最大 100K 行あります。一部の関連付けは、最悪の場合、数百のインスタンスを返す可能性がありますが、ほとんどの関連付けははるかに少ないものです。
- 一部のアクションでデータベース呼び出しの数とサイズを増やす機能をいくつか追加しました。
データベース呼び出しの削減、SQL クエリの最適化、欠落しているインデックスの追加、熱心な読み込みのための :include の使用について、コード レビューを行いました。ただし、私のメソッドの多くは、依然として 5 ~ 10 個の個別の SQL 呼び出しを行っています。ほとんどのアクションの応答時間は約 100 ミリ秒ですが、最も一般的なアクションの 1 つは平均 300 ~ 400 ミリ秒であり、ランダムにピークが 1000 ミリ秒を超えるアクションもあります。
エラーはランダムに発生するように見えるか、少なくとも、呼び出されているアクションまたはアクセスされているデータに関連するパターンが表示されないため、ログはほとんど役に立ちません。
mongrel インスタンスを追加することでエラーを軽減できますか? または、サーバーによって mySQL 接続が制限されているため、トラフィックを分割するプロセスの数とは関係ありませんか?
これは私のコーディングの問題である可能性が高いですか、それとも共有サーバーの容量を増やす/負荷を減らすようにホストに圧力をかける必要がありますか?