enable_hashagg
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | on | user | boolean |
| 15 | on | user | boolean |
| 16 | on | user | boolean |
| 17 | on | user | boolean |
| 18 | on | user | boolean |
| 19 | on | user | boolean |
planner가 hash 기반 aggregation plan을 후보로 고려할지 정한다. 기본값은 on이다.
GROUP BY나 DISTINCT를 처리하는 방법은 크게 두 가지다. 입력을 정렬한 뒤 같은 key를 묶어 가는 sort 기반 집계와, hash table에 그룹을 쌓아 가는 hash 기반 집계(HashAggregate)다. hash 집계는 입력이 정렬돼 있을 필요가 없고 그룹 수가 메모리에 담길 정도면 대체로 더 빠르다. hash table의 메모리 한도는 work_mem × hash_mem_multiplier로 계산되며, 한도를 넘으면 디스크로 흘려보내며 진행한다(PostgreSQL 13 이후).
운영 노트: off로 두는 것은 튜닝이 아니라 진단 도구다. HashAggregate가 디스크로 흘러 느려진 것이 의심되면 세션에서 끄고 sort 기반 집계 plan과 EXPLAIN (ANALYZE)로 비교해 본다. 근본 해법은 보통
work_mem 조정 쪽에 있다.출처: PostgreSQL 18 문서