pgsql: In array_agg(), don't create a new context for every group.
| От | Jeff Davis |
|---|---|
| Тема | pgsql: In array_agg(), don't create a new context for every group. |
| Дата | |
| Msg-id | E1YPLNS-0003kw-1T@gemulon.postgresql.org обсуждение |
| Список | pgsql-committers |
In array_agg(), don't create a new context for every group. Previously, each new array created a new memory context that started out at 8kB. This is incredibly wasteful when there are lots of small groups of just a few elements each. Change initArrayResult() and friends to accept a "subcontext" argument to indicate whether the caller wants the ArrayBuildState allocated in a new subcontext or not. If not, it can no longer be released separately from the rest of the memory context. Fixes bug report by Frank van Vugt on 2013-10-19. Tomas Vondra. Reviewed by Ali Akbar, Tom Lane, and me. Branch ------ master Details ------- http://git.postgresql.org/pg/commitdiff/b419865a814abbca12bdd6eef6a3d5ed67f432e1 Modified Files -------------- src/backend/executor/nodeSubplan.c | 4 +- src/backend/utils/adt/array_userfuncs.c | 14 +++- src/backend/utils/adt/arrayfuncs.c | 106 +++++++++++++++++++++---------- src/backend/utils/adt/xml.c | 2 +- src/include/utils/array.h | 8 ++- src/pl/plperl/plperl.c | 2 +- 6 files changed, 92 insertions(+), 44 deletions(-)
В списке pgsql-committers по дате отправления: