On Fri, Aug 14, 2020 at 01:32:35PM +0000, PG Doc comments form wrote:
> The following documentation comment has been logged on the website:
> 
> Page: https://www.postgresql.org/docs/12/runtime-config-wal.html
> Description:
> 
> Hello,
> 
> First of all I would like to say that PostgreSQL has the best documentation
> I've ever seen. It is very clear and comprehensive. That's the main reason
> why I decided to add my little 2 cents and make it even better. 
> 
> I think that the distinction between first three values of
> synchronous_commit parameter is not clear enough
> (https://www.postgresql.org/docs/12/runtime-config-wal.html#RUNTIME-CONFIG-WAL-SETTINGS).
> 
> " When set to on, commits will wait until replies from the current
> synchronous standby(s) indicate they have received the commit record of the
> transaction and flushed it to disk. This ensures the transaction will not be
> lost unless both the primary and all synchronous standbys suffer corruption
> of their database storage. When set to remote_apply, commits will wait until
> replies from the current synchronous standby(s) indicate they have received
> the commit record of the transaction and applied it, so that it has become
> visible to queries on the standby(s). When set to remote_write, commits will
> wait until replies from the current synchronous standby(s) indicate they
> have received the commit record of the transaction and written it out to
> their operating system. This setting is sufficient to ensure data
> preservation even if a standby instance of PostgreSQL were to crash, but not
> if the standby suffers an operating-system-level crash, since the data has
> not necessarily reached stable storage on the standby"
> 
> The last sentence : "This setting is sufficient to ensure data preservation
> even if a standby instance..." seems to refer only to the remote_write
> option while in my option it should refer to both remote_write and
> remote_apply options, as the fsync is performed only when synchronous_commit
> is set to ON.
> 
> In other words I think that the documentation should be more clear in terms
> of which option uses fsync.

I think this paragraph just has just too complex.  I have moved the
mention of remote_apply into its own paragraph, and simplified the
sentences about remote_write.  Is this attached patch better?

-- 
  Bruce Momjian  <br...@momjian.us>        https://momjian.us
  EnterpriseDB                             https://enterprisedb.com

  The usefulness of a cup is in its emptiness, Bruce Lee

diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
new file mode 100644
index 7a7177c..e3940e5
*** a/doc/src/sgml/config.sgml
--- b/doc/src/sgml/config.sgml
*************** include_dir 'conf.d'
*** 2729,2752 ****
          the commit record of the transaction and flushed it to disk.  This
          ensures the transaction will not be lost unless both the primary and
          all synchronous standbys suffer corruption of their database storage.
-         When set to <literal>remote_apply</literal>, commits will wait until replies
-         from the current synchronous standby(s) indicate they have received the
-         commit record of the transaction and applied it, so that it has become
-         visible to queries on the standby(s).
          When set to <literal>remote_write</literal>, commits will wait until replies
          from the current synchronous standby(s) indicate they have
!         received the commit record of the transaction and written it out to
!         their operating system. This setting is sufficient to
!         ensure data preservation even if a standby instance of
!         <productname>PostgreSQL</productname> were to crash, but not if the standby
!         suffers an operating-system-level crash, since the data has not
          necessarily reached stable storage on the standby.
!         Finally, the setting <literal>local</literal> causes commits to wait for
          local flush to disk, but not for replication.  This is not usually
          desirable when synchronous replication is in use, but is provided for
          completeness.
         </para>
         <para>
          If <varname>synchronous_standby_names</varname> is empty, the settings
          <literal>on</literal>, <literal>remote_apply</literal>, <literal>remote_write</literal>
          and <literal>local</literal> all provide the same synchronization level:
--- 2729,2755 ----
          the commit record of the transaction and flushed it to disk.  This
          ensures the transaction will not be lost unless both the primary and
          all synchronous standbys suffer corruption of their database storage.
          When set to <literal>remote_write</literal>, commits will wait until replies
          from the current synchronous standby(s) indicate they have
!         received the commit record of the transaction and written it to
!         their file systems. This setting ensures data preservation if a standby instance of
!         <productname>PostgreSQL</productname> crashes, but not if the standby
!         suffers an operating-system-level crash because the data has not
          necessarily reached stable storage on the standby.
!         The setting <literal>local</literal> causes commits to wait for
          local flush to disk, but not for replication.  This is not usually
          desirable when synchronous replication is in use, but is provided for
          completeness.
         </para>
         <para>
+         Finally, when set to <literal>remote_apply</literal>, commits will
+         wait until replies from the current synchronous standby(s) indicate
+         they have received the commit record of the transaction and applied
+         it, so that it has become visible to queries on the standby(s).
+         This can cause much larger commit delays than previous settings
+         since it involves WAL replay.
+        </para>
+        <para>
          If <varname>synchronous_standby_names</varname> is empty, the settings
          <literal>on</literal>, <literal>remote_apply</literal>, <literal>remote_write</literal>
          and <literal>local</literal> all provide the same synchronization level:

Reply via email to