pgsql: Overload index_form_tuple to allow the memory context to be supp
От | David Rowley |
---|---|
Тема | pgsql: Overload index_form_tuple to allow the memory context to be supp |
Дата | |
Msg-id | E1o9BQC-001WvH-5K@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Overload index_form_tuple to allow the memory context to be supplied 40af10b57 changed things so we make use of a generation memory context for storing tuples to be sorted by tuplesort.c. That change does not play nicely with the changes made in 9f03ca915 (back in 2014). That commit changed things so that index_form_tuple() is called while switched into the tuplestore's tuplecontext. In order to fetch the tuple from the index, index_form_tuple() must do various memory allocations which are unrelated to the storage of the final returned tuple. Although all of these allocations are pfree'd, the fact that we now use a generation context means that the memory for these pfree'd allocations won't be used again by any other allocation due to generation.c's lack of freelists. This could result in sorts used for building indexes exceeding maintenance_work_mem by a very large amount. Here we fix it so we no longer allocate anything apart from the tuple itself into the generation context by adding a new version of index_form_tuple named index_form_tuple_context, which can be called to specify the MemoryContext to allocate the tuple into. Discussion: https://postgr.es/m/CAApHDvrHQkiFRHiGiAS-LMOvJN-eK-s762=tVzBz8ZqUea-a_A@mail.gmail.com Backpatch-through: 15, where 40af10b57 was added. Branch ------ REL_15_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/ae1123f9899fe80935ae344e38f18632beb1bf9a Modified Files -------------- src/backend/access/common/indextuple.c | 29 ++++++++++++++++++++++++----- src/backend/utils/sort/tuplesort.c | 7 ++++--- src/include/access/itup.h | 3 +++ 3 files changed, 31 insertions(+), 8 deletions(-)
В списке pgsql-committers по дате отправления: