목록 보기
RDS PostgreSQL 트랜잭션 ID 랩어라운드 방지를 위한 autovacuum 모니터링에 postgres_get_av_diag() 사용하기
백엔드

RDS PostgreSQL 트랜잭션 ID 랩어라운드 방지를 위한 autovacuum 모니터링에 postgres_get_av_diag() 사용하기

AWS
AWS
2025년 4월 22일

두줄요약

RDS PostgreSQL의 autovacuum 지연과 XID 랩어라운드 위험을 줄이기 위해 postgres_get_av_diag() 활용법을 소개했습니다. Lambda, EventBridge, SES를 연결해 차단 원인을 주기적으로 감지하고 알림하는 방법을 설명했습니다.

문제 상황

  • RDS PostgreSQL에서 autovacuum 지연으로 트랜잭션 수행 불가, 성능 저하, 가용성 위험이 발생하는 상황
  • 장기 실행 트랜잭션, 준비된 트랜잭션, 복제 슬롯, hot_standby_feedback 등으로 freeze 작업이 막혀 XID 랩어라운드 위험이 커짐
  • 20억 개 미고정 트랜잭션 임계값에 근접하면 쓰기 트랜잭션이 중단될 수 있음

원인 분석

  • 공격적 autovacuum이 테이블 전체 페이지를 스캔하며 XID freeze를 수행해야 하지만, 여러 블로커에 의해 지연됨
  • CloudWatch의 MaximumUsedTransactionIDs는 조기 경보용이지만, 실제 차단 원인 식별에는 상세 진단이 부족함
  • postgres_get_av_diag()는 적응형 autovacuum 기준과 autovacuum_freeze_max_age를 반영해 차단을 진단

해결 방법

  • rds_tools 확장을 설치하고 postgres_get_av_diag()로 autovacuum 차단 정보를 조회
  • autovacuum_lagging_by 기준으로 블로커를 정렬해 우선순위 파악
  • Lambda, Secrets Manager, CloudWatch Logs, SES, EventBridge를 조합해 주기적 모니터링과 이메일 알림 구성

주의할 점

  • 함수 지원 버전은 RDS PostgreSQL 17.2+, 16.7+, 15.11+, 14.16+, 13.19+로 제한
  • Lambda는 VPC, IAM 권한, SES 확인, Secrets Manager 비밀 구성, pg8000/boto3 패키징이 필요
  • 모니터링 후 불필요한 AWS 리소스 정리 필요

적용해볼 점

  • XID 임계값에 가까워지기 전에 CloudWatch 지표와 postgres_get_av_diag()를 함께 사용
  • 반복 점검이 필요한 환경에서 EventBridge 기반 예약 실행 적용
  • 복제 슬롯과 장기 트랜잭션 같은 autovacuum 블로커를 우선 점검

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...