Share Your AWS re:Post Experience - Quick 3 Question Survey
Help us improve AWS re:Post! We're interested in understanding how you use re:Post and its impact on your AWS journey. Please take a moment to complete our brief 3-question survey.
Amazon RDS for MySQL または Amazon RDS for PostgreSQL インスタンスの最大接続数を増やす方法を教えてください。
Amazon Relational Database Service (Amazon RDS) for MySQL または Amazon RDS for PostgreSQL DB インスタンスの最大接続数を増やしたいです。
解決策
注: 最大接続数を増やす前に、既存の構成を最適化するのがベストプラクティスです。
現在の最大接続数を確認する
**max_connections **メトリクスは、RDS for MySQL および RDS for PostgreSQL のデータベース接続最大数を設定します。max_connections のデフォルト値は、Amazon RDS インスタンスが使用するインスタンスクラスに左右されます。使用可能なメモリが多い DB インスタンスクラスでは、より多くのデータベース接続が可能です。
DB エンジンの Amazon RDS DB インスタンスに接続して次のコマンドを実行し、max_connections 値を確認します。
-
RDS for MySQL:
SHOW GLOBAL VARIABLES LIKE 'max_connections';
-
RDS for PostgreSQL:
postgres=> show max_connections;
注: 数式を使用して計算したデフォルトの max_connections 数は、上記のコマンドの出力と少し異なる場合があります。Amazon RDS では、DBInstanceClassMemory の合計から一部のメモリを基盤 OS の操作用に予約するため、この差異が発生します。上記のコマンドは、PostgreSQL エンジン用に予約されているメモリのみを使用し、基盤となるホスト OS 用のメモリは使用しません。
既存の接続を最適化する
max_connections の値を増やす前に、既存の接続数を減らすことができるかどうかを確認してください。クライアント接続の数が max_connections 値を超えると、次のいずれかのエラーが表示されます。
- MySQL: "Too many connections" エラー
- PostgreSQL: "FATAL: 残りの接続スロットは、レプリケートされていないスーパーユーザー接続用に予約されています"
これらのエラーは、Amazon RDS のワークロードが増加したり、テーブルレベルまたは行レベルのロックが発生したりした場合に発生する可能性があります。インスタンスのワークロードは期待どおりに動作する場合は、max_connections パラメータを増やす必要があります。
操作の終了後に、すべてのクライアント接続とアプリケーション接続を閉じたことを確認する
サーバー接続が閉じられていない場合、クライアントアプリケーションは新しい接続を開始します。時間が経つにつれて、これらの新しいサーバー接続により、インスタンスが max_connections 値を超える場合があります。
次のコマンドを実行し、RDS for MySQL DB インスタンスのすべての接続を一覧表示します。
SHOW FULL PROCESSLIST;
次のコマンドを実行し、RDS for PostgreSQL インスタンスの各データベースの接続を確認します。
SELECT datname, numbackends FROM pg_stat_database;
(MySQL のみ) スリープ状態の接続を確認する
wait_timeout や interactive_timeout などの接続タイムアウトパラメータに高い値を設定すると、スリープまたは非アクティブな状態のオープン接続が発生します。高い接続クォータを設定した場合、その接続を使用していなくてもメモリ使用量が多くなる可能性があります。
次のクエリを実行し、RDS for MySQL インスタンス内のアイドル接続を確認します。
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND='Sleep';
次のコマンドを実行し、RDS for MySQL DB インスタンス内のスリープ状態の接続を終了させます。
CALL mysql.rds_kill(example-pid);
**(PostgreSQL のみ) アイドル状態の接続をチェックする **
次のクエリを実行し、RDS for PostgreSQL インスタンス内のアイドル接続を表示します。
SELECT * FROM pg_stat_activity WHERE pid <> pg_backend_pid() AND state in ('idle', 'idle in transaction', 'idle in transaction (aborted)', 'disabled') AND state_change < current_timestamp - INTERVAL '15' MINUTE;
クエリの出力には、状態が 15 分を超えて idle、idle in transaction、idle in transaction (aborted)、disabled であるバックエンドプロセスが表示されます。
次のコマンドを実行し、RDS for PostgreSQL インスタンス内のアイドル接続を終了します。
SELECT pg_terminate_backend(example-pid);
注: アプリケーションのパフォーマンスに必要なアクティブ接続のみを設定するのがベストプラクティスです。アプリケーション構造でアイドル接続が必要な場合は、Amazon RDS Proxy を使用するのがベストプラクティスです。
最大接続数を増やす
注: インスタンスをスケールアップすると、ダウンタイムが発生し、請求方法が変わります。
最大接続数を増やすには、DB インスタンスをメモリ量の多い DB インスタンスクラスにスケールアップするのがベストプラクティスです。max_connections パラメータをデフォルト値より大きくすることは、ベストプラクティスではありません。接続数の増加によりメモリ使用量が多くなると、インスタンスで問題が発生する可能性があります。メモリが不足しているインスタンスはクラッシュする可能性があります。max_connections 値を増やす場合は、Amazon CloudWatch メトリクス FreeableMemory を監視することで、リソースの使用状況を監視します。
ただし、インスタンスに大量の空きメモリがある場合は、max_connections パラメータを手動で変更します。max_connections を調整する前に、パラメータグループの接続制限を調整し、DB インスタンスで使用可能なメモリの変化を考慮します。
DB インスタンスがデフォルトのパラメータグループを使用している場合は、カスタムパラメータグループを作成し、それを使用して max_connections を変更します。カスタム DB パラメータグループを Amazon RDS インスタンスに関連付けてから、インスタンスを再起動します。新しいカスタムパラメータグループを DB インスタンスに関連付けた後に、max_connections パラメータ値を変更します。詳細については、「Amazon RDS DB パラメータグループの値を変更する方法を教えてください」を参照してください。max_connections の値を、各 DB インスタンスで開くと予想される接続の最大数より少し大きい値に設定します。
注: 再起動中に、短時間の停止が発生します。
RDS for MySQL で max_connections を増やすうえでのベストプラクティス
Performance Schema を有効にした場合は、デフォルトの max_connections 設定を使用するのがベストプラクティスです。Performance Schema のメモリ構造は、サーバー設定変数に基づいて自動的にサイズ設定されます。
注: Amazon RDS for MySQL DB インスタンスで Performance Insights を有効にすると、Performance Schema が自動的に有効になります。
ユースケースに合わせて、次の MySQL 接続に関連するパラメータのタイムアウト設定を最適化してください。
- wait_timeout
- interactive_timeout
- net_read_timeout
- net_write_timeout
- max_execution_time
- max_connect_errors
- max_user_connections
これらのパラメータの詳細については、MySQL のウェブサイトで「7.1.8 サーバーシステム変数」を参照してください。
RDS for PostgreSQL で max_connections を増やすうえでのベストプラクティス
ユースケースに合わせて、次の PostgreSQ 接続に関連するパラメータのタイムアウト設定を最適化してください。
- idle_in_transaction_session_timeout
- tcp_keepalives_idle
- tcp_keepalives_interval
- tcp_keepalives_count
これらのパラメータの詳細については、PostgreSQL のウェブサイトで idle_in_transaction_session_timeout (integer) および「19.3.2 TCP 設定」を参照してください。

関連するコンテンツ
- 質問済み 4ヶ月前lg...
- 質問済み 5ヶ月前lg...
- AWS公式更新しました 3年前
- AWS公式更新しました 6ヶ月前