postgres.git / summary / log / commit / refs

commit    4bc0f165cb4fbd660648c0153485b3d6f55d80ea
Author:   Andres Freund <andres@anarazel.de>
Date:     Fri Jun 10 22:31:11 2016 +0000

    Change default of backend_flush_after GUC to 0 (disabled).
    
    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 | 6 +++--- src/backend/utils/misc/guc.c | 3 +-- src/backend/utils/misc/postgresql.conf.sample | 3 +-- src/include/storage/bufmgr.h | 2 -- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 4f93e7062dd..e0e5a1edc60 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -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> diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index cf3eb1a4f14..9b02111a834 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -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 }, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 3ef2a9761cc..8260e371bc9 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -170,8 +170,7 @@ #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 #------------------------------------------------------------------------------ diff --git a/src/include/storage/bufmgr.h b/src/include/storage/bufmgr.h index 38b602724e1..3d5dea7efb5 100644 --- a/src/include/storage/bufmgr.h +++ b/src/include/storage/bufmgr.h @@ -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 */ [parent: 3303ea1a327b]