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를 사용하여 각 연결을 닫아주어야 합니다.