RDS Proxy の管理 - Amazon Relational Database Service

RDS Proxy の管理

次に、RDS Proxy の操作と設定を管理する方法について説明します。以下の手順は、アプリケーションがデータベース接続を最も効率的に使用し、接続を最大限に再利用するのに役立ちます。接続の再利用率を高めるほど、CPU とメモリのオーバーヘッドを減らすことができます。これにより、アプリケーションのレイテンシーを減らし、データベースのより多くのリソースをアプリケーションからのリクエストの処理に集中させることができます。

RDS Proxy の変更

プロキシの作成後に、プロキシに関連付けられた特定の設定を変更できます。これを行うには、プロキシ自体、プロキシに関連付けられているターゲットグループ、またはその両方を変更します。各プロキシには、ターゲットグループが関連付けられています。

プロキシの設定を変更するには

  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[プロキシ] を選択します。

  3. プロキシのリストで、設定を変更するプロキシを選択するか、その詳細ページに移動します。

  4. [アクション]、[変更] の順に選択します。

  5. 変更するプロパティを入力または選択します。次を変更できます。

    • プロキシ識別子 - プロキシの名前を変更するには、新しい識別子を入力します。

    • Transport Layer Security が必要 - Transport Layer Security (TLS) の要件を有効または無効にします。

    • アイドル状態のクライアント接続のタイムアウト - アイドル状態のクライアント接続のタイムアウトの時間を入力します。

    • Secrets Manager シークレット - Secrets Manager シークレットを追加または削除します。これらのシークレットは、データベースのユーザー名とパスワードに対応します。

    • IAM ロール - Secrets Manager からシークレットを取得するために使用する IAM ロールを変更します。

    • IAM 認証 - プロキシへの接続に IAM 認証をすることを要求または禁止します。

    • VPC セキュリティグループ - プロキシで使用する VPC セキュリティグループを追加または削除します。

    • 拡張されたログ記録を有効にする - 拡張ログ記録を有効または無効にします。

  6. [Modify] を選択します。

変更する設定がリストにない場合は、以下の手順を使用して、プロキシのターゲットグループを更新します。プロキシに関連付けられているターゲットグループは、物理データベース接続に関連する設定を制御します。プロキシごとに default という名前の 1 つのターゲットグループが関連付けられています。このターゲットグループはプロキシと共に自動的に作成されます。

ターゲットグループは、プロキシの詳細ページからのみ変更できます。[プロキシ] ページのリストから変更することはできません。

プロキシのターゲットグループの設定を変更するには

  1. [プロキシ] ページから、プロキシの詳細ページに移動します。

  2. [ターゲットグループ] で、default リンクを選択します。現在、すべてのプロキシには default という名前のターゲットグループが 1 つ あります。

  3. [デフォルト] ターゲットグループの詳細ページで、[変更] を選択します。

  4. 変更できるプロパティに対して新しい設定を選択します。

    • データベース - 別の RDS DB インスタンスまたは Aurora クラスターを選択します。

    • 接続プールの最大接続数 - プロキシで使用できる最大接続数の割合 (%) を調整できます。

    • セッション固定フィルター - (オプション) セッション固定フィルタを選択します。これにより、トランザクションレベルでの不十分な接続の再利用に起因するパフォーマンス問題を軽減できます。この設定を使用するには、RDS Proxy でセッションをデータベース接続に固定する場合のアプリケーションの動作と状況を理解する必要があります。現在、この設定は PostgreSQL ではサポートされておらず、唯一の選択肢は EXCLUDE_VARIABLE_SETS です。

    • 接続借用タイムアウト - 接続借用タイムアウト間隔を調整します。この設定は、プロキシで最大数の接続が既に使用されている場合に適用されます。この設定により、プロキシがタイムアウトエラーを返す前に、接続が使用可能になるまで待つ時間が決まります。

    • 初期化クエリ - (オプション) 初期化クエリを追加するか、現在のクエリを変更します。新しい各データベース接続を開くときに実行するプロキシ用の 1 つ以上の SQL ステートメントを指定できます。設定は通常、各接続のタイムゾーンや文字セットなどの設定が同一であることを確認するために、SET ステートメントとともに使用されます。複数のステートメントの場合は、セミコロンをセパレータとして使用します。例えば、1 つの SET ステートメントに SET x=1, y=2 など複数の可変を含めることもできます。PostgreSQL の場合、初期化クエリは現在サポートされていません。

    ターゲットグループ識別子やデータベースエンジンなどの特定のプロパティは変更できません。

  5. [Modify target group (ターゲットグループの変更)] を選択します。

