aboutsummaryrefslogtreecommitdiff
path: root/doc/src
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src')
-rw-r--r--doc/src/sgml/func.sgml172
1 files changed, 172 insertions, 0 deletions
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 9ab070adffb..1c5cfee25d1 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -28666,6 +28666,144 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres}
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
+ <primary>pg_get_process_memory_contexts</primary>
+ </indexterm>
+ <function>pg_get_process_memory_contexts</function> ( <parameter>pid</parameter> <type>integer</type>, <parameter>summary</parameter> <type>boolean</type>, <parameter>timeout</parameter> <type>float</type> )
+ <returnvalue>setof record</returnvalue>
+ ( <parameter>name</parameter> <type>text</type>,
+ <parameter>ident</parameter> <type>text</type>,
+ <parameter>type</parameter> <type>text</type>,
+ <parameter>path</parameter> <type>integer[]</type>,
+ <parameter>level</parameter> <type>integer</type>,
+ <parameter>total_bytes</parameter> <type>bigint</type>,
+ <parameter>total_nblocks</parameter> <type>bigint</type>,
+ <parameter>free_bytes</parameter> <type>bigint</type>,
+ <parameter>free_chunks</parameter> <type>bigint</type>,
+ <parameter>used_bytes</parameter> <type>bigint</type>,
+ <parameter>num_agg_contexts</parameter> <type>integer</type>,
+ <parameter>stats_timestamp</parameter> <type>timestamptz</type> )
+ </para>
+ <para>
+ This function handles requests to display the memory contexts of a
+ <productname>PostgreSQL</productname> process with the specified
+ process ID. The function can be used to send requests to backends as
+ well as <glossterm linkend="glossary-auxiliary-proc">auxiliary processes</glossterm>.
+ </para>
+ <para>
+ The returned record contains extended statistics per each memory
+ context:
+ <itemizedlist spacing="compact">
+ <listitem>
+ <para>
+ <parameter>name</parameter> - The name of the memory context.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>ident</parameter> - Memory context ID (if any).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>type</parameter> - The type of memory context, possible
+ values are: AllocSet, Generation, Slab and Bump.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>path</parameter> - Memory contexts are organized in a
+ tree model with TopMemoryContext as the root, and all other memory
+ contexts as nodes in the tree. The <parameter>path</parameter>
+ displays the path from the root to the current memory context. The
+ path is limited to 100 children per node, which each node limited
+ to a max depth of 100, to preserve memory during reporting. The
+ printed path will also be limited to 100 nodes counting from the
+ TopMemoryContext.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>level</parameter> - The level in the tree of the current
+ memory context.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>total_bytes</parameter> - The total number of bytes
+ allocated to this memory context.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>total_nblocks</parameter> - The total number of blocks
+ used for the allocated memory.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>free_bytes</parameter> - The amount of free memory in
+ this memory context.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>free_chunks</parameter> - The number of chunks that
+ <parameter>free_bytes</parameter> corresponds to.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>used_bytes</parameter> - The total number of bytes
+ currently occupied.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>num_agg_contexts</parameter> - The number of memory
+ contexts aggregated in the displayed statistics.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>stats_timestamp</parameter> - When the statistics were
+ extracted from the process.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ When <parameter>summary</parameter> is <literal>true</literal>, statistics
+ for memory contexts at levels 1 and 2 are displayed, with level 1
+ representing the root node (i.e., <literal>TopMemoryContext</literal>).
+ Statistics for contexts on level 2 and below are aggregates of all
+ child contexts' statistics, where <literal>num_agg_contexts</literal>
+ indicate the number aggregated child contexts. When
+ <parameter>summary</parameter> is <literal>false</literal>,
+ <literal>the num_agg_contexts</literal> value is <literal>1</literal>,
+ indicating that individual statistics are being displayed. The levels
+ are limited to the first 100 contexts.
+ </para>
+ <para>
+ Busy processes can delay reporting memory context statistics,
+ <parameter>timeout</parameter> specifies the number of seconds
+ to wait for updated statistics. <parameter>timeout</parameter> can be
+ specified in fractions of a second.
+ </para>
+ <para>
+ After receiving memory context statistics from the target process, it
+ returns the results as one row per context. If all the contexts don't
+ fit within the pre-determined size limit, the remaining context
+ statistics are aggregated and a cumulative total is displayed. The
+ <literal>num_agg_contexts</literal> column indicates the number of
+ contexts aggregated in the displayed statistics. When
+ <literal>num_agg_contexts</literal> is <literal>1</literal> is means
+ that the context statistics are displayed separately.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="func_table_entry"><para role="func_signature">
+ <indexterm>
<primary>pg_log_backend_memory_contexts</primary>
</indexterm>
<function>pg_log_backend_memory_contexts</function> ( <parameter>pid</parameter> <type>integer</type> )
@@ -28802,6 +28940,40 @@ LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560
because it may generate a large number of log messages.
</para>
+ <para>
+ <function>pg_get_process_memory_contexts</function> can be used to request
+ memory contexts statistics of any <productname>PostgreSQL</productname>
+ process. For example:
+<programlisting>
+postgres=# SELECT * FROM pg_get_process_memory_contexts(
+ (SELECT pid FROM pg_stat_activity
+ WHERE backend_type = 'checkpointer'),
+ false, 0.5) LIMIT 1;
+-[ RECORD 1 ]----+------------------------------
+name | TopMemoryContext
+ident |
+type | AllocSet
+path | {1}
+level | 1
+total_bytes | 90304
+total_nblocks | 3
+free_bytes | 2880
+free_chunks | 1
+used_bytes | 87424
+num_agg_contexts | 1
+stats_timestamp | 2025-03-24 13:55:47.796698+01
+</programlisting>
+ <note>
+ <para>
+ While <function>pg_get_process_memory_contexts</function> can be used to
+ query memory contexts of the local backend,
+ <structname>pg_backend_memory_contexts</structname>
+ (see <xref linkend="view-pg-backend-memory-contexts"/> for more details)
+ will be less resource intensive when only the local backend is of interest.
+ </para>
+ </note>
+ </para>
+
</sect2>
<sect2 id="functions-admin-backup">