autovacuum_vacuum_insert_scale_factor
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | 0 | sighup | string |
| 15 | 0 | sighup | string |
| 16 | 0 | sighup | string |
| 17 | 0 | sighup | string |
| 18 | 0 | sighup | string |
| 19 | 0 | sighup | string |
삽입된 tuple 수 기준으로 autovacuum이 VACUUM을 일으킬지 판단할 때, autovacuum_vacuum_insert_threshold에 더할 비율을 정한다. PostgreSQL 18 기준으로 테이블에서 아직 freeze되지 않은 페이지의 비율이며, 기본값은 0.2(20%)다.
autovacuum_vacuum_scale_factor가 갱신·삭제로 생긴 dead tuple을 겨냥한다면, 이 파라미터는 삽입 위주 테이블을 겨냥한다. 삽입만 일어나는 테이블은 dead tuple 기준으로는 vacuum이 영영 돌지 않는데, 그러면 visibility map이 갱신되지 않아 index-only scan이 효율을 잃고 freeze도 미뤄져 나중에 anti-wraparound vacuum이 한꺼번에 몰아친다. 이를 막기 위해 삽입 tuple 수가 autovacuum_vacuum_insert_threshold + autovacuum_vacuum_insert_scale_factor × 기준 페이지(행) 수를 넘으면 vacuum이 실행된다. PostgreSQL 17까지는 테이블 전체 크기 비율이었지만, 18부터는 unfrozen 페이지 비율로 바뀌어 이미 freeze가 끝난 영역은 계산에서 빠진다. postgresql.conf나 서버 커맨드라인에서 설정하며, 개별 테이블의 storage parameter로 덮어쓸 수 있다.
운영 노트: append-only 성격의 로그·이력 테이블에서 freeze 부채가 쌓이는 것을 평소에 분산 처리하는 장치이므로 끄지 않는 것이 좋다. 대형 append-only 테이블이라면 테이블 단위로 이 값을 낮춰 vacuum을 더 자주 돌게 하면 anti-wraparound vacuum 폭탄을 예방할 수 있다.
출처: PostgreSQL 18 문서