AWS CLI を使用してプロキシを変更するには、modify-db-proxymodify-db-proxy-target-groupderegister-db-proxy-targetsregister-db-proxy-targets の各コマンドを使用します。

modify-db-proxy コマンドを使用すると、次のようなプロパティを変更できます。

  • プロキシで使用する一連の Secrets Manager シークレット。

  • TLS が必要かどうか。

  • アイドルクライアントのタイムアウト。

  • デバッグ用に SQL ステートメントからの追加情報をログに記録するかどうか。

  • Secrets Manager シークレットの取得に使用する IAM ロール。

  • プロキシで使用するセキュリティグループ。

次の例は、既存のプロキシの名前を変更する方法を示しています。

aws rds modify-db-proxy --db-proxy-name the-proxy --new-db-proxy-name the_new_name

接続関連の設定を変更したり、ターゲットグループの名前を変更したりするには、modify-db-proxy-target-group コマンドを使用します。現在、すべてのプロキシには default という名前のターゲットグループが 1 つ あります。このターゲットグループを使用する場合、プロキシの名前とターゲットグループ名 (default) を指定します。

次の例は、初期にプロキシの MaxIdleConnectionsPercent 設定をチェックし、次にターゲットグループを使用して設定を変更する方法を示しています。

aws rds describe-db-proxy-target-groups --db-proxy-name the-proxy { "TargetGroups": [ { "Status": "available", "UpdatedDate": "2019-11-30T16:49:30.342Z", "ConnectionPoolConfig": { "MaxIdleConnectionsPercent": 50, "ConnectionBorrowTimeout": 120, "MaxConnectionsPercent": 100, "SessionPinningFilters": [] }, "TargetGroupName": "default", "CreatedDate": "2019-11-30T16:49:27.940Z", "DBProxyName": "the-proxy", "IsDefault": true } ] } aws rds modify-db-proxy-target-group --db-proxy-name the-proxy --target-group-name default --connection-pool-config ' { "MaxIdleConnectionsPercent": 75 }' { "DBProxyTargetGroup": { "Status": "available", "UpdatedDate": "2019-12-02T04:09:50.420Z", "ConnectionPoolConfig": { "MaxIdleConnectionsPercent": 75, "ConnectionBorrowTimeout": 120, "MaxConnectionsPercent": 100, "SessionPinningFilters": [] }, "TargetGroupName": "default", "CreatedDate": "2019-11-30T16:49:27.940Z", "DBProxyName": "the-proxy", "IsDefault": true } }

deregister-db-proxy-targets コマンドと register-db-proxy-targets コマンドでは、ターゲットグループを通じてプロキシが関連付けられている RDS DB インスタンスまたは Aurora DB クラスターを変更します。現在、各プロキシが接続できる RDS DB インスタンスまたは Aurora DB クラスターは 1 つです。ターゲットグループは、マルチ AZ 設定のすべての RDS DB インスタンス接続の詳細を追跡します。または、ターゲットグループは、Aurora クラスター内のすべての DB インスタンスの接続の詳細を追跡します。

次の例では、cluster-56-2020-02-25-1399 という名前の Aurora MySQL クラスターに関連付けられているプロキシを初期に使用します。次に、このプロキシを変更して provisioned-cluster という名前の別のクラスターに接続できるようにします。

