Re: Parent/child context relation in pg_get_backend_memory_contexts()

Поиск
Список
Период
Сортировка
От Melih Mutlu
Тема Re: Parent/child context relation in pg_get_backend_memory_contexts()
Дата
Msg-id CAGPVpCRh_CrPRPcrUuOsheEmPR6mpFGVum9cUtH81oG3rnOO=g@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Parent/child context relation in pg_get_backend_memory_contexts()  (David Rowley <dgrowleyml@gmail.com>)
Ответы Re: Parent/child context relation in pg_get_backend_memory_contexts()
Re: Parent/child context relation in pg_get_backend_memory_contexts()
Список pgsql-hackers
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')] &lt;@ 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
Вложения

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

Предыдущее
От: Marlene Reiterer
Дата:
Сообщение: Re: Docs: Order of json aggregate functions
Следующее
От: Thomas Munro
Дата:
Сообщение: Re: CI, macports, darwin version problems