본문으로 건너뛰기
vacuum_max_eager_freeze_failure_rate

vacuum_max_eager_freeze_failure_rate

버전기본값context타입
180sighupstring
190sighupstring

vacuum의 eager scanning이 all-frozen 처리에 실패해도 계속 시도할 수 있는 페이지 수를 relation 전체 페이지 대비 비율로 정한다. 실패가 이 비율에 도달하면 eager scanning이 꺼진다. 기본값은 0.03(3%)이고, 0으로 설정하면 eager scanning 자체가 비활성화된다.

PostgreSQL 18에서 도입된 eager freeze 동작을 제어한다. 일반 vacuum은 all-visible로 표시된 페이지를 건너뛰기 때문에, freeze 작업이 계속 미뤄지다가 aggressive vacuum(anti-wraparound vacuum 포함) 한 번에 몰리는 문제가 있었다. eager scanning은 일반 vacuum이 all-visible이지만 아직 all-frozen이 아닌 페이지 일부를 미리 스캔해 freeze를 시도함으로써 이 부담을 평소에 분산시킨다. 이 파라미터는 그 시도의 손절 기준이다. freeze에 실패한 페이지만 상한에 집계되며, 성공한 freeze는 별도로 내부에서 all-visible·not-all-frozen 페이지의 20%까지로 제한된다. 성공분까지 제한하는 이유는 곧 다시 수정될 페이지를 미리 freeze해서 낭비하는 비용을 줄이고, 작업을 여러 번의 일반 vacuum에 걸쳐 분산하기 위해서다. postgresql.conf나 서버 커맨드라인에서 설정하며, 개별 테이블의 storage parameter로 덮어쓸 수 있다.

운영 노트: 대형 테이블에서 aggressive vacuum이 돌 때마다 I/O가 튀는 패턴이 있었다면, 이 기능이 그 비용을 평상시 vacuum으로 분산해 준다. 기본값 3%로 시작하고, 갱신이 거의 없는 콜드 데이터가 많은 테이블이라면 값을 올려 freeze를 더 적극적으로 진행시키는 조정을 검토할 수 있다.

출처: PostgreSQL 18 문서