메모리 감축 예정인데요
현재 AS-IS 스펙은 아래와 같습니다.
- 물리메모리 : 64G
- max_connection : 500
- shared_buffer : 16G
- work_mem : 64M
- maintenance_work_mem : 1G
여기서 기존 대비 절반인 32G로 감축예정인데요
우선 shared_buffer는 물리메모리의 1/4이 일반적이라고 알고있습니다.
work_mem과 maintenance_work_mem은 물리메모리, max_connection 대비 어떻게 잡으면 좋을까요?
그리고 maintenance_work_mem 의 경우, vacuum 수행관련해서 최대 사용할 수 있는 max가 1G라고 들었는데 사실인지요?
아래 URL에서 확인해본 내용인데 제가 잘못이해하고있는지요?
https://www.postgresql.org/docs/12/runtime-config-resource.html
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
maintenance_work_mem ( integer )
VACUUM , CREATE INDEX 및 와 같은 유지 관리 작업에서 사용할 최대 메모리 양을 지정합니다 ALTER TABLE ADD FOREIGN KEY . 이 값이 단위 없이 지정되면 킬로바이트로 간주됩니다. 기본값은 64MB( 64MB )입니다. 이러한 작업 중 하나만 데이터베이스 세션에서 한 번에 실행할 수 있고 일반적으로 설치 시 많은 작업이 동시에 실행되지 않으므로 이 값을 .보다 훨씬 크게 설정하는 것이 안전합니다 work_mem . 더 큰 설정은 청소 및 데이터베이스 덤프 복원 성능을 향상시킬 수 있습니다.
autovacuum이 실행될 때 이 메모리가 autovacuum_max_workers 배까지 할당될 수 있으므로 기본값을 너무 높게 설정하지 않도록 주의하십시오. autovacuum_work_mem 을 별도로 설정하여 이를 제어하는 것이 유용할 수 있습니다 .
데드 튜플 식별자 컬렉션의 VACUUM 경우 최대 1GB 메모리까지만 활용할 수 있습니다.
autovacuum_work_mem ( integer )
각 autovacuum 작업자 프로세스에서 사용할 최대 메모리 양을 지정합니다. 이 값이 단위 없이 지정되면 킬로바이트로 간주됩니다. 기본값은 -1이며, 이는 maintenance_work_mem 값을 대신 사용해야 함을 나타냅니다. 이 설정은 VACUUM 다른 컨텍스트에서 실행될 때의 동작에 영향을 주지 않습니다. postgresql.conf 이 매개변수는 파일이나 서버 명령줄 에서만 설정할 수 있습니다 .
데드 튜플 식별자 수집의 경우 autovacuum은 최대 1GB 메모리까지만 사용할 수 있으므로 autovacuum_work_mem 이보다 높은 값으로 설정해도 autovacuum이 테이블을 스캔하는 동안 수집할 수 있는 데드 튜플 수에는 영향을 미치지 않습니다.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|