토픽 167 / 201·NewSQL 및 특수 목적 DB
Vacuum (PostgreSQL)
Vacuum (PostgreSQL)
PostgreSQL에서 MVCC(다중 버전 동시성 제어)로 인해 발생한 Dead Tuple(삭제/업데이트된 구 버전 행)을 정리하고 공간을 회수하며 통계를 갱신하는 유지보수 작업
목적: Dead Tuple 정리, 디스크 공간 회수, 통계 갱신, Transaction ID Wraparound 방지
특징: MVCC 부산물 정리, 자동/수동 실행, 테이블 잠금 최소화, 운영 중 수행 가능
Vacuum 유형
- •VACUUM: Dead Tuple 정리, 공간은 재사용 가능하지만 OS 반환 안 함
- •VACUUM FULL: 테이블 재작성, 공간 OS 반환, 배타적 잠금 필요(운영 중 위험)
- •VACUUM ANALYZE: Vacuum + 통계 갱신
- •Autovacuum: 백그라운드 자동 실행, 임계치 기반
Dead Tuple 발생 원인
- •UPDATE: 새 버전 생성, 구 버전 Dead
- •DELETE: 즉시 삭제 안 함, Dead 마킹
- •롤백된 INSERT
Autovacuum 트리거 조건
- •dead_tuples > autovacuum_vacuum_threshold + (autovacuum_vacuum_scale_factor x 전체 행 수)
- •기본: 50 + (0.2 x 전체 행 수)
Transaction ID Wraparound
- •32비트 XID, 약 21억 트랜잭션 후 순환
- •Vacuum으로 오래된 XID Freeze 필요
- •Wraparound 방지 실패 시 DB 정지 위험
모니터링 쿼리: pg_stat_user_tables (n_dead_tup, last_vacuum, last_autovacuum)
장점: 공간 재사용, 성능 유지, 자동화(Autovacuum), 통계 갱신
단점: I/O 부하, VACUUM FULL 잠금, 설정 튜닝 필요
적용사례: PostgreSQL 운영, 대용량 테이블 관리, 성능 유지보수
기술요소: Dead Tuple, Autovacuum, VACUUM FULL, XID Wraparound, Freeze
비교: VACUUM(재사용) vs VACUUM FULL(공간 반환) vs REINDEX(인덱스 재구성)
연관: MVCC, PostgreSQL, Dead Tuple, Autovacuum, 테이블 팽창(Bloat)