pgsql: Be smarter about freeing tuples during tuplesorts

Поиск
Список
Период
Сортировка
От David Rowley
Тема pgsql: Be smarter about freeing tuples during tuplesorts
Дата
Msg-id E1oTWp3-000pR6-KW@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Be smarter about freeing tuples during tuplesorts

During dumptuples() the call to writetuple() would pfree any non-null
tuple.  This was quite wasteful as this happens just before we perform a
reset of the context which stores all of those tuples.

It seems to make sense to do a bit of a code refactor to make this work,
so here we just get rid of the writetuple function and adjust the WRITETUP
macro to call the state's writetup function.  The WRITETUP usage in
mergeonerun() always has state->slabAllocatorUsed == true, so writetuple()
would never free the tuple or do any memory accounting.  The only call
path that needs memory accounting done is in dumptuples(), so let's just
do it manually there.

In passing, let's get rid of the state->memtupcount-- code that counts the
memtupcount down to 0 one tuple at a time inside the loop.  That seems to
be a rather inefficient way to set memtupcount to 0, so let's just zero it
after the loop instead.

Author: David Rowley
Discussion: https://postgr.es/m/CAApHDvqZXoDCyrfCzZJR0-xH+7_q+GgitcQiYXUjRani7h4j8Q@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/1083f94dacde5f5b383ca8e18a85babb5cb5e77f

Modified Files
--------------
src/backend/utils/sort/tuplesort.c | 38 +++++++++++++++-----------------------
1 file changed, 15 insertions(+), 23 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: pgsql: doc: simplify WITH clause syntax in CREATE DATABASE
Следующее
От: Bruce Momjian
Дата:
Сообщение: pgsql: doc: show direction is optional in FETCH/MOVE's FROM/IN syntax