보통 Vacuum 동작은 비용이나 부하가 많이 필요한 작업이기 때문에 ... 따라서 Vacuum 튜닝은 무작정 최대한 적게 혹은, 최대한 자주 돌도록 튜닝하는 게 아니라 Dead Tuple 정리와 Vacuum의 부하 간 적절한 균형을 찾는 것이 중요합니다. PostgreSQL Vacuum에 대한 거의 모든 것
autovacuum_vacuum_cost_limit
vacuum_cost_delay
autovacuum_vacuum_cost_limit
만큼 프로세스가 완료되면 다음 autovacuum은 vacuum_cost_delay
에 설정된 만큼 sleep 합니다.vacuum_cost_page_hit
vacuum_cost_page_hit
에 설정된 만큼 credit을 소모합니다.vacuum_cost_page_miss
vacuum_cost_page_miss
의 credit을 소모합니다.vacuum_cost_page_dirt
vacuum_cost_page_dirt
의 credit을 소모합니다.autovacuum_vacuum_cost_limit
이 너무 작으면 autovacuum이 dead tuple을 다 정리하지 못한 상태로 끝나 dead tuple이 누적되는 문제가 일어날 수 있습니다.autovacuum_vacuum_cost_limit
이 10이라면 dead tuple을 충분히 정리하기도 전에 새로운 dead tuple이 생겨나며 누적됩니다.autovacuum_vacuum_cost_limit
만큼 vacuum → vacuum_cost_delay
만큼 sleep" 하는 패턴을 반복하여 하나의 autovacuum 프로세스가 수행되는 것으로 보입니다.autovacuum_naptime
autovacuum_naptime
)으로 임계치를 넘었는지 확인하며 임계치를 초과한 경우 autovacuum을 수행한다고 이해하면될거 같습니다.autovacuum_max_workers
max_parallel_maintenance_workers
autovacuum_work_mem
autovacuum_work_mem
(maintenance_work_mem
)에 의해 결정됩니다. 해당 파라미터를 통해 한번에 더 많은 Dead Tuple이 수집될 수 있도록 할 수 있습니다.autovacuum_work_mem
VACUUM, CREATE INDEX 및 ALTER TABLE ADD FOREIGN KEY 같은 유지보수 명령에서 사용되는 최대 메모리 양을 지정한다. ... autovacuum 실행 시 이 메모리에서 autovacuum_max_workers의 배수로 할당할 수 있으므로 기본값을 너무 높게 설정하지 않도록 해야 한다. autovacuum_work_mem을 별도 설정하여 이것을 관리하는 것이 유용할 수 있다.
19.4 리소스 소비
autovacuum_vacuum_scale_factor
& autovacuum_vacuum_scale_threshold
autovacuum_vacuum_insert_scale_factor
& autovacuum_vacuum_scale_threshold
autovacuum_vacuum_cost_delay
autovacuum_vacuum_cost_limit
autovacuum_naptime
autovacuum_max_workers
autovacuum_work_mem
max_parallel_maintenance_workers