diff options
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/src/sgml/monitoring.sgml | 11 | ||||
| -rw-r--r-- | doc/src/sgml/xfunc.sgml | 45 |
2 files changed, 52 insertions, 4 deletions
diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 588b720f57e..f4fc5d814fb 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -1117,11 +1117,14 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i <note> <para> - Extensions can add <literal>LWLock</literal> types to the list shown in - <xref linkend="wait-event-lwlock-table"/>. In some cases, the name + Extensions can add <literal>Extension</literal> and + <literal>LWLock</literal> types + to the list shown in <xref linkend="wait-event-extension-table"/> and + <xref linkend="wait-event-lwlock-table"/>. In some cases, the name assigned by an extension will not be available in all server processes; - so an <literal>LWLock</literal> wait event might be reported as - just <quote><literal>extension</literal></quote> rather than the + so an <literal>Extension</literal> or <literal>LWLock</literal> wait + event might be reported as just + <quote><literal>extension</literal></quote> rather than the extension-assigned name. </para> </note> diff --git a/doc/src/sgml/xfunc.sgml b/doc/src/sgml/xfunc.sgml index 9620ea9ae38..d6345a775b6 100644 --- a/doc/src/sgml/xfunc.sgml +++ b/doc/src/sgml/xfunc.sgml @@ -3453,6 +3453,51 @@ if (!ptr) </para> </sect2> + <sect2 id="xfunc-addin-wait-events"> + <title>Shared Memory and Custom Wait Events</title> + + <para> + Add-ins can define custom wait events under the wait event type + <literal>Extension</literal>. The add-in's shared library must be + preloaded by specifying it in <literal>shared_preload_libraries</literal>, + and register a <literal>shmem_request_hook</literal> and a + <literal>shmem_startup_hook</literal> in its + <function>_PG_init</function> function. + <literal>shmem_request_hook</literal> can request a shared memory size + to be later used at startup by calling: +<programlisting> +void RequestAddinShmemSpace(int size) +</programlisting> + </para> + <para> + <literal>shmem_startup_hook</literal> can allocate in shared memory + custom wait events by calling while holding the LWLock + <function>AddinShmemInitLock</function> to avoid any race conditions: +<programlisting> +uint32 WaitEventExtensionNew(void) +</programlisting> + Next, each process needs to associate the wait event allocated previously + to a user-facing custom string, which is something done by calling: +<programlisting> +void WaitEventExtensionRegisterName(uint32 wait_event_info, const char *wait_event_name) +</programlisting> + An example can be found in <filename>src/test/modules/worker_spi</filename> + in the PostgreSQL source tree. + </para> + <para> + Custom wait events can be viewed in + <link linkend="monitoring-pg-stat-activity-view"><structname>pg_stat_activity</structname></link>: +<screen> +=# SELECT wait_event_type, wait_event FROM pg_stat_activity + WHERE backend_type ~ 'worker_spi'; + wait_event_type | wait_event +-----------------+----------------- + Extension | worker_spi_main +(1 row) +</screen> + </para> + </sect2> + <sect2 id="extend-cpp"> <title>Using C++ for Extensibility</title> |
