Amazon Aurora MySQL 互換エディション DB インスタンスに接続しようとすると、"接続数が多すぎます" というエラーが表示されます。DB インスタンスの最大接続数とその変更方法を理解したいです。
簡単な説明
使用可能なすべての接続が他のクライアントによって使用中の場合、"接続数が多すぎます" というエラーが表示されます。**max_connections ** パラメータは、DB インスタンス内の接続の総数を定義します。
この問題を解決するには、まず DB インスタンスで実行されているすべてのスレッドを確認します。次に、DB インスタンスでログ記録を有効にします。最後に、既存の接続を確認し、不要な接続を終了して接続にかかる負荷を軽減します。
たとえば、スリープ状態の接続を終了することはベストプラクティスです。または、DB インスタンスへの最大接続数を増やします。
解決策
DB インスタンスで実行中のスレッドを確認する
まず、DB インスタンスで実行中のすべてのクエリを確認します。
次に、threads_connected の値を確認します。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 を使用するのがベストプラクティスです。これらのパラメータでは、他のクライアントが使用している利用可能な MySQL 接続を正確に表示されます。DatabaseConnections はリモート TCP 接続の合計数を示しますが、スリープ接続やデータベースエンジンが独自の目的で作成したセッションは考慮されません。その結果、DatabaseConnections の値が MySQL スレッドによって実行されている操作の数よりも少なくなる可能性があります。
DB インスタンスでログ記録を有効にする
接続数が増加している問題の根本原因を特定するには、Aurora MySQL 互換 DB インスタンスでログ記録を有効にします。
general_log, slow_query_log または高度な監査ログパラメータをアクティブにします。
DB インスタンスの既存の接続を終了する
DB インスタンスで実行されているユーザーセッションまたはクエリを終了します。
DB インスタンスへの最大接続数を増やす
次のいずれかの方法で、DB インスタンスへの最大接続数を増やします。
max_connections パラメータを増やす
カスタム DB インスタンスパラメータグループを使用して max_connections パラメータに大きな値を設定します。この方法では機能停止は発生しません。ただし、DB インスタンスがデフォルトのパラメータグループを使用している場合は、パラメータグループをカスタムパラメータグループに変更する必要があります。このアクションでは、機能停止が発生します。
max_connection パラメータの例を次に示します。
max_connections = GREATEST({log(DBInstanceClassMemory/805306368)*45},{log(DBInstanceClassMemory/8187281408)*1000})
まず、DB インスタンスの max_connections パラメータの現在値を確認します。DB インスタンスにアタッチされているパラメータグループを確認するか、次のクエリを実行することで確認できます。
select @@max_connections;
DB クラスターにも、DB インスタンスパラメータグループにも max_connections を設定できます。ただし、DB インスタンスのパラメータ設定が DB クラスターのパラメータ設定よりも優先されます。max_connections パラメータは動的であるため、パラメータ値を変更した後にインスタンスを再起動する必要はありません。
各 DB インスタンスクラスにおけるデフォルトの max_connections およびその他の要件の詳細については、「Aurora MySQL DB インスタンスへの最大接続数」を参照してください。
注: Aurora MySQL と Amazon Relational Database Service (Amazon RDS) for MySQL DB インスタンスでは、メモリオーバーヘッドの量が異なります。同じインスタンスクラスを使用する Aurora MySQL と Amazon RDS for MySQL DB インスタンスにおいて、max_connections 値が異なる場合があります。
max_connections に関するベストプラクティスについては、「Amazon RDS for MySQL または Amazon RDS for PostgreSQL インスタンスの最大接続数を増やす方法を教えてください」を参照してください。
インスタンスをスケールアップする
max_connections の最大値を超えた場合は、より多くのメモリを持つ DB インスタンスクラスにインスタンスをスケールアップしてください。
注: DB インスタンスはスケーリング中に停止します。
Amazon RDS Proxy を使用する
アプリケーションのスケーリング機能を向上させるには、Aurora 用 Amazon RDS プロキシを使用します。