vacuum_freeze_min_age
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | 50 million transactions | user | integer |
| 15 | 50 million transactions | user | integer |
| 16 | 50 million transactions | user | integer |
| 17 | 50 million transactions | user | integer |
| 18 | 50 million transactions | user | integer |
| 19 | 50 million transactions | user | integer |
VACUUM이 page의 오래된 XID를 freeze할지 판단하는 cutoff age를 transaction 수로 정한다.
PostgreSQL의 transaction ID(XID)는 32bit 순환 구조라, 오래된 XID는 주기적으로 freeze해 “충분히 과거"라는 표시로 바꿔야 XID wraparound를 피할 수 있다. VACUUM은 처리 중인 page에서 age가 이 값을 넘은 XID를 만나면 freeze한다. 값이 작을수록 미리미리 freeze해 나중에 몰아서 할 일이 줄어드는 대신 WAL 발생량이 늘고, 값이 크면 freeze를 미루는 만큼 aggressive scan 때 부담이 커진다.
기본값은 5,000만 transaction이다. 0부터 10억까지 설정할 수 있지만 VACUUM이 유효값을 autovacuum_freeze_max_age의 절반으로 조용히 제한해, 강제 autovacuum 사이 간격이 지나치게 짧아지지 않게 한다. wraparound 방어 체계에서 이 파라미터가 첫 단계(개별 XID의 freeze 시점)를 맡고, vacuum_freeze_table_age(aggressive scan 전환) → autovacuum_freeze_max_age(anti-wraparound autovacuum 강제) → vacuum_failsafe_age(failsafe)가 차례로 뒤를 받친다.
출처: PostgreSQL 18 문서