도구스개발

PostgreSQL 오토배큠 임계값 계산기

테이블 행 수·죽은 튜플 수로 PostgreSQL autovacuum·autoanalyze가 언제 발동하는지 공식 문서 산식 그대로 계산합니다.

pg_class.reltuples — 마지막 VACUUM·ANALYZE 시점의 추정치입니다.

기본값 50

%

기본값 20%

기본값 50

%

기본값 10%

VACUUM 임계값

200,050개

50,050개 더 쌓이면 발동

ANALYZE 임계값100,050개
ANALYZE 상태20,050개 더 필요
VACUUM 임계값 = vacuum_threshold + vacuum_scale_factor × reltuples, ANALYZE 임계값 = analyze_threshold + analyze_scale_factor × reltuples. autovacuum launcher는 매 라운드 이 값과 실제 죽은 튜플 수(VACUUM)·변경 행 수(ANALYZE)를 비교해 넘으면 작업을 큐에 넣습니다.
추정입니다. reltuples는 실시간 정확한 행 수가 아니라 마지막 VACUUM·ANALYZE 시점의 추정치이고, 테이블별 storage parameter가 전역 설정을 덮어쓸 수 있습니다. 대형 테이블은 스케일 팩터를 낮추고 절대 임계값으로 조절하는 것이 일반적인 튜닝입니다.

사용 방법

  1. 1테이블의 전체 행 수 추정치(reltuples)를 입력합니다 — `SELECT reltuples FROM pg_class WHERE relname = '테이블명'`.
  2. 2현재 죽은 튜플 수(n_dead_tup)와 마지막 ANALYZE 이후 변경 행 수(n_mod_since_analyze)를 `pg_stat_user_tables`에서 확인해 입력합니다.
  3. 3postgresql.conf 또는 테이블 storage parameter에서 threshold·scale_factor 값을 바꿨다면 아래 기본값 대신 그 값을 넣습니다.
  4. 4VACUUM·ANALYZE 임계값과, 지금 상태로 발동 조건을 넘었는지·몇 건이 더 필요한지를 확인합니다.

자주 묻는 질문

죽은 튜플 수(n_dead_tup)가 "autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor × reltuples"를 넘으면 그 테이블에 VACUUM이 큐에 들어갑니다. 기본값은 각각 50과 0.2(20%)라, 행 100만 개인 테이블은 죽은 튜플 약 20만 개가 쌓여야 발동합니다.

식의 구조는 같지만("autovacuum_analyze_threshold + autovacuum_analyze_scale_factor × reltuples") 비교 대상이 다릅니다. VACUUM은 죽은 튜플 수를 보고, ANALYZE는 마지막 ANALYZE 이후 삽입·수정·삭제된 행 수의 합(n_mod_since_analyze)을 봅니다 — 삽입만 계속돼도 통계가 낡아 ANALYZE가 필요하기 때문입니다.

스케일 팩터가 테이블 크기에 비례하기 때문에, 행이 억 단위로 커지면 임계값도 같이 커져 VACUUM이 한참 늦게 돕니다. 예를 들어 행 1억 개짜리 테이블은 기본값(0.2)에서 죽은 튜플 2천만 개가 쌓여야 발동합니다. 그래서 대형 테이블은 스케일 팩터를 0에 가깝게 낮추고 절대 임계값(threshold)으로 조절하는 것이 일반적인 튜닝입니다.

`SELECT relname, reltuples, n_dead_tup, n_mod_since_analyze FROM pg_stat_user_tables JOIN pg_class USING (relname) WHERE relname = '테이블명';` 같은 쿼리로 확인할 수 있습니다. reltuples는 마지막 VACUUM·ANALYZE 시점의 추정치라 실시간 정확한 행 수는 아닙니다.

알아두면 좋은 점

  • 산식은 PostgreSQL 공식 문서(runtime-config-autovacuum)의 표를 그대로 옮긴 것이며, 버전에 따라 파라미터 이름·기본값이 바뀔 수 있으니 실제 설정값은 `SHOW autovacuum_vacuum_scale_factor;` 등으로 확인하세요.
  • autovacuum_vacuum_insert_threshold(삽입 전용, PostgreSQL 13+)는 다루지 않습니다 — insert-only 테이블(삭제·수정이 없는 로그성 테이블)은 별도 파라미터로 관리됩니다.
  • 테이블별로 storage parameter(`ALTER TABLE ... SET (autovacuum_vacuum_scale_factor = ...)`)를 걸어두면 전역 설정과 다르게 동작하니, 그 값을 확인해 입력하세요.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 10일 · 결과는 참고용 추정치입니다.