본문으로 건너뛰기

enable_hashagg

버전기본값context타입
14onuserboolean
15onuserboolean
16onuserboolean
17onuserboolean
18onuserboolean
19onuserboolean

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 문서