RDS DB インスタンスを使用する場合は、--db-instance-identifier オプションを指定します。Aurora DB クラスターを使用する場合は、代わりに --db-cluster-identifier オプションを指定します。

次の例では、Aurora MySQL プロキシを変更します。Aurora PostgreSQL プロキシにはポート 5432 があります。

aws rds describe-db-proxy-targets --db-proxy-name the-proxy { "Targets": [ { "Endpoint": "instance-9814.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-9814" }, { "Endpoint": "instance-8898.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-8898" }, { "Endpoint": "instance-1018.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-1018" }, { "Type": "TRACKED_CLUSTER", "Port": 0, "RdsResourceId": "cluster-56-2020-02-25-1399" }, { "Endpoint": "instance-4330.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-4330" } ] } aws rds deregister-db-proxy-targets --db-proxy-name the-proxy --db-cluster-identifier cluster-56-2020-02-25-1399 aws rds describe-db-proxy-targets --db-proxy-name the-proxy { "Targets": [] } aws rds register-db-proxy-targets --db-proxy-name the-proxy --db-cluster-identifier provisioned-cluster { "DBProxyTargets": [ { "Type": "TRACKED_CLUSTER", "Port": 0, "RdsResourceId": "provisioned-cluster" }, { "Endpoint": "gkldje.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "gkldje" }, { "Endpoint": "provisioned-1.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "provisioned-1" } ] }

RDS API を使用してプロキシを変更するには、ModifyDBProxyModifyDBProxyTargetGroupDeregisterDBProxyTargetsRegisterDBProxyTargets の各オペレーションを使用します。

ModifyDBProxy では、次のようなプロパティを変更できます。

  • プロキシで使用する一連の Secrets Manager シークレット。

  • TLS が必要かどうか。

  • アイドルクライアントのタイムアウト。

  • デバッグ用に SQL ステートメントからの追加情報をログに記録するかどうか。

  • Secrets Manager シークレットの取得に使用する IAM ロール。

  • プロキシで使用するセキュリティグループ。

ModifyDBProxyTargetGroup では、接続関連の設定や、ターゲットグループの名前を変更できます。現在、すべてのプロキシには default という名前のターゲットグループが 1 つ あります。このターゲットグループを使用する場合、プロキシの名前とターゲットグループ名 (default) を指定します。

DeregisterDBProxyTargets コマンドと RegisterDBProxyTargets コマンドでは、ターゲットグループを通じてプロキシが関連付けられている RDS DB インスタンスまたは Aurora DB クラスターを変更します。現在、各プロキシが接続できる RDS DB インスタンスまたは Aurora DB クラスターは 1 つです。ターゲットグループは、マルチ AZ 設定のすべての RDS DB インスタンス、または Aurora クラスター内のすべての DB インスタンスの接続の詳細を追跡します。

新しいデータベースユーザーの追加

状況に応じて、プロキシに関連付けられている RDS DB インスタンスや Aurora クラスターに新しいデータベースユーザーを追加できます。その場合は、Secrets Manager シークレットを追加または転用して、そのユーザーの認証情報を保存します。これを行うには、次のいずれかのオプションを選択します。

  • AWS Secrets Manager でのデータベース認証情報の設定」で説明している手順を使用して、新しい Secrets Manager シークレットを作成します。

  • IAM ロールを更新して、RDS Proxy に新しい Secrets Manager シークレットへのアクセスを許可します。そのためには、IAM ロールポリシーのリソースセクションを更新します。

  • 既存のユーザーを新しいユーザーに置き換える場合は、プロキシで既存のユーザーの Secrets Manager シークレットに保存されている認証情報を更新します。

データベースユーザーのパスワードの変更

状況に応じて、プロキシに関連付けられている RDS DB インスタンスや Aurora クラスターのデータベースユーザーのパスワードを変更できます。その場合は、対応する Secrets Manager シークレットを新しいパスワードで更新します。

