]> granicus.if.org Git - postgresql/commitdiff
Change default of backend_flush_after GUC to 0 (disabled).
authorAndres Freund <andres@anarazel.de>
Fri, 10 Jun 2016 22:31:11 +0000 (15:31 -0700)
committerAndres Freund <andres@anarazel.de>
Fri, 10 Jun 2016 22:31:11 +0000 (15:31 -0700)
While beneficial, both for throughput and average/worst case latency, in
a significant number of workloads, there are other workloads in which
backend_flush_after can cause significant performance regressions in
comparison to < 9.6 releases. The regression is most likely when the hot
data set is bigger than shared buffers, but significantly smaller than
the operating system's page cache.

I personally think that the benefit of enabling backend flush control is
considerably bigger than the potential downsides, but a fair argument
can be made that not regressing is more important than improving
performance/latency. As the latter is the consensus, change the default
to 0.

The other settings introduced in 428b1d6b2 do not have the same
potential for regressions, so leave them enabled.

Benchmarks leading up to changing the default have been performed by
Mithun Cy, Ashutosh Sharma and Robert Haas.

Discussion: CAD__OuhPmc6XH=wYRm_+Q657yQE88DakN4=Ybh2oveFasHkoeA@mail.gmail.com

doc/src/sgml/config.sgml
src/backend/utils/misc/guc.c
src/backend/utils/misc/postgresql.conf.sample
src/include/storage/bufmgr.h

index 4f93e7062dd5935f1aef375bb0a4ebb0f10e6844..e0e5a1edc607d7bbd8b46ba4bc1971545e0fd7ff 100644 (file)
@@ -2038,9 +2038,9 @@ include_dir 'conf.d'
          than the OS's page cache, where performance might degrade.  This
          setting may have no effect on some platforms.  The valid range is
          between <literal>0</literal>, which disables controlled writeback,
-         and <literal>2MB</literal>.  The default is <literal>128Kb</> on
-         Linux, <literal>0</> elsewhere.  (Non-default values of
-         <symbol>BLCKSZ</symbol> change the default and maximum.)
+         and <literal>2MB</literal>.  The default is <literal>0</> (i.e. no
+         flush control).  (Non-default values of <symbol>BLCKSZ</symbol>
+         change the maximum.)
         </para>
        </listitem>
       </varlistentry>
index cf3eb1a4f1494ac6f2860be65b0598953414485a..9b02111a8342cfa484d8a7d2cc8d362ffe22bb41 100644 (file)
@@ -2457,8 +2457,7 @@ static struct config_int ConfigureNamesInt[] =
                        GUC_UNIT_BLOCKS
                },
                &backend_flush_after,
-               /* see bufmgr.h: OS dependent default */
-               DEFAULT_BACKEND_FLUSH_AFTER, 0, WRITEBACK_MAX_PENDING_FLUSHES,
+               0, 0, WRITEBACK_MAX_PENDING_FLUSHES,
                NULL, NULL, NULL
        },
 
index 3ef2a9761ccf448aadd8c85d55f79b5cb12f2294..8260e371bc9ca8c4b4e6ad623c18a8d780f99c4c 100644 (file)
 #max_parallel_workers_per_gather = 2   # taken from max_worker_processes
 #old_snapshot_threshold = -1           # 1min-60d; -1 disables; 0 is immediate
                                                                        # (change requires restart)
-#backend_flush_after = 0               # 0 disables,
-                                       # default is 128kb on linux, 0 otherwise
+#backend_flush_after = 0               # 0 disables, default is 0
 
 
 #------------------------------------------------------------------------------
index 38b602724e11512e13cf9899c93fcdb038c3acd5..3d5dea7efb553f75815f3e93a9d34d61abbeb29c 100644 (file)
@@ -60,11 +60,9 @@ extern PGDLLIMPORT int NBuffers;
 /* FIXME: Also default to on for mmap && msync(MS_ASYNC)? */
 #ifdef HAVE_SYNC_FILE_RANGE
 #define DEFAULT_CHECKPOINT_FLUSH_AFTER 32
-#define DEFAULT_BACKEND_FLUSH_AFTER 16
 #define DEFAULT_BGWRITER_FLUSH_AFTER 64
 #else
 #define DEFAULT_CHECKPOINT_FLUSH_AFTER 0
-#define DEFAULT_BACKEND_FLUSH_AFTER 0
 #define DEFAULT_BGWRITER_FLUSH_AFTER 0
 #endif   /* HAVE_SYNC_FILE_RANGE */