보통 Vacuum 동작은 비용이나 부하가 많이 필요한 작업이기 때문에 ... 따라서 Vacuum 튜닝은 무작정 최대한 적게 혹은, 최대한 자주 돌도록 튜닝하는 게 아니라 Dead Tuple 정리와 Vacuum의 부하 간 적절한 균형을 찾는 것이 중요합니다. PostgreSQL Vacuum에 대한 거의 모든 것
autovacuum_vacuum_cost_limitvacuum_cost_delayautovacuum_vacuum_cost_limit만큼 프로세스가 완료되면 다음 autovacuum은 vacuum_cost_delay에 설정된 만큼 sleep 합니다.vacuum_cost_page_hitvacuum_cost_page_hit에 설정된 만큼 credit을 소모합니다.vacuum_cost_page_missvacuum_cost_page_miss의 credit을 소모합니다.vacuum_cost_page_dirtvacuum_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_naptimeautovacuum_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_thresholdautovacuum_vacuum_insert_scale_factor & autovacuum_vacuum_scale_thresholdautovacuum_vacuum_cost_delayautovacuum_vacuum_cost_limitautovacuum_naptimeautovacuum_max_workersautovacuum_work_memmax_parallel_maintenance_workers