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를 비교합니다.