Re: Parallel tuplesort (for parallel B-Tree index creation)
Peter Geoghegan <pg@heroku.com>
On Sun, Sep 11, 2016 at 6:28 AM, Heikki Linnakangas <hlinnaka@iki.fi> wrote: > * I renamed "tuplesort_heap_siftup()" to "tuplesort_delete_top()". I realize > that this is controversial, per the discussion on the "Is > tuplesort_heap_siftup() a misnomer?" thread. However, now that we have a new > function, "tuplesort_heap_replace_top()", which is exactly the same > algorithm as the "delete_top()" algorithm, calling one of them "siftup" > became just too confusing. I feel pretty strongly that this was the correct decision. I would have gone further, and removed any mention of "Sift up", but you can't win them all. > * Instead of "root_displace", I used the name "replace_top", and > "delete_top" for the old siftup function. Because we use "top" to refer to > memtuples[0] more commonly than "root", in the existing comments. Fine by me. > * I shared the code between the delete-top and replace-top. Delete-top now > calls the replace-top function, with the last element of the heap. Both > functions have the same signature, i.e. they both take the checkIndex > argument. Peter's patch left that out for the "replace" function, on > performance grounds, but if that's worthwhile, that seems like a separate > optimization. Might be worth benchmarking that separately, but I didn't want > to conflate that with this patch. Okay. > * I replaced a few more siftup+insert calls with the new combined > replace-top operation. Because why not. I suppose that the consistency has value, from a code clarity standpoint. > Thanks for the patch, Peter, and thanks for the review, Claudio! Thanks Heikki! -- Peter Geoghegan
Commits
-
Support parallel btree index builds.
- 9da0cc35284b 11.0 landed
-
Report an ERROR if a parallel worker fails to start properly.
- 2badb5afb89c 11.0 cited
-
Transfer state pertaining to pending REINDEX operations to workers.
- 29d58fd3adae 11.0 landed
-
Add a barrier primitive for synchronizing backends.
- 1145acc70deb 11.0 cited
-
Allow DML commands that create tables to use parallel query.
- e9baa5e9fa14 11.0 cited
-
Refactor GetOldestXmin() to use flags
- af4b1a0869bd 10.0 cited
-
Fix regression in parallel planning against inheritance tables.
- 2609e91fcf9d 10.0 cited
-
Don't create "holes" in BufFiles, in the new logtape code.
- 7ac4a389a7db 10.0 cited
-
Simplify the code for logical tape read buffers.
- b75f467b6eec 10.0 cited
-
Fix excessive memory consumption in the new sort pre-reading code.
- b56fb691b003 10.0 cited
-
Implement binary heap replace-top operation in a smarter way.
- 24598337c8d2 10.0 cited
-
Cosmetic code cleanup in commands/extension.c.
- 25794e841e5b 10.0 cited
-
Speed up planner's scanning for parallel-query hazards.
- da1c91631e35 10.0 cited
-
Read from the same worker repeatedly until it returns no tuple.
- bc7fcab5e36b 9.6.0 cited
-
Improve tuplesort.c to support variable merge order. The original coding
- df700e6b4019 8.2.0 cited