接続設定の構成

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 がデータベースに対して確立できる接続の数を制限できます。上限は、データベースで使用可能な最大接続数に対する割合 (%) で指定します。プロキシは、これらの接続のすべてを事前に作成するわけではありません。この設定により、ワークロードが必要とするときにプロキシがこれらの接続を確立するための権利を予約します。

例えば、データベースの最大接続数の 75% を使用するように RDS Proxy を設定したとします。この場合、データベースは最大 1,000 の同時接続をサポートします。ここで、RDS Proxy は最大 750 のデータベース接続を開くことができます。

この設定には、RDS Proxy コンソールの [接続プールの最大接続数] フィールド、または AWS CLI と API の MaxConnectionsPercent パラメータを使用します。RDS コンソールの [Connection pool maximum connections] (接続プールの最大接続数) フィールドの値を変更する方法については、「AWS Management Console」を参照してください。MaxConnectionsPercent 設定での値の変更については、CLI コマンドの「modify-db-proxy-target-group」、または API オペレーションの「ModifyDBProxyTargetGroup」を参照してください。

データベース接続での上限の詳細については、「データベース接続の最大数」を参照してください。

MaxIdleConnectionsPercent

RDS Proxy が接続プール内にアイドル状態で保持できる、データベース接続の数を制御できます。RDS Proxy は、接続に対するアクティビティが 5 分間なかった場合に、プール内のデータベース接続をアイドル状態とみなします。

上限は、データベースで使用可能な最大接続数に対する割合 (%) で指定します。そのデフォルト値は MaxConnectionsPercent の 50% で、上限は MaxConnectionsPercent の値で指定します。値を大きくすると、プロキシではアイドル状態のデータベース接続の大部分を開いたままにします。値を小さくすると、プロキシではアイドル状態のデータベース接続の大部分を閉じます。ワークロードが予測できない場合は、MaxIdleConnectionsPercent には大きな値を設定するように検討してください。これにより、RDS Proxy では多数の新しいデータベース接続を開くことなく、アクティビティの急増に対応できるようになります。

この設定には、AWS CLI と API における DBProxyTargetGroupMaxIdleConnectionsPercent 設定を使用します。MaxIdleConnectionsPercent 設定での値の変更については、CLI コマンドの「modify-db-proxy-target-group」、または API オペレーションの「ModifyDBProxyTargetGroup」を参照してください。

注記

RDS Proxy は、データベース接続が使用されなくなった 24 時間後にその接続を閉じます。プロキシは、アイドル状態の最大接続数の設定値に関係なく、このアクションを実行します。

データベース接続での上限の詳細については、「データベース接続の最大数」を参照してください。

ConnectionBorrowTimeout

RDS Proxy がタイムアウトエラーを返す前に、接続プール内のデータベース接続が使用可能になるまで待つ時間を指定できます。デフォルト値は 120 秒です。この設定値は、接続数が最大値に達し、接続プールで利用可能な接続がなくなった場合に適用されます。また、例えば、フェイルオーバー操作が進行中であるなどの理由で、リクエストを処理するために使用できる適切なデータベースインスタンスがない場合にも適用されます。この設定を使用すると、アプリケーションコードでクエリタイムアウトを変更しなくても、アプリケーションに最適な待機期間を設定できます。

この設定には、RDS Proxy コンソールの [接続借用タイムアウト] フィールド、または AWS CLI と APIにおける DBProxyTargetGroupConnectionBorrowTimeout 設定を使用します。RDS コンソールの [Connection borrow timeout] (接続借用タイムアウト) フィールドの値を変更する方法については、「AWS Management Console」を参照してください。ConnectionBorrowTimeout 設定での値の変更については、CLI コマンドの「modify-db-proxy-target-group」、または API オペレーションの「ModifyDBProxyTargetGroup」を参照してください。

