VACUUM, autovacuum, vacuum_cost_delay
대형 테이블을 위해 autovacuum 임계값, vacuum_cost_delay, 병렬 VACUUM을 조정해보세요.
VACUUM, autovacuum, vacuum_cost_delay은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
세 가지 VACUUM 모드
VACUUM(지연 방식) — 죽은 행을 회수하고 여유 공간 맵을 업데이트하며 배타적 잠금을 사용하지 않습니다VACUUM FULL— 테이블을 다시 작성하고 배타적 잠금을 사용하며 디스크 공간을 OS에 반환합니다VACUUM ANALYZE— 한 번에 진공 처리와 플래너 통계 새로 고침을 수행합니다
VACUUM 수동 실행
자동 진공 처리를 사용 중이어도 때로는 유용합니다:
VACUUM (VERBOSE) orders;
VACUUM (VERBOSE, ANALYZE) orders;
VACUUM (PARALLEL 4) orders; -- parallel index cleanup (PG 13+)자동 진공 처리 프로세스
백그라운드 실행기가 작업자를 생성하고, 임계값을 초과한 테이블을 진공 처리합니다. 기본적으로 소수의 작업자가 클러스터를 처리합니다.
테이블별 조정
변경이 잦은 테이블은 적극적인 자동 진공 처리의 효과를 봅니다:
ALTER TABLE busy_table SET (
autovacuum_vacuum_scale_factor = 0.05, -- 5% dead vs default 20%
autovacuum_vacuum_threshold = 1000,
autovacuum_analyze_scale_factor = 0.05
);vacuum_cost_delay
VACUUM의 I/O를 제한하여 사용자 쿼리에 영향을 주지 않게 합니다. PG 12 이상에서는 기본값이 2ms이며, 일반적으로 적절합니다. SSD에서는 이 값을 낮출 수 있습니다:
autovacuum_vacuum_cost_delay = 2ms
-- Lower delay = faster vacuum, more I/O usage.
-- Set per-table for hot tables that need faster cleanup.병렬 VACUUM
PG 13부터 VACUUM은 인덱스 정리를 병렬로 수행합니다:
VACUUM (PARALLEL 4) big_table;
-- Each index cleaned by a parallel worker (up to max_parallel_maintenance_workers).VACUUM FULL: 언제, 왜 사용하는가
테이블을 처음부터 다시 작성하여 공간을 OS에 반환합니다. ACCESS EXCLUSIVE 잠금을 획득합니다. 최후의 수단으로만 사용하거나 대신 pg_repack을 사용합니다.
VACUUM FULL orders;
-- Locks orders; rewrites; on huge tables this is hours of downtime.pg_repack: 온라인 대안
전체 잠금 없이 테이블을 온라인으로 다시 작성합니다. VACUUM FULL과 같은 효과를 내면서도 운영 환경에 적합합니다:
pg_repack -d mydb -t orders
-- Builds a shadow table, sync, swaps in.자동 진공 처리 모니터링
마지막 VACUUM 및 ANALYZE 실행 시간과 죽은 행 수를 확인합니다:
SELECT relname,
n_live_tup, n_dead_tup,
last_autovacuum, last_autoanalyze
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC;자동 진공 처리가 뒤처질 때
증상:
- 비대화가 심해집니다
- pg_stat_user_tables의 n_dead_tup 값이 높습니다
- 쿼리 계획의 품질이 저하됩니다
해결 방법: autovacuum_max_workers를 늘리고, 테이블별 스케일 팩터를 낮추며, VACUUM을 차단하는 긴 트랜잭션을 해결합니다.
VACUUM 로그 기록
조정을 위해 느린 VACUUM을 로그에 기록합니다:
log_autovacuum_min_duration = '500ms'
-- Logs every autovacuum action that took longer than 500ms.FREEZE
VACUUM은 xid 래핑을 방지하기 위해 오래된 튜플을 가끔 "동결"합니다. 적극적인 자동 진공 처리는 동결 시점을 낮게 유지하여 긴급한 래핑 이벤트를 방지합니다.
복습
자동 진공 처리는 필수이며, 작업 부하에 맞게 조정해야 합니다.
- 변경이 잦은 테이블에는 테이블별 자동 진공 처리 설정을 적용합니다
- VACUUM FULL은 최후의 수단이므로 pg_repack을 우선 사용합니다
- n_dead_tup과 last_autovacuum을 모니터링합니다
- 정리를 차단하는 긴 트랜잭션을 해결합니다
빠른 확인
긴 시간 동안 잠금을 차단하지 않고 변경이 잦은 운영 테이블의 디스크 공간을 회수하는 가장 안전한 방법은 무엇인가요?
자주 묻는 질문
“VACUUM, autovacuum, vacuum_cost_delay” 강의는 무료인가요?
네 — “VACUUM, autovacuum, vacuum_cost_delay” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“VACUUM, autovacuum, vacuum_cost_delay”에서 뭘 배우나요?
대형 테이블을 위해 autovacuum 임계값, vacuum_cost_delay, 병렬 VACUUM을 조정해보세요. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
SQL Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“VACUUM, autovacuum, vacuum_cost_delay” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- MVCC와 비대화의 원인
- VACUUM, autovacuum, vacuum_cost_delay
- ANALYZE와 pg_statistic
- 인덱스 전용 스캔과 가시성 맵