PostgreSQL
강의

#6 - PostgreSQL VACUUM (배큠) - ‘청소’이자 ‘건강검진’이다.

중년개발자
중년개발자

@loxo

17일 전

24

vaccum.png

PostgreSQL VACUUM 가이드

🔊 발음: VACUUM = [배큠] / [배큐엄] (실무에서는 보통 배큠)

VACUUM은 PostgreSQL에서 ‘청소’이자 ‘건강검진’이다.
언제 실행되는지, 안 하면 뭐가 문제인지, 운영자는 무엇만 챙기면 되는지
완전 초보 관점에서 설명한다.


1️⃣ VACUUM은 왜 필요한가?

지난 강의에서 CTID는 row의 물리적 주소이며, UPDATE 시 새로운 CTID로 이동한다는 것을 배웠다. 이 흐름의 연장선에서 이해해야 할 핵심이 바로 다음 문장이다.

PostgreSQL은 UPDATE / DELETE 시 바로 지우지 않는다.

  • UPDATE → 기존 row는 Dead Tuple
  • DELETE → 바로 제거 ❌, 죽음 표시만

📌 핵심

VACUUM이 없으면 테이블은 계속 비대해진다.


2️⃣ VACUUM은 언제 실행될까?

✅ 1. 자동 실행 (Autovacuum)

PostgreSQL에는 기본적으로 autovacuum 데몬이 있다.

  • 주기적으로 테이블 상태 감시
  • Dead Tuple이 일정 비율을 넘으면 자동 실행

기본 조건 (개념적으로):

변경된 row 수 > (테이블 크기 × 임계치)

📌 대부분의 경우 아무 설정 안 해도 자동으로 돈다


✅ 2. 수동 실행 (운영자가 직접)

sql
VACUUM table_name; VACUUM ANALYZE table_name;

언제 쓰나?

  • 대량 DELETE 후
  • 배치 작업 직후
  • 성능이 갑자기 나빠졌을 때

3️⃣ VACUUM이 실제로 하는 일

VACUUM은 데이터를 지우는 게 아니라 정리한다.

✔ 디스크 파일 크기를 줄이지는 않음
✔ 내부 Free Space를 다시 쓸 수 있게 만듦


4️⃣ VACUUM vs VACUUM FULL (중요 차이)

구분VACUUMVACUUM FULL
Lock거의 없음테이블 전체 Lock
공간 재사용내부만OS 레벨까지 반환
운영 중 사용❌ (점검 시간)

▶ 실행 명령어 예시

sql
-- 일반 VACUUM (운영 중 안전) VACUUM table_name; -- 통계까지 함께 갱신 (가장 많이 사용) VACUUM ANALYZE table_name; -- 디스크 공간까지 실제로 줄이고 싶을 때 (주의!) VACUUM FULL table_name;

▶ VACUUM FULL을 쓰기 전 반드시 알아야 할 점

  • 실행 중 해당 테이블 전체 LOCK
  • 다른 트랜잭션 읽기/쓰기 전부 대기
  • 테이블을 새로 써서 물리적으로 재구성

📌 실무 원칙

VACUUM FULL은 최후의 수단이며, 반드시 점검 시간에만 사용


5️⃣ ANALYZE는 뭐 하는 놈인가?

sql
VACUUM ANALYZE;
  • 테이블 통계 정보 갱신
  • 옵티마이저가 실행 계획 선택에 사용

📌 포인트

VACUUM은 청소, ANALYZE는 똑똑하게 만들기


6️⃣ Autovacuum을 끄면 안 되는 이유

❗ Autovacuum 비활성화 = 서서히 망하는 DB


7️⃣ 초보 운영자를 위한 최소 유지보수 전략

✅ 반드시 지킬 5가지

  1. Autovacuum 끄지 말 것
  2. UPDATE/DELETE 많은 테이블은 모니터링
  3. 배치 후 VACUUM ANALYZE
  4. 테이블 크기 급증 시 원인 분석
  5. VACUUM FULL은 점검 시간에만

8️⃣ 자주 나오는 초보 질문

Q. VACUUM 안 하면 데이터 날아가요?

❌ 아니요. 성능만 점점 나빠집니다.

Q. 매일 VACUUM 돌려야 하나요?

❌ Autovacuum이 대부분 처리합니다.

Q. 디스크 용량은 왜 안 줄어요?

➡ PostgreSQL은 재사용을 우선합니다.


🔚 한 줄로 정리

VACUUM은 안 하면 바로 터지진 않지만, 안 하면 반드시 망가진다.

이걸 이해하면

  • Autovacuum 설정
  • 대용량 테이블 운영
  • 성능 튜닝

이제 “감”이 아니라 “이유”로 판단할 수 있다.

목차

#PostgreSQL#VACUUM#Autovacuum#데이터베이스 관리#튜닝

댓글 0

Ctrl + Enter를 눌러 등록할 수 있습니다
※ AI 다듬기는 내용을 정제하는 보조 기능이며, 최종 내용은 사용자가 확인해야 합니다.