Re: Memory-Bounded Hash Aggregation
Jeff Davis <pgsql@j-davis.com>
Attachments
- hashagg-20190711.patch (text/x-patch) patch
On Thu, 2019-07-11 at 17:55 +0200, Tomas Vondra wrote: > Makes sense. I haven't thought about how the hybrid approach would be > implemented very much, so I can't quite judge how complicated would > it be > to extend "approach 1" later. But if you think it's a sensible first > step, > I trust you. And I certainly agree we need something to compare the > other > approaches against. Is this a duplicate of your previous email? I'm slightly confused but I will use the opportunity to put out another WIP patch. The patch could use a few rounds of cleanup and quality work, but the funcionality is there and the performance seems reasonable. I rebased on master and fixed a few bugs, and most importantly, added tests. It seems to be working with grouping sets fine. It will take a little longer to get good performance numbers, but even for group size of one, I'm seeing HashAgg get close to Sort+Group in some cases. You are right that the missed lookups appear to be costly, at least when the data all fits in system memory. I think it's the cache misses, because sometimes reducing work_mem improves performance. I'll try tuning the number of buckets for the hash table and see if that helps. If not, then the performance still seems pretty good to me. Of course, HashAgg can beat sort for larger group sizes, but I'll try to gather some more data on the cross-over point. 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