1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-27 22:56:53 +03:00

Increase default vacuum_buffer_usage_limit to 2MB.

The BAS_VACUUM ring size has been 256kB since commit d526575f introduced
the mechanism 17 years ago.  Commit 1cbbee03 recently made it
configurable but retained the traditional default.  The correct default
size has been debated for years, but 256kB is certainly very small.
VACUUM soon needs to write back data it dirtied only 32 blocks ago,
which usually requires flushing the WAL.  New experiments in prefetching
pages for VACUUM exacerbated the problem by crashing into dirty data
even sooner.  Let's make the default 2MB.  That's 1.6% of the default
toy buffer pool size, and 0.2% of 1GB, which would be a considered a
small shared_buffers setting for a real system these days.  Users are
still free to set the GUC to a different value.

Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/20240403221257.md4gfki3z75cdyf6%40awork3.anarazel.de
Discussion: https://postgr.es/m/CA%2BhUKGLY4Q4ZY4f1rvnFtv6%2BPkjNf8MejdPkcju3Qii9DYqqcQ%40mail.gmail.com
This commit is contained in:
Thomas Munro 2024-04-06 23:00:40 +13:00
parent 3bd8439ed6
commit 98f320eb2e
5 changed files with 5 additions and 5 deletions

View File

@ -1961,7 +1961,7 @@ include_dir 'conf.d'
valid sizes range from <literal>128 kB</literal> to valid sizes range from <literal>128 kB</literal> to
<literal>16 GB</literal>. If the specified size would exceed 1/8 the <literal>16 GB</literal>. If the specified size would exceed 1/8 the
size of <varname>shared_buffers</varname>, the size is silently capped size of <varname>shared_buffers</varname>, the size is silently capped
to that value. The default value is <literal>256 kB</literal>. If to that value. The default value is <literal>2MB</literal>. If
this value is specified without units, it is taken as kilobytes. This this value is specified without units, it is taken as kilobytes. This
parameter can be set at any time. It can be overridden for parameter can be set at any time. It can be overridden for
<xref linkend="sql-vacuum"/> and <xref linkend="sql-analyze"/> <xref linkend="sql-vacuum"/> and <xref linkend="sql-analyze"/>

View File

@ -561,7 +561,7 @@ GetAccessStrategy(BufferAccessStrategyType btype)
ring_size_kb = 16 * 1024; ring_size_kb = 16 * 1024;
break; break;
case BAS_VACUUM: case BAS_VACUUM:
ring_size_kb = 256; ring_size_kb = 2048;
break; break;
default: default:

View File

@ -143,7 +143,7 @@ int max_parallel_workers = 8;
int MaxBackends = 0; int MaxBackends = 0;
/* GUC parameters for vacuum */ /* GUC parameters for vacuum */
int VacuumBufferUsageLimit = 256; int VacuumBufferUsageLimit = 2048;
int VacuumCostPageHit = 1; int VacuumCostPageHit = 1;
int VacuumCostPageMiss = 2; int VacuumCostPageMiss = 2;

View File

@ -2275,7 +2275,7 @@ struct config_int ConfigureNamesInt[] =
GUC_UNIT_KB GUC_UNIT_KB
}, },
&VacuumBufferUsageLimit, &VacuumBufferUsageLimit,
256, 0, MAX_BAS_VAC_RING_SIZE_KB, 2048, 0, MAX_BAS_VAC_RING_SIZE_KB,
check_vacuum_buffer_usage_limit, NULL, NULL check_vacuum_buffer_usage_limit, NULL, NULL
}, },

View File

@ -166,7 +166,7 @@
# mmap # mmap
# (change requires restart) # (change requires restart)
#min_dynamic_shared_memory = 0MB # (change requires restart) #min_dynamic_shared_memory = 0MB # (change requires restart)
#vacuum_buffer_usage_limit = 256kB # size of vacuum and analyze buffer access strategy ring; #vacuum_buffer_usage_limit = 2MB # size of vacuum and analyze buffer access strategy ring;
# 0 to disable vacuum buffer access strategy; # 0 to disable vacuum buffer access strategy;
# range 128kB to 16GB # range 128kB to 16GB