Re: [HACKERS] [PATCH] Incremental sort
Antonin Houska <ah@cybertec.at>
Antonin Houska <ah@cybertec.at> wrote:
> Alexander Korotkov <a.korotkov@postgrespro.ru> wrote:
>
> > Patch rebased to current master is attached. I'm going to improve my testing script and post new results.
>
> I wanted to review this patch but incremental-sort-8.patch fails to apply. Can
> you please rebase it again?
I could find the matching HEAD quite easily (9b6cb46), so following are my comments:
* cost_sort()
** "presorted_keys" missing in the prologue
** when called from label_sort_with_costsize(), 0 is passed for
"presorted_keys". However label_sort_with_costsize() can sometimes be
called on an IncrementalSort, in which case there are some "presorted
keys". See create_mergejoin_plan() for example. (IIUC this should only
make EXPLAIN inaccurate, but should not cause incorrect decisions.)
** instead of
if (!enable_incrementalsort)
presorted_keys = false;
you probably meant
if (!enable_incrementalsort)
presorted_keys = 0;
** instead of
/* Extract presorted keys as list of expressions */
foreach(l, pathkeys)
{
PathKey *key = (PathKey *)lfirst(l);
EquivalenceMember *member = (EquivalenceMember *)
lfirst(list_head(key->pk_eclass->ec_members));
you can use linitial():
/* Extract presorted keys as list of expressions */
foreach(l, pathkeys)
{
PathKey *key = (PathKey *)lfirst(l);
EquivalenceMember *member = (EquivalenceMember *)
linitial(key->pk_eclass->ec_members);
* get_cheapest_fractional_path_for_pathkeys()
The prologue says "... at least partially satisfies the given pathkeys ..."
but I see no change in the function code. In particular the use of
pathkeys_contained_in() does not allow for any kind of partial sorting.
* pathkeys_useful_for_ordering()
Extra whitespace following the comment opening string "/*":
/*
* When incremental sort is disabled, pathkeys are useful only when they
* make_sort_from_pathkeys() - the "skipCols" argument should be mentioned in
the prologue.
* create_sort_plan()
I noticed that pathkeys_common() is called, but the value of n_common_pathkeys
should already be in the path's "skipCols" field if the underlying path is
actually IncrementalSortPath.
* create_unique_plan() does not seem to make use of the incremental
sort. Shouldn't it do?
* nodeIncrementalSort.c
** These comments seem to contain typos:
"Incremental sort algorithm would sort by xfollowing groups, which have ..."
"Interate while skip cols are same as in saved tuple"
** (This is rather a pedantic comment) I think prepareSkipCols() should be
defined in front of cmpSortSkipCols().
** the MIN_GROUP_SIZE constant deserves a comment.
* ExecIncrementalSort()
** if (node->tuplesortstate == NULL)
If both branches contain the expression
node->groupsCount++;
I suggest it to be moved outside the "if" construct.
--
Antonin Houska
Cybertec Schönig & Schönig GmbH
Gröhrmühlgasse 26
A-2700 Wiener Neustadt
Web: http://www.postgresql-support.de, http://www.cybertec.at
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