Re: Parent/child context relation in pg_get_backend_memory_contexts()
Melih Mutlu <m.melihmutlu@gmail.com>
From: Melih Mutlu <m.melihmutlu@gmail.com>
To: David Rowley <dgrowleyml@gmail.com>
Cc: Robert Haas <robertmhaas@gmail.com>,
Michael Paquier <michael@paquier.xyz>, torikoshia <torikoshia@oss.nttdata.com>, Andres Freund <andres@anarazel.de>, Stephen Frost <sfrost@snowman.net>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2024-07-23T10:14:09Z
Lists: pgsql-hackers
Attachments
- v10-0001-Add-path-column-into-pg_backend_memory_contexts.patch (application/octet-stream) patch v10-0001
Hi David, David Rowley <dgrowleyml@gmail.com>, 15 Tem 2024 Pzt, 14:38 tarihinde şunu yazdı: > On Sat, 13 Jul 2024 at 10:12, Melih Mutlu <m.melihmutlu@gmail.com> wrote: > > I updated documentation for path and level columns and also fixed the > tests as level starts from 1. > > Thanks for updating. > > + The <structfield>path</structfield> column can be useful to build > + parent/child relation between memory contexts. For example, the > following > + query calculates the total number of bytes used by a memory context > and its > + child contexts: > > "a memory context" doesn't quite sound specific enough. Let's say what > the query is doing exactly. > Changed "a memory context" with "CacheMemoryContext". > +<programlisting> > +WITH memory_contexts AS ( > + SELECT * > + FROM pg_backend_memory_contexts > +) > +SELECT SUM(total_bytes) > +FROM memory_contexts > +WHERE ARRAY[(SELECT path[array_length(path, 1)] FROM memory_contexts > WHERE name = 'CacheMemoryContext')] <@ path; > > I don't think that example query is the most simple example. Isn't it > better to use the most simple form possible to express that? > > I think it would be nice to give an example of using "level" as an > index into "path" > > WITH c AS (SELECT * FROM pg_backend_memory_contexts) > SELECT sum(c1.total_bytes) > FROM c c1, c c2 > WHERE c2.name = 'CacheMemoryContext' > AND c1.path[c2.level] = c2.path[c2.level]; > I changed the queries in the documentation and regression test to the ones similar to the above query that you shared. + /* > + * Queue up all the child contexts of this level for the next > + * iteration of the outer loop. > + */ > > That outer loop is gone. > Removed that part. > Also, this was due to my hasty writing of the patch. I named the > function get_memory_context_name_and_indent. I meant to write "ident". > If we did get rid of the "parent" column, I'd not see any need to keep > that function. The logic could just be put in > PutMemoryContextsStatsTupleStore(). I just did it that way to avoid > the repeat. > Fixed the name. Also I needed to cast parameters when calling that function as below to get rid of some warnings. + get_memory_context_name_and_ident(context, + (const char **)&name, + (const char **) &ident); Thanks, -- Melih Mutlu Microsoft
Commits
-
Add missing pointer dereference in pg_backend_memory_contexts view
- da87dc07f16e 18.0 landed
-
Add path column to pg_backend_memory_contexts view
- 32d3ed8165f8 18.0 landed
-
Allow memory contexts to have both fixed and variable ident strings.
- 442accc3fe0c 11.0 cited