vacuum_cost_limit
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | 200 | user | integer |
| 15 | 200 | user | integer |
| 16 | 200 | user | integer |
| 17 | 200 | user | integer |
| 18 | 200 | user | integer |
| 19 | 200 | user | integer |
cost 기반 vacuum delay 체계에서, vacuum 프로세스가 vacuum_cost_delay만큼 잠들게 되는 누적 비용의 한도를 정한다. 기본값은 200이다.
vacuum은 페이지를 처리할 때마다 작업 종류별 비용(vacuum_cost_page_hit, vacuum_cost_page_miss, vacuum_cost_page_dirty)을 누적한다. 그 합이 이 한도에 도달하면 vacuum_cost_delay만큼 잠들었다가 카운터를 0으로 리셋하고 작업을 재개한다. 즉 delay가 일정하다면 이 값이 클수록 잠들기 전까지 더 많은 일을 하므로 vacuum이 빨라지고, 작을수록 자주 쉬어 느려진다.
수동 VACUUM은 vacuum_cost_delay 기본값이 0이라 이 한도가 의미가 없지만, autovacuum은 기본적으로 cost 기반 delay가 켜져 있어(autovacuum_vacuum_cost_delay 기본 2ms) 이 값이 autovacuum 처리량을 직접 좌우한다. autovacuum_vacuum_cost_limit이 기본값 -1이면 autovacuum도 이 값을 그대로 물려받는다.
운영 노트: autovacuum이 큰 테이블을 따라가지 못한다면 delay를 줄이는 것과 함께 이 값을 올리는 것이 대표적인 처방이다. 값을 올린 만큼 vacuum의 순간 I/O 사용량이 커지므로 스토리지 여력을 보면서 단계적으로 조정한다.
출처: PostgreSQL 18 문서