Re: [HACKERS] [PATCH] Incremental sort
Alexander Korotkov <a.korotkov@postgrespro.ru>
On Wed, Mar 28, 2018 at 6:38 PM, Alvaro Herrera <alvherre@alvh.no-ip.org>
wrote:
> Teodor Sigaev wrote:
> > > BTW, patch had conflicts with master. Please, find rebased version
> attached.
> >
> > Despite by patch conflist patch looks commitable, has anybody objections
> to
> > commit it?
> >
> > Patch recieved several rounds of review during 2 years, and seems to me,
> > keeping it out from sources may cause a lost it. Although it suggests
> > performance improvement in rather wide usecases.
>
> Can we have a recap on what the patch *does*? I see there's a
> description in Alexander's first email
> https://postgr.es/m/CAPpHfdscOX5an71nHd8WSUH6GNOCf=
> V7wgDaTXdDd9=goN-gfA@mail.gmail.com
> but that was a long time ago, and the patch has likely changed in the
> meantime ...
>
Ggeneral idea hasn't been changed much since first email.
Incremental sort gives benefit when you need to sort your dataset
by some list of columns while you alredy have input presorted
by some prefix of that list of columns. Then you don't do full sort
of dataset, but rather sort groups where values of prefix columns
are equal (see header comment in nodeIncremenalSort.c).
Same example as in the first letter works, but plan displays
differently.
create table test as (select id, (random()*10000)::int as v1, random() as
v2 from generate_series(1,1000000) id);
create index test_v1_idx on test (v1);
# explain select * from test order by v1, v2 limit 10;
QUERY PLAN
-----------------------------------------------------------------------------------------------
Limit (cost=1.26..1.26 rows=10 width=16)
-> Incremental Sort (cost=1.26..1.42 rows=1000000 width=16)
Sort Key: v1, v2
Presorted Key: v1
-> Index Scan using test_v1_idx on test (cost=0.42..47602.50
rows=1000000 width=16)
(5 rows)
# select * from test order by v1, v2 limit 10;
id | v1 | v2
--------+----+--------------------
216426 | 0 | 0.0697950166650116
96649 | 0 | 0.230586454737931
892243 | 0 | 0.677791305817664
323001 | 0 | 0.708638620562851
87458 | 0 | 0.923310813494027
224291 | 0 | 0.9349579163827
446366 | 0 | 0.984529701061547
376781 | 0 | 0.997424073051661
768246 | 1 | 0.127851997036487
666102 | 1 | 0.27093240711838
(10 rows)
------
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