autovacuum_vacuum_cost_delay
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | 2 milliseconds | sighup | string |
| 15 | 2 milliseconds | sighup | string |
| 16 | 2 milliseconds | sighup | string |
| 17 | 2 milliseconds | sighup | string |
| 18 | 2 milliseconds | sighup | string |
| 19 | 2 milliseconds | sighup | string |
autovacuum이 수행하는 VACUUM에 적용할 cost-based delay 값, 즉 vacuum이 누적 비용 한도에 도달했을 때 쉬는 시간을 정한다. 단위 없이 값을 주면 밀리초로 해석하며, 기본값은 2밀리초다. -1로 설정하면 일반 vacuum_cost_delay 값을 따른다.
cost-based delay는 vacuum이 페이지를 읽고 쓸 때마다 비용을 누적하다가 autovacuum_vacuum_cost_limit에 도달하면 이 시간만큼 잠들게 하는 방식으로 I/O를 조절한다. 따라서 delay와 limit은 한 쌍이다. delay를 키우거나 limit을 줄이면 vacuum이 더 자주·더 오래 쉬어 서비스 부하와의 경합은 줄지만 vacuum 진행은 느려지고, 그만큼 dead tuple 정리가 늦어져 bloat이 쌓일 수 있다. 수동 VACUUM의 기본(vacuum_cost_delay = 0, 즉 조절 없음)과 달리 autovacuum은 기본적으로 이 조절이 켜져 있다. postgresql.conf나 서버 커맨드라인에서 설정하며, 개별 테이블의 storage parameter로 덮어쓸 수 있다.
운영 노트: autovacuum이 테이블 크기를 못 따라가 bloat이 늘어난다면 이 값을 늘리는 방향이 아니라 0에 가깝게 줄이거나
autovacuum_vacuum_cost_limit을 올려 vacuum 처리량을 확보하는 쪽을 먼저 검토한다. PostgreSQL 12에서 기본값이 20ms에서 2ms로 내려간 것도 기존 기본값이 현대 하드웨어에서 지나치게 보수적이었기 때문이다.출처: PostgreSQL 18 문서