固定を回避する

データベースリクエストが以前のリクエストの状態情報に依存しない場合、多重化の効率が高まります。その場合、RDS Proxy は、各トランザクションの終了時に接続を再利用できます。このような状態情報の例には、SET ステートメントや SELECT ステートメントで変更できるほとんどの可変や設定パラメータが含まれます。クライアント接続の SQL トランザクションでは、デフォルトで、基となるデータベース接続を多重化できます。

プロキシへの接続は、固定と呼ばれる状態に入る場合があります。接続が固定されると、以降の各トランザクションは、セッションが終了するまで、同じ基になるデータベース接続を使用します。また、他のクライアント接続は、セッションが終了するまでそのデータベース接続を再利用できません。クライアント接続がドロップされると、セッションは終了します。

RDS Proxy は、他のセッションに不適切なセッション状態の変化を検出すると、クライアント接続を特定の DB 接続に自動的に固定します。固定により、接続の再利用の有効性が低下します。すべての接続やほぼすべての接続で固定が発生する場合は、固定が発生する状態を減らすようにアプリケーションコードやワークロードを変更します。

例えば、アプリケーションによってセッションの変数や設定パラメータが変更されたとします。この場合、後続のステートメントは変更後の変数やパラメータが有効かどうかによって変わります。したがって、RDS Proxy はセッションの可変や構成設定の変更リクエストを処理する場合、そのセッションを DB 接続に固定します。これにより、セッション状態は、同じセッション内の後続のすべてのトランザクションで有効になります。

一部のデータベースエンジンでは、設定可能なすべてのパラメータにこのルールが適用されるわけではありません。RDS Proxy は、特定のステートメントと変数を追跡します。したがって、これらの変更時に RDS Proxy はセッションを固定しません。この場合、RDS Proxy は、これらの設定の値が同じである他のセッションでのみ、接続を再利用します。RDS Proxy がデータベースエンジンで追跡する内容の詳細については、以下を参照してください。

RDS Proxy が RDS for SQL Server データベースに対して追跡する内容

RDS Proxy が追跡する SQL サーバーのステートメントを次に示します。

  • USE

  • SET ANSI_NULLS

  • SET ANSI_PADDING

  • SET ANSI_WARNINGS

  • SET ARITHABORT

  • SET CONCAT_NULL_YIELDS_NULL

  • SET CURSOR_CLOSE_ON_COMMIT

  • SET DATEFIRST

  • SET DATEFORMAT

  • SET LANGUAGE

  • SET LOCK_TIMEOUT

  • SET NUMERIC_ROUNDABORT

  • SET QUOTED_IDENTIFIER

  • SET TEXTSIZE

  • SET TRANSACTION ISOLATION LEVEL

RDS Proxy が RDS for MariaDB および RDS for MySQL データベースに対して追跡する内容

RDS Proxy が追跡する MySQL および MariaDB のステートメントを次に示します。

  • DROP DATABASE

  • DROP SCHEMA

  • 使用

RDS Proxy が追跡する MySQL および MariaDB の変数を次に示します。

  • AUTOCOMMIT

  • AUTO_INCREMENT_INCREMENT

  • CHARACTER SET (or CHAR SET)

  • CHARACTER_SET_CLIENT

  • CHARACTER_SET_DATABASE

  • CHARACTER_SET_FILESYSTEM

  • CHARACTER_SET_CONNECTION

  • CHARACTER_SET_RESULTS

  • CHARACTER_SET_SERVER

  • COLLATION_CONNECTION

  • COLLATION_DATABASE

  • COLLATION_SERVER

  • INTERACTIVE_TIMEOUT

  • NAMES

  • NET_WRITE_TIMEOUT

  • QUERY_CACHE_TYPE

  • SESSION_TRACK_SCHEMA

  • SQL_MODE

  • TIME_ZONE

  • TRANSACTION_ISOLATION (or TX_ISOLATION)

  • TRANSACTION_READ_ONLY (or TX_READ_ONLY)

  • WAIT_TIMEOUT

