본문으로 건너뛰기
autovacuum_freeze_max_age

autovacuum_freeze_max_age

버전기본값context타입
14a relatively low 200 million transactionspostmaster (재시작)integer
15a relatively low 200 million transactionspostmaster (재시작)integer
16a relatively low 200 million transactionspostmaster (재시작)integer
17a relatively low 200 million transactionspostmaster (재시작)integer
18a relatively low 200 million transactionspostmaster (재시작)integer
19a relatively low 200 million transactionspostmaster (재시작)integer

테이블의 pg_class.relfrozenxid가 도달할 수 있는 최대 나이를 transaction 수 단위로 정한다. 이 나이를 넘기면 transaction ID(XID) wraparound를 막기 위해 VACUUM이 강제로 실행된다. 기본값은 2억(200,000,000)이다.

PostgreSQL의 XID는 32비트라 언젠가 한 바퀴를 돈다. wraparound가 일어나기 전에 오래된 tuple을 freeze해 두지 않으면 과거 데이터가 미래 데이터로 보이는 참사가 나므로, 테이블 나이가 이 값에 도달하면 autovacuum이 off로 설정돼 있어도 시스템이 anti-wraparound vacuum을 강제로 띄운다. 이 vacuum은 pg_xact 하위 디렉토리의 오래된 commit 상태 파일도 정리할 수 있게 해 주는데, 기본값이 이론적 한계(약 20억)보다 훨씬 낮은 2억으로 잡혀 있는 이유가 이것이다. multixact 쪽 대응 파라미터로는 autovacuum_multixact_freeze_max_age가 있다.

서버 시작 시에만 설정할 수 있고, 개별 테이블의 storage parameter로는 값을 낮추는 방향으로만 덮어쓸 수 있다.

운영 노트: age(relfrozenxid)가 이 값에 접근하는 테이블이 있는지 주기적으로 모니터링해야 한다. anti-wraparound vacuum은 미룰 수 없고 취소해도 다시 뜨기 때문에, 대형 테이블에서 업무 피크 시간에 시작되면 I/O 부담이 크다. 평소 vacuum이 제때 돌아 freeze가 꾸준히 진행되게 하는 것이 최선의 예방이다.

출처: PostgreSQL 18 문서