次のドキュメントのように、RDSサーバーは最大40の接続を備えています
Magento 1.9を使用していますが、ある時点で最大数に達したため、Webサイトが停止しています。
この問題を解決するための推奨される方法はありますか?
私の理解から、RDSサーバーへの2つのWebサーバー接続がある場合、2つ以上のRDS接続が必要です。
AWS RDS max_connections制限変数はインスタンスタイプに基づいているため、RDSをアップグレードしたり、レプリカをさらに作成したりできます。
Max_connections制限のあるRDSタイプ:
2015年の AWS RDS MySQLインスタンスサイズでのmax_connections による参照
現在のRDS MySQL max_connections設定は{DBInstanceClassMemory/12582880}
のデフォルトです。512MBのRAMでt2.microを使用すると、max_connectionsは(512 * 1024 * 1024)/ 12582880〜= 40など。
各Webサーバーは、RDSへの多くの接続を持つことができます。これは、WebサーバーからのSQL要求に依存します。
max_connections
の値を変更するには、デフォルトのパラメーターポリシーを更新するか、新しいポリシーを作成します。後者を使用することをお勧めします。
max_connections
値を検索お役に立てれば!
Postgresql t3インスタンスの実際の情報(default.postgres10パラメータグループ):
Default.postgres9およびdefault.postgres11についても同様です。
サーバー構成の最大接続数を増やすと問題が解決する可能性がありますが、アプリケーションの構成と実装を確認することを検討する必要があります。
私はMagentoの専門家ではありませんが、最近取り組んでいるプロジェクトで同様の問題があったため、使用しているフレームワークのデフォルトの実装がデータベースへのすべての呼び出しとの接続を作成していることに気付きました。
一部のユーザーには問題が発生しない可能性がありますが、データベースに負荷がかかり、複数の接続で実行できる訪問者やタスクが増えると、 "TOO MANY CONNECTIONS"エラーでサーバーがクラッシュするのを防ぐ最善の方法は、データベースを実装することです接続プール。
これにより、アプリケーションがサーバーが処理できる接続をさらに作成することを防ぎ、アプリケーションをユーザーにクラッシュさせません。接続プールは、接続が利用可能になるまでデータベースにアクセスするための要求のキューを保持し、ユーザーの要求の処理を続行できるようにします。
マルチスレッドのシナリオでは、接続プールはスレッドセーフでなければならないことに注意してください。
MySQLクライアントを使用してRDSインスタンスにログインし、次のクエリを実行します。
SHOW VARIABLES LIKE 'max_connections';
最大40接続ではなく、最大40 RDSインスタンスです。ほとんどの場合、説明に基づいて1つのインスタンスのみを使用しています。
データベースとのセッションが開かれるたびに新しい接続が作成されるため、RDSサーバーへの接続は数千に及ぶ可能性があります。おそらくパフォーマンスの制約に直面しているため、RDSインスタンスを大きくすることを検討する必要があります。