View a markdown version of this page

Amazon RDS Data API によるセッション管理 - Amazon Aurora

Amazon RDS Data API によるセッション管理

RDS Data API はデータベース接続のプールを保持し、呼び出し間でそれらを再利用することで、接続オーバーヘッドを削減します。接続を再利用する前に、RDS Data API はセッション状態をリセットします。リセットはデータベースエンジンによって異なります。PostgreSQL では、RDS Data API は DISCARD ALL ステートメントを実行して、一時テーブル、準備済みステートメント、セッションレベルのパラメータなどのセッション状態をクリアします。MySQL では、RDS Data API は接続をリセットします (これは COM_RESET_CONNECTION に相当します)。

これらのリセットは、エンジンが所有するセッションレベルの属性を対象としていますが、拡張機能によって作成された状態が含まれるとは限りません。これらのクリーンアップが実行されると、拡張機能は他のセッションレベルの属性と同じ動作をしない可能性があり、リセット後もその状態がデータベース接続に維持される可能性があります。RDS Data API は接続を再利用するため、拡張機能によって残された状態は、それを作成した呼び出しに限定されず、後の呼び出しで同じ接続が再利用される際にも残っている可能性があります。

dblink は、この動作の一例です。DISCARD ALL を実行しても、dblink 拡張機能によって開かれた接続を閉じられません。そのため、ある呼び出しで開かれた名前付きの dblink 接続は、その接続が再利用されたときにも開いたままになることがあります。エンジンセッションの状態の外部にリソースを保持する他の拡張機能も、同様に動作する場合があります。

RDS Data API で拡張機能を使用する場合、拡張機能が管理する状態が解放されることを、セッションのリセットに依存しないでください。拡張機能独自のティアダウン関数を使用して、同じトランザクション内でその状態を作成して解放します。dblink の場合は、dblink_disconnect を使用して各接続を閉じます。