]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Default to wal_sync_method=fdatasync on FreeBSD.
authorThomas Munro <tmunro@postgresql.org>
Mon, 15 Feb 2021 02:43:39 +0000 (15:43 +1300)
committerThomas Munro <tmunro@postgresql.org>
Mon, 15 Feb 2021 03:06:25 +0000 (16:06 +1300)
FreeBSD 13 gained O_DSYNC, which would normally cause wal_sync_method to
choose open_datasync as its default value.  That may not be a good
choice for all systems, and performs worse than fdatasync in some
scenarios.  Let's preserve the existing default behavior for now.

Like commit 576477e73c4, which did the same for Linux, back-patch to all
supported releases.

Discussion: https://postgr.es/m/CA%2BhUKGLsAMXBQrCxCXoW-JsUYmdOL8ALYvaX%3DCrHqWxm-nWbGA%40mail.gmail.com

doc/src/sgml/config.sgml
src/backend/utils/misc/postgresql.conf.sample
src/include/port/freebsd.h

index 3570b422be815a8efddca60f862694085263102c..6daf29188199fa7a242e6b03b4b87cb3d0c9306c 100644 (file)
@@ -2627,7 +2627,7 @@ include_dir 'conf.d'
         Not all of these choices are available on all platforms.
         The default is the first method in the above list that is supported
         by the platform, except that <literal>fdatasync</literal> is the default on
-        Linux.  The default is not necessarily ideal; it might be
+        Linux and FreeBSD.  The default is not necessarily ideal; it might be
         necessary to change this setting or other aspects of your system
         configuration in order to create a crash-safe configuration or
         achieve optimal performance.
index 41191d4f4571fb82221c5ecf999a5c158ae1eea0..07f69226cbee37e5dbfb4179f7c1fcf721a1868d 100644 (file)
 #wal_sync_method = fsync               # the default is the first option
                                        # supported by the operating system:
                                        #   open_datasync
-                                       #   fdatasync (default on Linux)
+                                       #   fdatasync (default on Linux and FreeBSD)
                                        #   fsync
                                        #   fsync_writethrough
                                        #   open_sync
index 2e36d3da4f4a83a45dd3431f6c764e3974db672a..2e2e749a6b65b9305fb480669299b6f75c28505d 100644 (file)
@@ -1 +1,10 @@
 /* src/include/port/freebsd.h */
+
+/*
+ * Set the default wal_sync_method to fdatasync.  xlogdefs.h's normal rules
+ * would prefer open_datasync on FreeBSD 13+, but that is not a good choice on
+ * many systems.
+ */
+#ifdef HAVE_FDATASYNC
+#define PLATFORM_DEFAULT_SYNC_METHOD   SYNC_METHOD_FDATASYNC
+#endif