Jepsen: Amazon RDS의 PostgreSQL 17.4 분석

2 days ago 10

  • PostgreSQL는 오픈 소스 SQL 데이터베이스로, 다양한 트랜잭션 격리 수준을 제공함
  • Amazon RDS for PostgreSQL는 AWS에서 관리하는 PostgreSQL 클러스터 서비스로, 여러 가용 영역에 걸쳐 데이터베이스 노드를 분산하여 장애 확률을 줄임
  • Jepsen의 테스트 라이브러리를 사용하여 Amazon RDS for PostgreSQL의 격리 수준을 검증
  • 테스트 결과, Amazon RDS for PostgreSQL는 Snapshot Isolation을 보장하지 않으며 Parallel Snapshot Isolation을 제공할 가능성이 있음
  • Amazon RDS for PostgreSQL 사용자는 트랜잭션 구조를 검토하여 Long Fork와 같은 이상 현상을 방지할 필요가 있음

배경

  • PostgreSQL는 오픈 소스 SQL 데이터베이스로, 다양한 트랜잭션 격리 수준을 제공함
  • Amazon RDS for PostgreSQL는 AWS에서 관리하는 PostgreSQL 클러스터 서비스로, 여러 가용 영역에 걸쳐 데이터베이스 노드를 분산하여 장애 확률을 줄임
  • 사용자 관점에서, Amazon RDS for PostgreSQL는 읽기-쓰기 트랜잭션을 위한 기본 URL과 읽기 전용 트랜잭션을 위한 리더 URL을 제공함

테스트 설계

  • Jepsen의 테스트 라이브러리를 사용하여 Amazon RDS for PostgreSQL의 격리 수준을 검증
  • CreateDBCluster API를 사용하여 RDS 클러스터를 프로비저닝하고, gp3 스토리지와 db.m6id.large 인스턴스를 사용함
  • 주요 워크로드는 고유 정수 목록에 대한 트랜잭션으로 구성되며, Elle 체커를 통해 다양한 격리 수준을 검증함

결과

  • Amazon RDS for PostgreSQL 17.4는 G-nonadjacent 사이클을 주기적으로 나타냄
  • 이러한 사이클은 Snapshot Isolation의 위반이며, 표준 PostgreSQL의 "Repeatable Read"에서는 발생하지 않음
  • Long Fork와 같은 다양한 G-nonadjacent 이상 현상이 관찰됨

논의

  • Amazon RDS for PostgreSQL 멀티-AZ 클러스터는 Snapshot Isolation을 보장하지 않으며, Parallel Snapshot Isolation을 제공할 가능성이 있음
  • 사용자는 트랜잭션 구조를 검토하여 Long Fork와 같은 이상 현상을 방지할 필요가 있음
  • Jepsen은 안전성 검증을 위한 실험적 접근을 취하며, 문제의 존재를 증명할 수 있지만, 부재를 증명할 수는 없음

Read Entire Article