vacuum_failsafe_age
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | 1 | user | integer |
| 15 | 1 | user | integer |
| 16 | 1 | user | integer |
| 17 | 1 | user | integer |
| 18 | 1 | user | integer |
| 19 | 1 | user | integer |
테이블의 pg_class.relfrozenxid age가 이 값에 도달하면 VACUUM이 시스템 전체의 transaction ID(XID) wraparound 장애를 피하기 위한 비상 수단(failsafe)을 발동한다.
VACUUM의 최후 방어선이다. 보통은 wraparound 방지 autovacuum이 한참 돌고 있는데도 age가 계속 오르는 상황에서 발동하지만, 어떤 VACUUM 중에도 발동할 수 있다. failsafe가 발동하면 cost 기반 지연이 해제되고, index vacuuming 같은 필수적이지 않은 유지보수 작업을 건너뛰며, buffer access strategy도 해제되어 VACUUM이 shared buffers 전체를 자유롭게 사용한다 — 다른 모든 것을 제쳐두고 freeze를 최대한 빨리 끝내는 모드다.
기본값은 16억 transaction이다. 0부터 21억까지 설정할 수 있지만, VACUUM이 유효값을 autovacuum_freeze_max_age의 105% 아래로 내려가지 않게 조용히 보정한다. wraparound 방어 체계에서 vacuum_freeze_min_age(개별 XID의 freeze 시점), vacuum_freeze_table_age(aggressive scan 전환), autovacuum_freeze_max_age(anti-wraparound autovacuum 강제)가 차례로 작동한 뒤에도 age가 여기까지 오르면 발동하는 마지막 단계다.
운영 노트: failsafe가 발동했다는 것은 앞 단계 방어선들이 이미 제 역할을 못 했다는 뜻이다.
pg_database.datfrozenxid age를 모니터링해 그 전에 개입하는 것이 정상 운영이고, failsafe 발동 중에는 cost 지연 없이 VACUUM이 전력으로 돌기 때문에 I/O 부하가 급증할 수 있다는 점도 알아 둔다.출처: PostgreSQL 18 문서