Provide recovery_init_sync_method=syncfs.
authorThomas Munro
Fri, 19 Mar 2021 22:46:32 +0000 (11:46 +1300)
committerThomas Munro
Fri, 19 Mar 2021 23:07:28 +0000 (12:07 +1300)
commit61752afb26404dfc99a535c7a53f7f04dc110263
treedbb477a1f01f495a180e891028e3d1545532881d
parentb822ae13ea93c18326d58d47829bbc66d36fae5c
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
Reviewed-by: Fujii Masao
Reviewed-by: Paul Guo
Reviewed-by: Bruce Momjian
Reviewed-by: Justin Pryzby
Reviewed-by: David Steele
Discussion: https://postgr.es/m/11bc2bb7-ecb5-3ad0-b39f-df632734cd81%40discourse.org
Discussion: https://postgr.es/m/CAEET0ZHGnbXmi8yF3ywsDZvb3m9CbdsGZgfTXscQ6agcbzcZAw%40mail.gmail.com
configure
configure.ac
doc/src/sgml/config.sgml
src/backend/storage/file/fd.c
src/backend/utils/misc/guc.c
src/backend/utils/misc/postgresql.conf.sample
src/include/pg_config.h.in
src/include/storage/fd.h
src/tools/msvc/Solution.pm