pgsql: Use Generation memory contexts to store tuples in sorts

From: David Rowley <drowley(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Use Generation memory contexts to store tuples in sorts
Date: 2022-04-04 10:53:35
Message-ID: E1nbKL0-000GnS-OR@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Use Generation memory contexts to store tuples in sorts

The general usage pattern when we store tuples in tuplesort.c is that
we store a series of tuples one by one then either perform a sort or spill
them to disk. In the common case, there is no pfreeing of already stored
tuples. For the common case since we do not individually pfree tuples, we
have very little need for aset.c memory allocation behavior which
maintains freelists and always rounds allocation sizes up to the next
power of 2 size.

Here we conditionally use generation.c contexts for storing tuples in
tuplesort.c when the sort will never be bounded. Unfortunately, the
memory context to store tuples is already created by the time any calls
would be made to tuplesort_set_bound(), so here we add a new sort option
that allows callers to specify if they're going to need a bounded sort or
not. We'll use a standard aset.c allocator when this sort option is not
set.

Extension authors must ensure that the TUPLESORT_ALLOWBOUNDED flag is
used when calling tuplesort_begin_* for any sorts that make a call to
tuplesort_set_bound().

Author: David Rowley
Reviewed-by: Andy Fan
Discussion: https://postgr.es/m/CAApHDvoH4ASzsAOyHcxkuY01Qf++8JJ0paw+03dk+W25tQEcNQ@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/40af10b571bdabbab06839d090083c9f9c2091d2

Modified Files
--------------
src/backend/executor/nodeIncrementalSort.c | 4 +++-
src/backend/executor/nodeSort.c | 2 ++
src/backend/utils/sort/tuplesort.c | 20 ++++++++++++++++----
src/include/utils/tuplesort.h | 3 +++
4 files changed, 24 insertions(+), 5 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Robert Haas 2022-04-04 14:45:00 pgsql: pg_basebackup: Fix code that thinks about LZ4 buffer size.
Previous Message David Rowley 2022-04-04 10:25:26 pgsql: Adjust tuplesort API to have bitwise option flags