Re: Memory-Bounded Hash Aggregation
Jeff Davis <pgsql@j-davis.com>
Attachments
- 0001-Logical-Tape-Set-lazily-allocate-read-buffer.patch (text/x-patch) patch 0001
- 0002-Logical-Tape-Set-change-freelist-to-min-heap.patch (text/x-patch) patch 0002
- 0003-Logical-Tape-Set-add-API-to-extend-with-additional-t.patch (text/x-patch) patch 0003
On Tue, 2020-02-04 at 15:08 -0800, Peter Geoghegan wrote: > Have you tested this against tuplesort.c, particularly parallel > CREATE > INDEX? It would be worth trying to measure any performance impact. > Note that most parallel CREATE INDEX tuplesorts will do a merge > within > each worker, and one big merge in the leader. It's much more likely > to > have multiple passes than a regular serial external sort. I did not observe any performance regression when creating an index in parallel over 20M ints (random ints in random order). I tried 2 parallel workers with work_mem=4MB and also 4 parallel workers with work_mem=256kB. > Have you thought about integer overflow in your heap related > routines? > This isn't as unlikely as you might think. See commit 512f67c8, for > example. It's dealing with blocks rather than tuples, so it's a bit less likely. But changed it to use "unsigned long" instead. > Have you thought about the MaxAllocSize restriction as it concerns > lts->freeBlocks? Will that be okay when you have many more tapes than > before? I added a check. If it exceeds MaxAllocSize, before trying to perform the allocation, just leak the block rather than adding it to the freelist. Perhaps there's a usecase for an extraordinarily-long freelist, but it's outside the scope of this patch. > LogicalTapeSetExtend() seems to work in a way that assumes that the > tape is frozen. It would be good to document that assumption, and > possible enforce it by way of an assertion. The same remark applies > to > any other assumptions you're making there. Can you explain? I am not freezing any tapes in Hash Aggregation, so what about LogicalTapeSetExtend() assumes the tape is frozen? Attached new logtape.c patches. 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