autovacuum_max_workers
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | three | postmaster (재시작) | integer |
| 15 | three | postmaster (재시작) | integer |
| 16 | three | postmaster (재시작) | integer |
| 17 | three | postmaster (재시작) | integer |
| 18 | 3 | sighup | integer |
| 19 | 3 | sighup | integer |
동시에 실행될 수 있는 autovacuum worker 프로세스의 최대 개수를 정한다(autovacuum launcher는 별도). 기본값은 3이다.
worker 수가 부족하면 vacuum 대상 테이블이 많을 때 대기열이 밀려 bloat 정리가 늦어지고, 너무 많으면 vacuum I/O가 서비스 부하와 경합한다. 한 가지 주의할 점은 cost-based delay와의 관계다. autovacuum_vacuum_cost_limit은 실행 중인 worker들에게 비례 배분되므로, worker 수를 늘려도 cost limit을 함께 올리지 않으면 전체 vacuum 처리량은 그대로이고 worker 하나하나만 느려진다.
PostgreSQL 18부터는 이 값을 postgresql.conf reload로 바꿀 수 있다. 다만 실제 worker는 서버 시작 시 autovacuum_worker_slots로 예약된 slot 풀에서 나오므로, autovacuum_worker_slots보다 큰 값을 줘도 그 초과분은 효과가 없다. 17 이하에서는 서버 재시작이 필요했다.
운영 노트: 데이터베이스와 테이블 수가 많은 인스턴스에서 vacuum이 만성적으로 밀린다면 worker 수 증설을 검토하되,
autovacuum_vacuum_cost_limit을 같은 비율로 올려야 실질 처리량이 늘어난다. PostgreSQL 18에서는 slot에 여유를 두고(autovacuum_worker_slots) 필요할 때 이 값만 reload로 조정하는 운영이 가능하다.출처: PostgreSQL 18 문서