hash_mem_multiplier
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | 1 | user | string |
| 15 | 2 | user | string |
| 16 | 2 | user | string |
| 17 | 2 | user | string |
| 18 | 2 | user | string |
| 19 | 2 | user | string |
hash 기반 연산이 사용할 수 있는 최대 메모리를 계산하는 배수다. 최종 한도는 work_mem에 hash_mem_multiplier를 곱해 정해지며, 기본값은 2.0으로 hash 기반 연산은 일반 work_mem 기준의 두 배까지 메모리를 쓸 수 있다.
hash join이나 hash 기반 집계는 정렬보다 메모리 부족에 민감해서, 메모리가 모자라 디스크로 spill되면 성능 저하 폭이 크다. 그래서 hash 연산에만 별도의 여유를 주는 것이 이 파라미터의 목적이다. 쿼리 연산의 spill이 상습적으로 발생하는 환경, 특히 work_mem 자체를 올리면 메모리 압박(간헐적인 out of memory 에러 형태로 나타나는 경우가 많다)이 생기는 환경이라면 이 값을 올리는 쪽을 고려할 만하다.
혼합 workload에서는 기본값 2.0이 대체로 무난하다. work_mem을 이미 40MB 이상으로 올려 둔 환경이라면 2.0~8.0 범위의 더 높은 값이 효과적일 수 있다.
운영 노트:
work_mem을 전역으로 올리면 정렬을 포함한 모든 연산의 한도가 함께 커지지만, hash_mem_multiplier는 hash 연산에만 선별적으로 여유를 준다. hash 집계의 디스크 spill이 문제라면 work_mem보다 이쪽을 먼저 조정하는 편이 메모리 예산 관리에 유리하다.출처: PostgreSQL 18 문서