본문으로 건너뛰기

6.1 Sort와 work_mem

Sort node는 input row, width, ordering key와 memory에 따라 in-memory quicksort 또는 external merge를 사용할 수 있습니다.

EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM orders ORDER BY amount, created_at;

Output에서 Sort Method, memory 또는 disk 사용량을 확인합니다. Temporary block과 log_temp_files도 production spill을 찾는 데 유용합니다.

SET LOCAL work_mem = '64MB';

work_mem을 올려 spill이 사라지는지 실험하되 한 query에 여러 sort와 hash node, 여러 parallel worker가 있을 수 있음을 고려합니다.

Sort를 피하거나 줄이는 방법

  • 필요한 ordering을 제공하는 index
  • 더 이른 filter와 row 수 감소
  • 반환 column 축소로 row width 감소
  • Incremental Sort가 활용할 prefix ordering
  • 불필요한 ORDER BY 제거

Index ordering은 read를 빠르게 할 수 있지만 write와 storage 비용을 늘립니다. Query frequency와 전체 workload를 비교합니다.