Skip to content

Commit

Permalink
Reduce the default value of vacuum_cost_page_miss.
Browse files Browse the repository at this point in the history
When commit f425b60 introduced cost based vacuum delays back in 2004,
the defaults reflected then-current trends in hardware, as well as
certain historical limitations in PostgreSQL.  There have been enormous
improvements in both areas since that time.  The cost limit GUC defaults
finally became much more representative of current trends following
commit cbccac3, which decreased autovacuum_vacuum_cost_delay's default
by 10x for PostgreSQL 12 (it went from 20ms to only 2ms).

The relative costs have shifted too.  This should also be accounted for
by the defaults.  More specifically, the relative importance of avoiding
dirtying pages within VACUUM has greatly increased, primarily due to
main memory capacity scaling and trends in flash storage.  Within
Postgres itself, improvements like sequential access during index
vacuuming (at least in nbtree and GiST indexes) have also been
contributing factors.

To reflect all this, decrease the default of vacuum_cost_page_miss to 2.
Since the default of vacuum_cost_page_dirty remains 20, dirtying a page
is now considered 10x "costlier" than a page miss by default.

Author: Peter Geoghegan <pg@bowt.ie>
Discussion: https://postgr.es/m/CAH2-WzmLPFnkWT8xMjmcsm7YS3+_Qi3iRWAb2+_Bc8UhVyHfuA@mail.gmail.com
  • Loading branch information
petergeoghegan committed Jan 27, 2021
1 parent 69059d3 commit e19594c
Show file tree
Hide file tree
Showing 4 changed files with 4 additions and 4 deletions.
2 changes: 1 addition & 1 deletion doc/src/sgml/config.sgml
Expand Up @@ -2116,7 +2116,7 @@ include_dir 'conf.d'
The estimated cost for vacuuming a buffer that has to be read from
disk. This represents the effort to lock the buffer pool,
lookup the shared hash table, read the desired block in from
the disk and scan its content. The default value is 10.
the disk and scan its content. The default value is 2.
</para>
</listitem>
</varlistentry>
Expand Down
2 changes: 1 addition & 1 deletion src/backend/utils/init/globals.c
Expand Up @@ -137,7 +137,7 @@ int max_parallel_workers = 8;
int MaxBackends = 0;

int VacuumCostPageHit = 1; /* GUC parameters for vacuum */
int VacuumCostPageMiss = 10;
int VacuumCostPageMiss = 2;
int VacuumCostPageDirty = 20;
int VacuumCostLimit = 200;
double VacuumCostDelay = 0;
Expand Down
2 changes: 1 addition & 1 deletion src/backend/utils/misc/guc.c
Expand Up @@ -2413,7 +2413,7 @@ static struct config_int ConfigureNamesInt[] =
NULL
},
&VacuumCostPageMiss,
10, 0, 10000,
2, 0, 10000,
NULL, NULL, NULL
},

Expand Down
2 changes: 1 addition & 1 deletion src/backend/utils/misc/postgresql.conf.sample
Expand Up @@ -164,7 +164,7 @@

#vacuum_cost_delay = 0 # 0-100 milliseconds (0 disables)
#vacuum_cost_page_hit = 1 # 0-10000 credits
#vacuum_cost_page_miss = 10 # 0-10000 credits
#vacuum_cost_page_miss = 2 # 0-10000 credits
#vacuum_cost_page_dirty = 20 # 0-10000 credits
#vacuum_cost_limit = 200 # 1-10000 credits

Expand Down

0 comments on commit e19594c

Please sign in to comment.