mirror of
https://github.com/postgres/postgres.git
synced 2025-08-31 17:02:12 +03:00
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
This commit is contained in:
@@ -488,6 +488,14 @@ const struct config_enum_entry ssl_protocol_versions_info[] = {
|
||||
StaticAssertDecl(lengthof(ssl_protocol_versions_info) == (PG_TLS1_3_VERSION + 2),
|
||||
"array length mismatch");
|
||||
|
||||
static struct config_enum_entry recovery_init_sync_method_options[] = {
|
||||
{"fsync", RECOVERY_INIT_SYNC_METHOD_FSYNC, false},
|
||||
#ifdef HAVE_SYNCFS
|
||||
{"syncfs", RECOVERY_INIT_SYNC_METHOD_SYNCFS, false},
|
||||
#endif
|
||||
{NULL, 0, false}
|
||||
};
|
||||
|
||||
static struct config_enum_entry shared_memory_options[] = {
|
||||
#ifndef WIN32
|
||||
{"sysv", SHMEM_TYPE_SYSV, false},
|
||||
@@ -4871,6 +4879,15 @@ static struct config_enum ConfigureNamesEnum[] =
|
||||
NULL, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
{"recovery_init_sync_method", PGC_POSTMASTER, ERROR_HANDLING_OPTIONS,
|
||||
gettext_noop("Sets the method for synchronizing the data directory before crash recovery."),
|
||||
},
|
||||
&recovery_init_sync_method,
|
||||
RECOVERY_INIT_SYNC_METHOD_FSYNC, recovery_init_sync_method_options,
|
||||
NULL, NULL, NULL
|
||||
},
|
||||
|
||||
/* End-of-list marker */
|
||||
{
|
||||
{NULL, 0, 0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL
|
||||
|
Reference in New Issue
Block a user