Amazon Aurora MySQL 互換エディション DB インスタンスに接続したいのですが、"Too many connections" エラーが発生します。DB インスタンスの最大接続数および、その変更方法を把握したいです。
簡単な説明
クライアント接続数が DB インスタンスの max_connections パラメータ値を超えると、エラーメッセージ "Too many connections" が表示されます。
この問題を解決するには、まず DB インスタンスで実行されているすべてのクエリおよびスレッドを確認します。次に、DB インスタンスでログ記録を有効にします。既存の接続を見直し、不要な接続を終了させ、接続負荷を軽減します。さらに、MySQL 接続パラメータを調整します。問題が解決しない場合は、DB インスタンスへの最大接続数を増やします。
解決策
DB インスタンスで実行中のすべてのクエリとスレッドを確認する
DB インスタンスで実行中のすべてのクエリを確認します。次に、Threads_Connected 値を参照し、開いている接続数を確認します。詳細については、MySQL のウェブサイトで Threads_connected を参照してください。
MySQL 5.7 では、次のコマンドを実行します。
mysql> SELECT variable_value AS Threads_Connected FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE variable_name='threads_connected';
MySQL 8.0 では、次のコマンドを実行します。
mysql> SELECT variable_value AS Threads_Connected from performance_schema.global_status where VARIABLE_NAME = 'threads_connected';
注: Aurora は管理ユーザーである rdsadmin でデータベースに接続する場合があるため、threads_connected 値は max_connections 値よりも高くなる可能性があります。
DatabaseConnections ではなく、threads_connected または information_schema.processlist の使用をおすすめします。threads_connected パラメータおよび information_schema.processlist パラメータは、他のクライアントが使用する、使用可能な MySQL 接続数を表示します。
DatabaseConnections は、リモート TCP 接続の合計数を表示します。データベースエンジンが、それ自体の目的で作成するスリープ接続またはセッションの数は含まれません。したがって、DatabaseConnections の値は、MySQL スレッドが実行する操作の数よりも低くなる可能性があります。
DB インスタンスでログ記録を有効にする
接続数増加の根本原因を特定するには、Aurora MySQL 互換 DB インスタンスでログ記録を有効にします。general_log、slow_query_log または Advanced Auditing ログパラメータを有効にします。
DB インスタンス上の不要な接続を終了する
DB インスタンスで実行中の、不要なユーザーセッションとクエリを rds_kill コマンドおよび rds_kill_query コマンドを実行して終了します。
MySQL 接続パラメータを調整する
目標値に応じて、DB インスタンスで次の MySQL 接続パラメータを調整します。
- wait_timeout
- interactive_timeout
- net_read_timeout
- net_write_timeout
- max_execution_time
- max_connect_errors
- max_user_connections
上記の各パラメータに関する詳細については、MySQL のウェブサイトで「サーバーシステム変数」を参照してください。
DB インスタンスへの最大接続数を増やす
接続パラメータを調整しても問題が解決しない場合は、DB インスタンスへの最大接続数を増やします。DB インスタンスでの現在の max_connections 値を取得するには、その DB インスタンスにアタッチされたパラメータグループを参照するか、次のクエリを実行します。
select @@max_connections;
Aurora MySQL 互換インスタンスと Amazon Relational Database Service (Amazon RDS) for MySQL DB インスタンスでは、メモリオーバーヘッドの量が異なります。同じインスタンスクラスを使用する Aurora MySQL 互換インスタンスと Amazon RDS for MySQL DB インスタンスにおいて、max_connections 値は異なる場合があります。
インスタンスクラスの最大接続数を判断するには、次の式を使用します。
max_connections = GREATEST({log(17179869184/805306368)*45},{log(17179869184/8187281408)*1000})
注: 上記の例は、16 GiB のメモリを搭載した Aurora MySQL 互換 db.r8g.large インスタンスを対象としています。DBInstanceClassMemory は 17179869184 バイトです。max_connections の現在値は 1000 です。
結果の例:
max_connections = GREATEST(195.56,1000) = 1000
注: この場合、16 GiB のメモリを搭載した db.r8g.large インスタンスクラスの最大接続数はデフォルト値と同じです。
max_connections パラメータを増やす
注: max_connections パラメータをデフォルト値より大きくすることは推奨されません。代わりに、DB インスタンスをスケーリングしてください。
DB インスタンスをスケーリングせず、max_connections の値を増やす場合は、次の手順を実行します。
- カスタム DB インスタンスパラメータグループを作成します。
- パラメータグループを DB インスタンスに関連付けます。
- max_connections パラメータ値を増やします。
注: max_connections 値を増やす際に、中断は発生しません。
インスタンスをスケールアップする
max_connections パラメータの最大値を超過した場合は、DB インスタンスクラスのスケーリングをおすすめします。DB インスタンスをスケーリングする際、サービスが停止する可能性があります。
max_connections パラメータの調整に関するベストプラクティスを実施する
DB クラスターでバッファプールとクエリキャッシュの設定を変更した場合は、DB インスタンスで使用可能なメモリの増減を考慮して接続クォータを調整します。
max_connections パラメータを、各 DB インスタンスで開かれると想定する最大接続数より少し大きい値に設定します。
Performance Insights が有効な場合、Performance Schema は自動的に有効化されます。Performance Schema が有効な場合は、max_connections にはデフォルト値を使用することをおすすめします。Performance Schema のメモリ構造は、サーバー構成に基づいて自動的にサイズ設定されます。
重要: 2025 年 11 月 30 日に Performance Insights のサポートは終了します。2025 年 11 月 30 日までに、Database Insights の Advanced モードにアップグレードしてください。アップグレードしない場合、Performance Insights を使用する DB クラスターは、デフォルトで Database Insights の Standard モードを使用します。実行計画とオンデマンド分析は、Database Insights の Advanced モードでのみサポートされます。クラスターがデフォルト設定により Standard モードを使用する場合、コンソールでこれらの機能を使用できない可能性があります。Advanced モードの有効化については、「Amazon RDS で Database Insights の Advanced モードを有効にする」および「Amazon Aurora で Database Insights の Advanced モードを有効にする」を参照してください。
Amazon RDS プロキシを使用する
エラーが解消されない場合は、Amazon RDS Proxy for Aurora を使用するとアプリケーションのスケーリング能力を改善できます。
関連情報
Amazon RDS for MySQL インスタンスまたは Aurora MySQL 互換インスタンスで発生する エラーの解決方法を教えてください"Got an error reading communication packets"