diff options
author | Thomas Munro <tmunro@postgresql.org> | 2021-03-20 11:46:32 +1300 |
---|---|---|
committer | Thomas Munro <tmunro@postgresql.org> | 2021-03-20 12:07:28 +1300 |
commit | 61752afb26404dfc99a535c7a53f7f04dc110263 (patch) | |
tree | dbb477a1f01f495a180e891028e3d1545532881d /doc/src | |
parent | b822ae13ea93c18326d58d47829bbc66d36fae5c (diff) | |
download | postgresql-61752afb26404dfc99a535c7a53f7f04dc110263.tar.gz postgresql-61752afb26404dfc99a535c7a53f7f04dc110263.zip |
Provide recovery_init_sync_method=syncfs.
Since commit 2ce439f3 we have opened every file in the data directory
and called fsync() at the start of crash recovery. This can be very
slow if there are many files, leading to field complaints of systems
taking minutes or even hours to begin crash recovery.
Provide an alternative method, for Linux only, where we call syncfs() on
every possibly different filesystem under the data directory. This is
equivalent, but avoids faulting in potentially many inodes from
potentially slow storage.
The new mode comes with some caveats, described in the documentation, so
the default value for the new setting is "fsync", preserving the older
behavior.
Reported-by: Michael Brown <michael.brown@discourse.org>
Reviewed-by: Fujii Masao <masao.fujii@oss.nttdata.com>
Reviewed-by: Paul Guo <guopa@vmware.com>
Reviewed-by: Bruce Momjian <bruce@momjian.us>
Reviewed-by: Justin Pryzby <pryzby@telsasoft.com>
Reviewed-by: David Steele <david@pgmasters.net>
Discussion: https://postgr.es/m/11bc2bb7-ecb5-3ad0-b39f-df632734cd81%40discourse.org
Discussion: https://postgr.es/m/CAEET0ZHGnbXmi8yF3ywsDZvb3m9CbdsGZgfTXscQ6agcbzcZAw%40mail.gmail.com
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/config.sgml | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 863ac31c6b4..ee4925d6d92 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -9721,6 +9721,41 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' </listitem> </varlistentry> + <varlistentry id="guc-recovery-init-sync-method" xreflabel="recovery_init_sync_method"> + <term><varname>recovery_init_sync_method</varname> (<type>enum</type>) + <indexterm> + <primary><varname>recovery_init_sync_method</varname> configuration parameter</primary> + </indexterm> + </term> + <listitem> + <para> + When set to <literal>fsync</literal>, which is the default, + <productname>PostgreSQL</productname> will recursively open and + synchronize all files in the data directory before crash recovery + begins. The search for files will follow symbolic links for the WAL + directory and each configured tablespace (but not any other symbolic + links). This is intended to make sure that all WAL and data files are + durably stored on disk before replaying changes. This applies whenever + starting a database cluster that did not shut down cleanly, including + copies created with <application>pg_basebackup</application>. + </para> + <para> + On Linux, <literal>syncfs</literal> may be used instead, to ask the + operating system to synchronize the whole file systems that contain the + data directory, the WAL files and each tablespace (but not any other + file systems that may be reachable through symbolic links). This may + be a lot faster than the <literal>fsync</literal> setting, because it + doesn't need to open each file one by one. On the other hand, it may + be slower if a file system is shared by other applications that + modify a lot of files, since those files will also be written to disk. + Furthermore, on versions of Linux before 5.8, I/O errors encountered + while writing data to disk may not be reported to + <productname>PostgreSQL</productname>, and relevant error messages may + appear only in kernel logs. + </para> + </listitem> + </varlistentry> + </variablelist> </sect1> |