Re: [PATCH] Incremental sort
Robert Haas <robertmhaas@gmail.com>
On Fri, May 5, 2017 at 11:13 AM, Alexander Korotkov <a.korotkov@postgrespro.ru> wrote: > Incremental sort is faster in vast majority of cases. It appears to be > slower only when whose dataset is one sort group. In this case incremental > sort is useless, and it should be considered as misuse of incremental sort. > Slowdown is related to the fact that we anyway have to do extra comparisons, > unless we somehow push our comparison result into qsort itself and save some > cpu cycles (but that would be unreasonable break of encapsulation). Thus, > in such cases regression seems to be inevitable anyway. I think we could > evade this regression during query planning. If we see that there would be > only few groups, we should choose plain sort instead of incremental sort. I'm sorry that I don't have time to review this in detail right now, but it sounds like you are doing good work to file down cases where this might cause regressions, which is great. Regarding the point in the paragraph above, I'd say that it's OK for the planner to be responsible for picking between Sort and Incremental Sort in some way. It is, after all, the planner's job to decide between different strategies for executing the same query and, of course, sometimes it will be wrong, but that's OK as long as it's not wrong too often (or by too much, hopefully). It may be a little difficult to get this right, though, because I'm not sure that the information you need actually exists (or is reliable). For example, consider the case where we need to sort 100m rows and there are 2 groups. If 1 group contains 1 row and the other group contains all of the rest, there is really no point in an incremental sort. On the other hand, if each group contains 50m rows and we can get the data presorted by the grouping column, there might be a lot of point to an incremental sort, because two 50m-row sorts might be a lot cheaper than one 100m sort. More generally, it's quite easy to imagine situations where the individual groups can be quicksorted but sorting all of the rows requires I/O, even when the number of groups isn't that big. On the other hand, the real sweet spot for this is probably the case where the number of groups is very large, with many single-row groups or many groups with just a few rows each, so if we can at least get this to work in those cases that may be good enough. On the third hand, when costing aggregation, I think we often underestimate the number of groups and there might well be similar problems here. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL 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