PostgreSQL인덱스와 성능

VACUUM, ANALYZE, autovacuum

PostgreSQL이 테이블 통계를 갱신하고 죽은 튜플을 정리하는 `VACUUM`, `ANALYZE`, `autovacuum`의 역할을 정리합니다.

마지막 수정 2026년 3월 22일

기본 패턴

sql
VACUUM ANALYZE orders;

설명

  • PostgreSQL은 update와 delete가 일어날 때 기존 행을 바로 덮어쓰는 방식이 아니라, 새 버전을 만들고 이전 버전을 나중에 정리하는 MVCC 모델을 사용합니다. 그래서 정리 작업이 성능과 저장 공간에 직접 영향을 줍니다.
  • VACUUM은 더 이상 필요 없는 죽은 튜플을 정리하고 저장 공간 재사용을 돕습니다. ANALYZE는 데이터 분포 통계를 갱신해 옵티마이저가 더 나은 실행 계획을 고르게 합니다.
  • autovacuum은 이 작업을 자동으로 수행하는 백그라운드 메커니즘입니다. 대부분의 시스템에서 이 기능은 "있으면 좋은 옵션"이 아니라 사실상 필수 안전장치에 가깝습니다.
  • 실무에서 느린 쿼리는 인덱스 부족 때문만이 아니라 통계가 오래됐거나 테이블이 부풀어 있는 문제에서 오기도 합니다. 그래서 운영 관점에서는 쿼리와 함께 유지보수 상태도 같이 봐야 합니다.
  • 이 주제의 핵심은 PostgreSQL이 "데이터를 저장하는 엔진"이면서 동시에 "지속적으로 정리와 통계 수집이 필요한 시스템"이라는 점입니다. 운영이 길어질수록 더 중요해집니다.

빠른 정리

항목역할
VACUUM죽은 튜플 정리, 공간 재사용 도움
ANALYZE통계 갱신
VACUUM ANALYZE정리와 통계 갱신 함께 수행
autovacuum자동 유지보수
핵심 포인트성능과 저장 공간은 유지보수 상태에도 좌우됨

주의할 점

느린 쿼리가 항상 인덱스 문제만은 아닙니다. 통계가 오래됐거나 autovacuum이 제대로 따라가지 못하면 옵티마이저 판단과 저장 공간 상태가 함께 악화될 수 있습니다.

참고 링크

3 sources