diff options
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/catalogs.sgml | 11 | ||||
-rw-r--r-- | doc/src/sgml/config.sgml | 28 | ||||
-rw-r--r-- | doc/src/sgml/logical-replication.sgml | 22 | ||||
-rw-r--r-- | doc/src/sgml/monitoring.sgml | 5 | ||||
-rw-r--r-- | doc/src/sgml/protocol.sgml | 29 | ||||
-rw-r--r-- | doc/src/sgml/ref/create_subscription.sgml | 24 | ||||
-rw-r--r-- | doc/src/sgml/system-views.sgml | 14 |
7 files changed, 120 insertions, 13 deletions
diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 9316b811ac3..c1e4048054e 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -7913,11 +7913,16 @@ SCRAM-SHA-256$<replaceable><iteration count></replaceable>:<replaceable>&l <row> <entry role="catalog_table_entry"><para role="column_definition"> - <structfield>substream</structfield> <type>bool</type> + <structfield>substream</structfield> <type>char</type> </para> <para> - If true, the subscription will allow streaming of in-progress - transactions + Controls how to handle the streaming of in-progress transactions: + <literal>f</literal> = disallow streaming of in-progress transactions, + <literal>t</literal> = spill the changes of in-progress transactions to + disk and apply at once after the transaction is committed on the + publisher and received by the subscriber, + <literal>p</literal> = apply changes directly using a parallel apply + worker if available (same as 't' if no worker is available) </para></entry> </row> diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 05b3862d09f..a33a93570bd 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -4968,7 +4968,8 @@ ANY <replaceable class="parameter">num_sync</replaceable> ( <replaceable class=" <listitem> <para> Specifies maximum number of logical replication workers. This includes - both apply workers and table synchronization workers. + leader apply workers, parallel apply workers, and table synchronization + workers. </para> <para> Logical replication workers are taken from the pool defined by @@ -5008,6 +5009,31 @@ ANY <replaceable class="parameter">num_sync</replaceable> ( <replaceable class=" </listitem> </varlistentry> + <varlistentry id="guc-max-parallel-apply-workers-per-subscription" xreflabel="max_parallel_apply_workers_per_subscription"> + <term><varname>max_parallel_apply_workers_per_subscription</varname> (<type>integer</type>) + <indexterm> + <primary><varname>max_parallel_apply_workers_per_subscription</varname> configuration parameter</primary> + </indexterm> + </term> + <listitem> + <para> + Maximum number of parallel apply workers per subscription. This + parameter controls the amount of parallelism for streaming of + in-progress transactions with subscription parameter + <literal>streaming = parallel</literal>. + </para> + <para> + The parallel apply workers are taken from the pool defined by + <varname>max_logical_replication_workers</varname>. + </para> + <para> + The default value is 2. This parameter can only be set in the + <filename>postgresql.conf</filename> file or on the server command + line. + </para> + </listitem> + </varlistentry> + </variablelist> </sect2> diff --git a/doc/src/sgml/logical-replication.sgml b/doc/src/sgml/logical-replication.sgml index 7b9bb00e5ae..54f48be87f3 100644 --- a/doc/src/sgml/logical-replication.sgml +++ b/doc/src/sgml/logical-replication.sgml @@ -1501,6 +1501,16 @@ CONTEXT: processing remote data for replication origin "pg_16395" during "INSER might not violate any constraint. This can easily make the subscriber inconsistent. </para> + + <para> + When the streaming mode is <literal>parallel</literal>, the finish LSN of + failed transactions may not be logged. In that case, it may be necessary to + change the streaming mode to <literal>on</literal> or <literal>off</literal> and + cause the same conflicts again so the finish LSN of the failed transaction will + be written to the server log. For the usage of finish LSN, please refer to <link + linkend="sql-altersubscription"><command>ALTER SUBSCRIPTION ... + SKIP</command></link>. + </para> </sect1> <sect1 id="logical-replication-restrictions"> @@ -1809,8 +1819,9 @@ CONTEXT: processing remote data for replication origin "pg_16395" during "INSER <para> <link linkend="guc-max-logical-replication-workers"><varname>max_logical_replication_workers</varname></link> - must be set to at least the number of subscriptions (for apply workers), plus - some reserve for the table synchronization workers. + must be set to at least the number of subscriptions (for leader apply + workers), plus some reserve for the table synchronization workers and + parallel apply workers. </para> <para> @@ -1828,6 +1839,13 @@ CONTEXT: processing remote data for replication origin "pg_16395" during "INSER </para> <para> + <link linkend="guc-max-parallel-apply-workers-per-subscription"><varname>max_parallel_apply_workers_per_subscription</varname></link> + controls the amount of parallelism for streaming of in-progress + transactions with subscription parameter + <literal>streaming = parallel</literal>. + </para> + + <para> Logical replication workers are also affected by <link linkend="guc-wal-receiver-timeout"><varname>wal_receiver_timeout</varname></link>, <link linkend="guc-wal-receiver-status-interval"><varname>wal_receiver_status_interval</varname></link> and diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 5bcba0fdec4..cf220c3bcb4 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -1859,6 +1859,11 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser <entry>Waiting to acquire an advisory user lock.</entry> </row> <row> + <entry><literal>applytransaction</literal></entry> + <entry>Waiting to acquire a lock on a remote transaction being applied + by a logical replication subscriber.</entry> + </row> + <row> <entry><literal>extend</literal></entry> <entry>Waiting to extend a relation.</entry> </row> diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index 03312e07e25..439ef675f3e 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -3103,7 +3103,7 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" <listitem> <para> Protocol version. Currently versions <literal>1</literal>, <literal>2</literal>, - and <literal>3</literal> are supported. + <literal>3</literal>, and <literal>4</literal> are supported. </para> <para> Version <literal>2</literal> is supported only for server version 14 @@ -3113,6 +3113,11 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" Version <literal>3</literal> is supported only for server version 15 and above, and it allows streaming of two-phase commits. </para> + <para> + Version <literal>4</literal> is supported only for server version 16 + and above, and it allows streams of large in-progress transactions to + be applied in parallel. + </para> </listitem> </varlistentry> @@ -6883,6 +6888,28 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" </para> </listitem> </varlistentry> + + <varlistentry> + <term>Int64 (XLogRecPtr)</term> + <listitem> + <para> + The LSN of the abort. This field is available since protocol version + 4. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term>Int64 (TimestampTz)</term> + <listitem> + <para> + Abort timestamp of the transaction. The value is in number + of microseconds since PostgreSQL epoch (2000-01-01). This field is + available since protocol version 4. + </para> + </listitem> + </varlistentry> + </variablelist> </listitem> </varlistentry> diff --git a/doc/src/sgml/ref/create_subscription.sgml b/doc/src/sgml/ref/create_subscription.sgml index 90bd70050dd..eba72c6af62 100644 --- a/doc/src/sgml/ref/create_subscription.sgml +++ b/doc/src/sgml/ref/create_subscription.sgml @@ -228,13 +228,29 @@ CREATE SUBSCRIPTION <replaceable class="parameter">subscription_name</replaceabl </varlistentry> <varlistentry> - <term><literal>streaming</literal> (<type>boolean</type>)</term> + <term><literal>streaming</literal> (<type>enum</type>)</term> <listitem> <para> Specifies whether to enable streaming of in-progress transactions - for this subscription. By default, all transactions - are fully decoded on the publisher and only then sent to the - subscriber as a whole. + for this subscription. The default value is <literal>off</literal>, + meaning all transactions are fully decoded on the publisher and only + then sent to the subscriber as a whole. + </para> + + <para> + If set to <literal>on</literal>, the incoming changes are written to + temporary files and then applied only after the transaction is + committed on the publisher and received by the subscriber. + </para> + + <para> + If set to <literal>parallel</literal>, incoming changes are directly + applied via one of the parallel apply workers, if available. If no + parallel apply worker is free to handle streaming transactions then + the changes are written to temporary files and applied after the + transaction is committed. Note that if an error happens in a + parallel apply worker, the finish LSN of the remote transaction + might not be reported in the server log. </para> </listitem> </varlistentry> diff --git a/doc/src/sgml/system-views.sgml b/doc/src/sgml/system-views.sgml index 143ae5b7bba..1d1b7de8f1e 100644 --- a/doc/src/sgml/system-views.sgml +++ b/doc/src/sgml/system-views.sgml @@ -1379,8 +1379,9 @@ <literal>virtualxid</literal>, <literal>spectoken</literal>, <literal>object</literal>, - <literal>userlock</literal>, or - <literal>advisory</literal>. + <literal>userlock</literal>, + <literal>advisory</literal>, or + <literal>applytransaction</literal>. (See also <xref linkend="wait-event-lock-table"/>.) </para></entry> </row> @@ -1595,6 +1596,15 @@ </para> <para> + Apply transaction locks are used in parallel mode to apply the transaction + in logical replication. The remote transaction id is displayed in the + <structfield>transactionid</structfield> column. The <structfield>objsubid</structfield> + displays the lock subtype which is 0 for the lock used to synchronize the + set of changes, and 1 for the lock used to wait for the transaction to + finish to ensure commit order. + </para> + + <para> <structname>pg_locks</structname> provides a global view of all locks in the database cluster, not only those relevant to the current database. Although its <structfield>relation</structfield> column can be joined |