Re: Memory-Bounded Hash Aggregation
Jeff Davis <pgsql@j-davis.com>
Attachments
- hashagg-20191127.diff (text/x-patch) patch
On Wed, 2019-08-28 at 12:52 -0700, Taylor Vesely wrote: > Right now the patch always initializes 32 spill partitions. Have you > given > any thought into how to intelligently pick an optimal number of > partitions yet? Attached a new patch that addresses this. 1. Divide hash table memory used by the number of groups in the hash table to get the average memory used per group. 2. Multiply by the number of groups spilled -- which I pessimistically estimate as the number of tuples spilled -- to get the total amount of memory that we'd like to have to process all spilled tuples at once. 3. Divide the desired amount of memory by work_mem to get the number of partitions we'd like to have such that each partition can be processed in work_mem without spilling. 4. Apply a few sanity checks, fudge factors, and limits. Using this runtime information should be substantially better than using estimates and projections. Additionally, I removed some branches from the common path. I think I still have more work to do there. I also rebased of course, and fixed a few other things. Regards, Jeff Davis
Commits
-
Fix costing for disk-based hash aggregation.
- 7351bfeda33b 13.0 landed
-
Fixes for Disk-based Hash Aggregation.
- 64fe60227909 13.0 landed
-
Disk-based Hash Aggregation.
- 1f39bce02154 13.0 landed
-
Extend ExecBuildAggTrans() to support a NULL pointer check.
- c954d4904650 13.0 landed
-
Save calculated transitionSpace in Agg node.
- c11cb17dc55a 13.0 landed
-
Minor refactor of nodeAgg.c.
- 5b618e1f48ae 13.0 landed
-
Logical Tape Set: lazily allocate read buffer.
- 7fdd919ae755 13.0 landed
-
Introduce TupleHashTableHash() and LookupTupleHashEntryHash().
- 4eaea3db150a 13.0 landed
-
Logical Tape Set: use min heap for freelist.
- c02fdc922301 13.0 landed
-
Fix comments in execGrouping.c
- 30d47723fd15 13.0 landed
-
Avoid integer overflow while sifting-up a heap in tuplesort.c.
- 512f67c8d02c 10.0 cited
-
Make the overflow guards in ExecChooseHashTableSize be more protective.
- 8442317beb8f 9.0.0 cited
-
Improve performance of our private version of qsort. Per recent testing,
- a3f0b3d68f9a 8.2.0 cited