본문 바로가기
C.W.K.
Stream
Lesson 07 of 10 · published

VACUUM과 autovacuum을 평범한 말로

~14 min · operations, vacuum

Level 0스키마 새싹
0 XP0/86 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

UPDATE는 옛 행 버전을 남겨

MVCC는 UPDATE 때 새 행 버전을 만들고 옛 버전을 죽었다고 표시해. 오래된 스냅샷이 끝나면 VACUUM이 그 공간을 다시 쓸 수 있게 해.

일반 VACUUM과 FULL은 다르다

일반 VACUUM은 공간을 재사용 가능하게 하고 가시성 지도를 갱신해, 색인 전용 스캔이 불필요한 힙 방문을 피할 수 있게 해. ANALYZE를 함께 실행하면 계획기가 쓰는 통계도 갱신해. VACUUM FULL은 테이블 전체를 다시 써 디스크를 줄이지만 강한 잠금을 잡으므로 거의 필요 없어.

autovacuum이 따라오는지 봐

변경이 잦은 큰 테이블에서는 기본 비율 20%가 너무 늦을 수 있어. 이때 autovacuum_vacuum_scale_factor를 5%처럼 낮출 수 있어. pg_stat_user_tablesn_dead_tup이 백만 단위로 쌓이면 autovacuum이 따라가지 못한다는 신호야. 긴 idle in transaction도 함께 확인해.

Code

죽은 튜플 수 확인하기·sql
SELECT relname, n_live_tup, n_dead_tup,
       round(100.0 * n_dead_tup / nullif(n_live_tup + n_dead_tup, 0), 1) AS dead_pct,
       last_autovacuum, last_autoanalyze
FROM   pg_stat_user_tables
ORDER  BY n_dead_tup DESC
LIMIT  20;
수동 VACUUM이 필요한 드문 경우·sql
-- Light vacuum: 공간 회수, lock 없음
VACUUM (VERBOSE, ANALYZE) orders;

-- Aggressive: 디스크에서 테이블 재작성 + 축소
-- ACCESS EXCLUSIVE lock — maintenance window 없이 prod 절대 금지
VACUUM FULL orders;
변경이 잦은 테이블의 autovacuum 조정·sql
-- Default 20% 대신 5% 행 dead 면 autovacuum 실행
ALTER TABLE hot_orders
SET (autovacuum_vacuum_scale_factor = 0.05,
     autovacuum_analyze_scale_factor = 0.02);

External links

Exercise

pg_stat_user_tables에서 테이블별 죽은 튜플 비율을 확인해. dead_pct가 30%를 넘는 테이블을 찾아 장기 트랜잭션과 autovacuum 설정을 조사하고 개선 조치 하나를 실행해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.