Re: Backend memory dump analysis

Craig Ringer <craig@2ndquadrant.com>

From: Craig Ringer <craig@2ndquadrant.com>
To: Andres Freund <andres@anarazel.de>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Vladimir Sitnikov <sitnikov.vladimir@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2018-03-26T03:16:33Z
Lists: pgsql-hackers
On 24 March 2018 at 03:01, Andres Freund <andres@anarazel.de> wrote:

> Hi,
>
> On 2018-03-23 14:33:25 -0400, Tom Lane wrote:
> >     func_cxt = AllocSetContextCreate(TopMemoryContext,
> >                                      "PL/pgSQL function context",
> >                                      ALLOCSET_DEFAULT_SIZES);
> >     plpgsql_compile_tmp_cxt = MemoryContextSwitchTo(func_cxt);
> >
> >     function->fn_signature = format_procedure(fcinfo->flinfo->fn_oid);
> > +   MemoryContextSetIdentifier(func_cxt, function->fn_signature);
> >     function->fn_oid = fcinfo->flinfo->fn_oid;
> >     function->fn_xmin = HeapTupleHeaderGetRawXmin(procTup->t_data);
> >
> > This would cost an extra char * field in struct MemoryContextData,
> > which is slightly annoying but it doesn't exactly seem like a killer.
> > Then the memory stats dump code would just need to know to print this
> > field if it isn't NULL.
>
> That's not a bad idea. How about storing a Node* instead of a char*?
> Then we could have MemoryContextStats etc support digging out details
> for a few types, without having to generate strings at runtime.
>

That'd render it pretty useless for extensions, though.

I like the idea of being able to introspect state for particular kinds of
contexts, and not have to generate strings that 99.99% of the time won't
get get looked at.

Function pointers instead of char* ? It adds a significant potential
stability risk to MemoryContextStats() calls, but a great deal of
flexibility.

-- 
 Craig Ringer                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services

Commits

  1. Add memory context identifier to portal context

  2. Rename MemoryContextCopySetIdentifier() for clarity

  3. Allow memory contexts to have both fixed and variable ident strings.

  4. Rethink MemoryContext creation to improve performance.