固定を最小化する

RDS Proxy のパフォーマンスチューニングでは、固定を最小化してトランザクションレベルの接続の再利用 (多重化) を最大化します。

場合によっては、RDS Proxy は、現在のセッションの外でデータベース接続を再利用しても安全であると判断できません。このような場合、セッションが終了するまで、セッションは同じ接続で維持されます。このフォールバック動作は、固定と呼ばれます。

以下の方法で、固定を最小化できます。

  • 固定の原因となる可能性のある不要なデータベースリクエストを避けます。

  • すべての接続間で可変と構成設定を一貫して設定します。これにより、これらの特定の設定を持つ接続が後続のセッションで再利用される可能性が高くなります。

    ただし、PostgreSQL では、可変の設定によりセッションの固定が発生します。

  • MySQL エンジンファミリデータベースの場合、セッション固定フィルターをプロキシに適用します。特定の種類のオペレーションがアプリケーションの正常な動作に影響しないことがわかっている場合、これらのオペレーションを除外してセッションの固定を起こさないように指定できます。

  • Amazon CloudWatch メトリクス DatabaseConnectionsCurrentlySessionPinned をモニタリングして、固定が発生する頻度を確認します。このメトリクスおよび他の CloudWatch メトリクスの詳細については、「Amazon CloudWatch を使用した RDS Proxy メトリクスのモニタリング」を参照してください。

  • SET ステートメントを使用して各クライアント接続を同等に初期化する場合、トランザクションレベルの多重化を維持したまま、この初期化を実行できます。この場合、初期セッション状態を設定するステートメントを、プロキシが使用する初期化クエリに移動します。このプロパティは、セミコロンで区切られた 1 つ以上の SQL ステートメントを含む文字列です。

    例えば、特定の設定パラメータを設定する初期化クエリをプロキシに定義できます。これにより、RDS Proxy でプロキシの新しい接続を設定するたびに、これらの設定が適用されます。トランザクションレベルの多重化を妨げないように、アプリケーションコードから対応する SET ステートメントを削除できます。

    プロキシでの固定の発生回数のメトリクスについては、「Amazon CloudWatch を使用した RDS Proxy メトリクスのモニタリング」を参照してください。

すべてのエンジンファミリーで固定が発生する条件

以下の場合は、多重化が予期しない動作をもたらす可能性があるため、プロキシはセッションを現在の接続に固定します。

  • ステートメントのテキストサイズが 16 KB を超える場合、プロキシはセッションを固定します。

  • プリペアドステートメントの場合、プロキシはセッションを固定します。このルールは、プリペアドステートメントで SQL テキストを使用するか、バイナリプロトコルを使用するかに関係なく、適用されます。

RDS for Microsoft SQL で固定が発生する条件

RDS for SQL サーバーでは、次の操作でも固定が発生します。

  • 複数のアクティブな結果セット (MARS) の使用。MARS の詳細については、SQL Server のドキュメントを参照してください。

  • 分散トランザクションコーディネーター (DTC) 通信の使用。

  • 一時テーブル、トランザクション、カーソル、準備済みステートメントの作成。

  • 次の SET ステートメントを使用してください。

    • SET ANSI_DEFAULTS

    • SET ANSI_NULL_DFLT

    • SET ARITHIGNORE

    • SET DEADLOCK_PRIORITY

    • SET FIPS_FLAGGER

    • SET FMTONLY

    • SET FORCEPLAN

    • SET IDENTITY_INSERT

    • SET NOCOUNT

    • SET NOEXEC

    • SET OFFSETS

    • SET PARSEONLY

    • SET QUERY_GOVERNOR_COST_LIMIT

    • SET REMOTE_PROC_TRANSACTIONS

    • SET ROWCOUNT

    • SET SHOWPLAN_ALLSHOWPLAN_TEXT、および SHOWPLAN_XML

    • SET STATISTICS

    • SET XACT_ABORT

