RDS Proxy 接続に関する考慮事項
接続設定の構成
RDS Proxy の接続プーリングを調整するには、以下の設定を変更します。
IdleClientTimeout
プロキシがクライアント接続を閉じるまでの間、接続がアイドル状態を継続できる時間を指定できます。デフォルトは 1,800 秒 (30 分) です。
クライアント接続がアイドル状態と見なされるのは、前のリクエストの完了後、新しいリクエストが指定時間内にアプリケーションから送信されない場合です。基となるデータベース接続は開いたままで、接続プールに返されるため、新しいクライアント接続で再利用できます。プロキシで古い接続を事前に削除する場合は、クライアント接続でのアイドル状態のタイムアウトを短くすることを検討してください。ワークロードが頻繁にプロキシとの接続を確立する場合には、接続コストを節約するために、クライアント接続でのアイドル状態のタイムアウトを長くすることを検討してください。
この設定は、RDS コンソール内の [Idle client connection timeout] (アイドルクライアントの接続タイムアウト) フィールドと、AWS CLI および API の IdleClientTimeout
設定で行います。RDS コンソールで [Idle client connection timeout] (アイドルクライアントの接続タイムアウト) フィールドの値を変更する方法については、「AWS Management Console」を参照してください。IdleClientTimeout
設定の値を変更するには、CLI コマンドの modify-db-proxy または API の ModifyDBProxy オペレーションを参照してください。
MaxConnectionsPercent
RDS Proxy がターゲットデータベースに対して確立できる接続の数を制限できます。上限は、データベースで使用可能な最大接続数に対する割合 (%) で指定します。この設定には、RDS Proxy コンソールの [接続プールの最大接続数] フィールド、または AWS CLI と API の MaxConnectionsPercent
パラメータを使用します。
MaxConnectionsPercent
値はターゲットグループが使用する Aurora DB クラスターの max_connections
設定に対するパーセンテージで表されます。プロキシは、これらの接続のすべてを事前に作成するわけではありません。この設定では、ワークロードが必要とするときに、プロキシがこれらの接続を確立できます。
例えば、登録済みのデータベースターゲットの max_connections
が 1000 に設定され、MaxConnectionsPercent
が 95 に設定されている場合、RDS Proxy はそのデータベースターゲットへの同時接続の上限として 950 接続を設定します。
ワークロードが許容されるデータベース接続の最大数に達したときによく見られる副作用として、全体的なクエリ待ち時間が増加し、DatabaseConnectionsBorrowLatency
メトリクスも増加します。DatabaseConnections
メトリクスと MaxDatabaseConnectionsAllowed
メトリクスを比較することで、現在使用中のデータベース接続数と許可されているデータベース接続の合計数を監視できます。
このパラメータを設定する場合は、次のベストプラクティスに注意してください。
ワークロードパターンの変化に備えて、接続に十分な余裕を持たせてください。このパラメータは、最近監視した最大使用量より少なくとも 30% 高く設定することをお勧めします。RDS Proxy はデータベース接続クォータを複数のノードに再配分するため、内部容量の変更に伴い、借用レイテンシーの増加を避けるために、少なくとも 30% の余裕を持たせて接続を追加することが必要になる場合があります。
RDS Proxy は、高速フェイルオーバー、トラフィックルーティング、内部オペレーションをサポートするために、アクティブモニタリング用に一定数の接続を予約します。
MaxDatabaseConnectionsAllowed
メトリクスには、これらの予約済み接続は含まれません。これはワークロードの処理に使用できる接続の数を表し、MaxConnectionsPercent
設定から算出された値よりも小さい場合があります。推奨される
MaxConnectionsPercent
の最小値は次のとおりです。db.t3.small: 100
db.t3.medium: 55
db.t3.large: 35
db.r3.large またはそれ以上: 20
読み取りノードを持つ Aurora クラスターのように RDS Proxy に複数のターゲットインスタンスが登録されている場合は、登録されている最小のインスタンスに基づいて最小値を設定します。
RDS コンソールの [Connection pool maximum connections] (接続プールの最大接続数) フィールドの値を変更する方法については、「AWS Management Console」を参照してください。MaxConnectionsPercent
設定での値の変更については、CLI コマンドの「modify-db-proxy-target-group」、または API オペレーションの「ModifyDBProxyTargetGroup」を参照してください。
重要
DB クラスターが、書き込み転送が有効になっているグローバルデータベースの一部である場合は、プロキシの MaxConnectionsPercent
値を書き込み転送に割り当てられたクォータだけ減らします。書き込み転送クォータは DB クラスターパラメータ aurora_fwd_writer_max_connections_pct
で設定されます。書き込み転送の詳細については、「Amazon Aurora Global Database の書き込み転送を使用する」を参照してください。
データベース接続での制限の詳細については、「Aurora MySQL DB インスタンスへの最大接続数」、ならびに「Aurora PostgreSQL DB インスタンスへの最大接続数」を参照してください。
MaxIdleConnectionsPercent
RDS Proxy が接続プール内にアイドル状態で保持できる、データベース接続の数を制御できます。デフォルトでは、RDS Proxy は、接続に対するアクティビティが 5 分間なかった場合に、プール内のデータベース接続をアイドル状態とみなします。
MaxIdleConnectionsPercent
値は、RDS DB インスタンスターゲットグループの max_connections
設定のパーセンテージとして表されます。そのデフォルト値は MaxConnectionsPercent
の 50% で、上限は MaxConnectionsPercent
の値で指定します。例えば、MaxConnectionsPercent
が 80 の場合、MaxIdleConnectionsPercent
のデフォルト値は 40 です。
値を大きくすると、プロキシではアイドル状態のデータベース接続の大部分を開いたままにします。値を小さくすると、プロキシではアイドル状態のデータベース接続の大部分を閉じます。ワークロードが予測できない場合は、MaxIdleConnectionsPercent
には大きな値を設定するように検討してください。これにより、RDS Proxy では多数の新しいデータベース接続を開くことなく、アクティビティの急増に対応できるようになります。
この設定には、AWS CLI と API における DBProxyTargetGroup
の MaxIdleConnectionsPercent
設定を使用します。MaxIdleConnectionsPercent
設定での値の変更については、CLI コマンドの「modify-db-proxy-target-group」、または API オペレーションの「ModifyDBProxyTargetGroup」を参照してください。
データベース接続での制限の詳細については、「Aurora MySQL DB インスタンスへの最大接続数」、ならびに「Aurora PostgreSQL DB インスタンスへの最大接続数」を参照してください。
ConnectionBorrowTimeout
RDS Proxy がタイムアウトエラーを返す前に、接続プール内のデータベース接続が使用可能になるまで待つ時間を指定できます。デフォルト値は 120 秒です。この設定値は、接続数が最大値に達し、接続プールで利用可能な接続がなくなった場合に適用されます。また、例えば、フェイルオーバー操作が進行中であるなどの理由で、リクエストを処理するために使用できる適切なデータベースインスタンスがない場合にも適用されます。この設定を使用すると、アプリケーションコードでクエリタイムアウトを変更しなくても、アプリケーションに最適な待機期間を設定できます。
この設定には、RDS Proxy コンソールの [接続借用タイムアウト] フィールド、または AWS CLI と API における DBProxyTargetGroup
の ConnectionBorrowTimeout
設定を使用します。RDS コンソールの [Connection borrow timeout] (接続借用タイムアウト) フィールドの値を変更する方法については、「AWS Management Console」を参照してください。ConnectionBorrowTimeout
設定での値の変更については、CLI コマンドの「modify-db-proxy-target-group」、または API オペレーションの「ModifyDBProxyTargetGroup」を参照してください。
クライアント接続とデータベース接続
アプリケーションから RDS Proxy への接続は、クライアント接続と呼ばれます。プロキシからデータベースへの接続はデータベース接続です。RDS Proxy を使用する場合、クライアント接続はプロキシで終了し、データベース接続は RDS Proxy 内で管理されます。
アプリケーション側の接続プーリングは、アプリケーションと RDS Proxy 間で繰り返し接続を確立する回数が減るというメリットを提供します。
アプリケーション側の接続プールを実装する前に、以下の設定について考慮してください。
-
クライアント接続の最大有効期間: RDS Proxy では、クライアント接続の最大有効期間は 24 時間です。この値は設定できません。クライアント接続が予期せず切断されないように、プールは最大接続時間を 24 時間未満に設定してください。
-
クライアント接続アイドルタイムアウト: RDS Proxy は、クライアント接続の最大アイドル時間を適用します。予期せぬ接続の切断を避けるため、RDS Proxy のクライアント接続アイドルタイムアウト設定よりも低い値のアイドル接続タイムアウトをプールに設定します。
アプリケーション側の接続プールに設定されるクライアント接続の最大数は、RDS Proxy の max_connections 設定に制限される必要はありません。
クライアント接続プールにより、クライアント接続の時間が長くなります。接続にピニングが発生した場合、クライアント接続をプールすると多重化の効率が低下する可能性があります。ピニングされているものの、アプリケーション側の接続プールでアイドル状態のクライアント接続は、引き続きデータベース接続を保持し、そのデータベース接続が他のクライアント接続で再利用されるのを防ぎます。プロキシログを確認して、接続にピニングが発生していないかチェックしてください。
注記
RDS Proxy は、データベース接続が使用されなくなった 24 時間後にその接続を閉じます。プロキシは、アイドル状態の最大接続数の設定値に関係なく、このアクションを実行します。