maintenance_work_mem
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | — | user | integer |
| 15 | — | user | integer |
| 16 | — | user | integer |
| 17 | — | user | integer |
| 18 | — | user | integer |
| 19 | — | user | integer |
VACUUM, CREATE INDEX, ALTER TABLE ADD FOREIGN KEY 같은 유지보수 작업이 사용할 수 있는 메모리 상한을 정한다. 단위 없이 값을 주면 킬로바이트로 해석하며, 기본값은 64MB다.
이런 유지보수 작업은 한 세션에서 동시에 하나만 실행되고, 보통 한 서버에서 여러 개가 한꺼번에 도는 일도 드물다. 그래서 work_mem보다 훨씬 크게 잡아도 안전하다. 값을 키우면 vacuum 속도가 빨라지고, 덤프를 복원할 때 인덱스 생성 같은 작업도 빨라진다.
다만 autovacuum이 돌 때는 worker마다 이 메모리가 할당될 수 있다. 즉 최대 autovacuum_max_workers 배만큼 메모리를 쓸 수 있으므로, autovacuum까지 고려하면 무작정 크게 잡는 것은 위험하다. autovacuum worker에만 다른 한도를 주고 싶다면 autovacuum_work_mem을 따로 설정해 분리할 수 있다.
운영 노트: 인덱스 재생성이나 대량 데이터 적재 같은 일회성 작업에서는 세션 단위로
maintenance_work_mem을 크게 올려 시간을 단축하고, 전역 기본값은 autovacuum worker 수와 곱해서 메모리가 감당되는 선으로 잡는 것이 무난하다.출처: PostgreSQL 18 문서