RDS for MariaDB と RDS for MySQL で固定が発生する条件

MySQL と MariaDB の場合、次の操作に伴って固定も発生します。

  • 明示的なテーブルロックステートメントである LOCK TABLELOCK TABLES、または FLUSH TABLES WITH READ LOCK が原因でプロキシによるセッションの固定が発生します。

  • GET_LOCK を使用して名前付きロックを作成するプロキシはセッションを固定します。

  • ユーザー可変またはシステム可変 (例外あり) を設定した場合、プロキシはセッションを固定します。この状況によって接続の再利用が制限されすぎる場合は、SET オペレーションで固定を発生させないように選択できます。セッションのピン留めフィルタープロパティを設定する方法については、「RDS Proxy の作成」または「RDS Proxy の変更」を参照してください。

  • 一時テーブルを作成した場合、プロキシはセッションを固定します。これにより、トランザクションの境界に関係なく、一時テーブルの内容がセッション全体で保持されます。

  • 関数 ROW_COUNTFOUND_ROWS、および LAST_INSERT_ID を呼び出すと、固定が発生する場合があります。

ストアドプロシージャやストアド関数を呼び出しても、固定は発生しません。RDS Proxy は、このような呼び出しに伴うセッション状態の変更を検出しません。したがって、アプリケーションによってストアドルーチン内でセッション状態が変更されないことを確認し、そのセッション状態がトランザクション間で維持されるようにします。例えば、ストアドプロシージャがトランザクション間で維持されることを意図した一時テーブルを作成する場合、このアプリケーションは現在 RDS Proxy と互換性がありません。

アプリケーションの動作に関する専門知識がある場合は、特定のアプリケーションステートメントについて固定動作をスキップできます。これを行うには、プロキシの作成時に [セッションの固定フィルタ] オプションを選択します。現在、セッションの可変や構成設定の定義により発生するセッションの固定を回避できます。

RDS for PostgreSQL で固定が発生する条件

PostgreSQL の場合、次の操作に伴って固定も発生します。

  • SET コマンドの使用

  • JDBC のデフォルト設定を使用するなど PostgreSQL 拡張クエリプロトコルの使用

  • 一時シーケンス、テーブル、またはビューの作成

  • カーソルの宣言

  • セッション状態の破棄

  • 通知チャネルでのリッスン

  • auto_explain などのライブラリモジュールのロード

  • nextvalsetval などの関数を使用したシーケンスの操作

  • pg_advisory_lockpg_try_advisory_lock などの機能を使用したロックの操作

  • 準備されたステートメントの使用、パラメータの設定、またはパラメータのデフォルトへのリセット

RDS Proxy の削除

不要になったプロキシは削除できます。プロキシを使用していたアプリケーションが無効になった場合は、プロキシを削除できます。または、プロキシに関連付けられている DB インスタンスやクラスターがサービスから外された場合に、プロキシを削除できます。

プロキシを削除するには

  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[プロキシ] を選択します。

  3. リストから削除するプロキシを選択します。

  4. [Delete Proxy (プロキシの削除)] を選択します。

DB プロキシを削除するには、AWS CLI コマンド delete-db-proxy を使用します。該当する関連付けを削除するには、deregister-db-proxy-targets コマンドも使用します。

aws rds delete-db-proxy --name proxy_name
aws rds deregister-db-proxy-targets --db-proxy-name proxy_name [--target-group-name target_group_name] [--target-ids comma_separated_list] # or [--db-instance-identifiers instance_id] # or [--db-cluster-identifiers cluster_id]

DB プロキシを削除するには、Amazon RDS API 関数 DeleteDBProxy を呼び出します。関連する項目と関連付けを削除するには、関数 DeleteDBProxyTargetGroupDeregisterDBProxyTargets も呼び出します。