나의 잡다한 노트 및 메모

PostgreSQL Vacuum 본문

DB/PostgreSQL

PostgreSQL Vacuum

peanutwalnut 2025. 8. 22. 22:23

PostgreSQL 테이블에서 더 이상 필요 없는(dead) 데이터를 정리하고, 저장 공간과 성능을 회복하는 작업.

 

PostgreSQL의 특성 (MVCC)

  • PostgreSQL은 MVCC (Multi-Version Concurrency Control) 방식을 사용합니다.
  • 즉, 데이터를 UPDATE하거나 DELETE하면 기존 행(row)을 **즉시 지우지 않고 “죽은 튜플(dead tuple)”**로 남겨둡니다.
  • 새로운 버전의 행은 같은 테이블에 새로 기록됩니다.
  • 이렇게 해야 동시에 SELECT 중인 세션이 여전히 옛 데이터를 볼 수 있기 때문입니다.

➡️ 하지만 이런 dead tuple이 무한정 쌓이면 디스크 공간 낭비 + 쿼리 성능 저하가 발생합니다.
그래서 필요할 때마다 VACUUM이 필요합니다.

 

VACUUM의 역할

  1. Dead tuple 정리
    • 더 이상 어떤 트랜잭션에서도 참조하지 않는 tuple들을 테이블에서 제거
    • 공간을 재사용 가능하게 표시 (즉각 파일 크기 줄이지는 않음)
  2. 통계/메타데이터 갱신
    • 트랜잭션 ID 관리 (XID wraparound 방지)
    • 힙 테이블과 인덱스에서 어떤 블록이 clean/dirty 한지 기록
  3. 인덱스 관리
    • 인덱스에서도 필요 없는 엔트리를 청소

 

VACUUM 종류

  1. VACUUM (일반)
    • dead tuple을 지워 공간을 “재사용 가능” 상태로 만듦
    • 파일 크기는 그대로
  2. VACUUM FULL
    • 테이블/인덱스를 새로 재작성(rewrite)
    • 실제 디스크 파일 크기도 줄어듦
    • 하지만 테이블에 Exclusive Lock을 걸기 때문에 무겁고 오래 걸림
  3. Autovacuum (자동 VACUUM)
    • PostgreSQL에는 autovacuum 데몬이 있어 dead tuple이 일정 기준을 넘으면 자동 실행
    • 보통 운영 환경에서는 이걸 끄지 않고 사용

 

 

  • VACUUM = PostgreSQL의 청소부
  • dead tuple을 제거하고, 공간 재활용 및 통계 갱신을 담당
  • 성능과 안정성을 위해 필수적인 작업
  • 운영 환경에서는 대부분 autovacuum이 자동으로 처리

 

 

 

'DB > PostgreSQL' 카테고리의 다른 글

DBA가 알면 좋은 쿼리 ( SLOT )  (0) 2025.09.03
PostgreSQL 관리자(DBA)가 자주 쓰는 주요 테이블/뷰  (0) 2025.08.23
PostgreSQL tablespace  (0) 2025.08.22
PostgreSQL Subscription  (0) 2025.08.20
PostgreSQL Replication slot  (0) 2025.08.20