Re: [HACKERS] [PATCH] Incremental sort
Alexander Korotkov <a.korotkov@postgrespro.ru>
Attachments
- incremental-sort-25.patch (application/octet-stream) patch
On Sat, Apr 7, 2018 at 4:56 PM, Alexander Korotkov < a.korotkov@postgrespro.ru> wrote: > On Fri, Apr 6, 2018 at 11:40 PM, Alexander Kuzmenkov < > a.kuzmenkov@postgrespro.ru> wrote: > >> On 06.04.2018 20:26, Tomas Vondra wrote: >> >>> I personally am OK with reducing the scope of the patch like this. It's >>> still beneficial for the common ORDER BY + LIMIT case, which is good. I >>> don't think it may negatively affect other cases (at least I can't think >>> of any). >>> >> >> I think we can reduce it even further. Just try incremental sort along >> with full sort over the cheapest path in create_ordered_paths, and don't >> touch anything else. This is a very minimal and a probably safe start, and >> then we can continue working on other, more complex cases. In the attached >> patch I tried to do this. We probably should also remove changes in >> make_sort() and create a separate function make_incremental_sort() for it, >> but I'm done for today. > > > I've done further unwedding of sort and incremental sort providing them > separate function for plan createion. > > 2) Likewise, I've suggested that the claim about abbreviated keys in >>> >> nodeIncrementalsort.c is dubious. No response, and the XXX comment was >>> instead merged into the patch: >>> >>> * XXX The claim about abbreviated keys seems rather dubious, IMHO. >>> >> >> Not sure about that, maybe just use abbreviated keys for the first >> version? Later we can research this more closely and maybe start deciding >> whether to use abbrev on planning stage. > > > That comes from time when we're trying to make incremental sort to be > always > not worse than full sort. Now, we have separate paths for full and > incremental sorts, > and some costing penalty for incremental sort. So, incremental sort > should be > selected only when it's expected to give big win. Thus, we can give up > with this > optimization at least in the initial version. > > So, removed. > > 4) It's not clear to me why INITIAL_MEMTUPSIZE is defined the way it is. >>> There needs to be a comment - the intent seems to be making it large >>> enough to exceed ALLOCSET_SEPARATE_THRESHOLD, but it's not quite clear >>> why that's a good idea. >>> >> >> Not sure myself, let's ask the other Alexander. > > > I've added comment to INITIAL_MEMTUPSIZE. However, to be fair it's not > invention of this patch. Initial size of memtuples array was so > previously. > What this patch did is just move it to the macro. > > Also, this note hadn't been adressed yet. > > On Sat, Mar 31, 2018 at 11:43 PM, Tomas Vondra <tomas.vondra@ > 2ndquadrant.com> wrote: > >> I'm wondering if a static MIN_GROUP_SIZE is good idea. For example, what >> if the subplan is expected to return only very few tuples (say, 33), but >> the query includes LIMIT 1. Now, let's assume the startup/total cost of >> the subplan is 1 and 1000000. With MIN_GROUP_SIZE 32 we're bound to >> execute it pretty much till the end, while we could terminate after the >> first tuple (if the prefix changes). >> >> So I think we should use a Min(limit,MIN_GROUP_SIZE) here, and perhaps >> this should depend on average group size too. >> > > I agree with that. For bounded sort, attached patch now selects minimal > group > size as Min(DEFAULT_MIN_GROUP_SIZE, bound). That should improve > "LIMIT small_number" case. > I've just noticed that incremental sort now is not used in contrib/postgres_fdw. It's even better assuming that we're going to limit use-cases of incremental sort. I've rolled back all the changes made in tests of contirb/postgres_fdw by this patch. Revised version is attached. ------ Alexander Korotkov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company
Commits
-
Further adjustments to Hashagg EXPLAIN ANALYZE output
- 40efbf8706cd 14.0 cited
-
Rework EXPLAIN format for incremental sort
- 6a918c3ac8a6 13.0 landed
-
Fix typos and improve incremental sort comments
- 1a40d37a9faf 13.0 landed
-
Stabilize incremental_sort tests
- cea09246e578 13.0 landed
-
Minor improvements in Incremental Sort explain
- d22782a5392f 13.0 landed
-
Consider Incremental Sort paths at additional places
- ba3e76cc571e 13.0 landed
-
Fix representation of SORT_TYPE_STILL_IN_PROGRESS.
- c7654f6a3779 13.0 landed
-
Fix failures in incremental_sort due to number of workers
- 23ba3b5ee278 13.0 landed
-
Fix show_incremental_sort_info with force_parallel_mode
- 7d6d82a52493 13.0 landed
-
Implement Incremental Sort
- d2d8a229bc58 13.0 landed
-
Fix handling of "Subplans Removed" field in EXPLAIN output.
- 7d91b604d9b5 13.0 cited
-
Fix EXPLAIN (SETTINGS) to follow policy about when to print empty fields.
- 3ec20c7091e9 13.0 cited
-
Ensure plpgsql result tuples have the right composite type marking.
- 5683b34956b4 13.0 cited
-
Propagate sort instrumentation from workers back to leader.
- bf11e7ee2e36 11.0 cited
-
Make new regression test case parallel-safe, and improve its output.
- 1177ab1dabf7 11.0 cited
-
Push limit through subqueries to underlying sort, where possible.
- 1f6d515a67ec 11.0 cited
-
Fix inappropriate printing of never-measured times in EXPLAIN.
- 4b234fd8bf21 9.6.0 cited
-
Fix some infelicities in EXPLAIN output for parallel query plans.
- 8ebb69f85445 9.6.0 cited