postgres.git / summary / log / commit / refs

commit    cc6be07ebde2aef7cc0507f997f563ce77c00a00
Author:   Melanie Plageman <melanieplageman@gmail.com>
Date:     Tue Mar 18 13:08:10 2025 +0000
First released in: 18.0

    Increase default maintenance_io_concurrency to 16
    
    Since its introduction in fc34b0d9de27a, the default
    maintenance_io_concurrency has been larger than the default
    effective_io_concurrency. maintenance_io_concurrency primarily
    controlled prefetching done on behalf of the whole system, for
    operations like recovery. Therefore it makes sense for it to have a
    value equal to or greater than effective_io_concurrency, which controls
    I/O concurrency for reading a relation in a bitmap heap scan.
    
    ff79b5b2ab increased effective_io_concurrency to 16, so we'll increase
    maintenance_io_concurrency as well. For now, though, we'll keep the
    defaults of effective_io_concurrency and maintenance_io_concurrency
    equal to one another (16).
    
    On fast, high IOPs systems, significantly higher values of
    maintenance_io_concurrency are observably beneficial [1]. However, such
    values would flood low IOPs systems and increase overall system I/O
    latency.
    
    It is worth mentioning that since 9256822608f and c3e775e608f,
    maintenance_io_concurrency also controls the I/O concurrency of each
    vacuum worker. Since many autovacuum workers may be simultaneously
    issuing I/Os, we want to keep maintenance_io_concurrency appropriately
    conservative.
    
    [1] https://postgr.es/m/c5d52837-6256-0556-ac8c-d6d3d558820a%40enterprisedb.com
    
    Suggested-by: Jakub Wartak <jakub.wartak@enterprisedb.com>
    Discussion: https://postgr.es/m/CAKZiRmxdHQaU%2B2Zpe6d%3Dx%3D0vigJ1sfWwwVYLJAf%3Dud_wQ_VcUw%40mail.gmail.com


doc/src/sgml/config.sgml | 8 ++++---- src/backend/utils/misc/postgresql.conf.sample | 2 +- src/include/storage/bufmgr.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 7ec18bb7627..6cd190ac1a0 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -2617,10 +2617,10 @@ include_dir 'conf.d' for maintenance work that is done on behalf of many client sessions. </para> <para> - The default is 10 on supported systems, otherwise 0. This value can - be overridden for tables in a particular tablespace by setting the - tablespace parameter of the same name (see - <xref linkend="sql-altertablespace"/>). + The default is <literal>16</literal> on supported systems, otherwise + <literal>0</literal>. This value can be overridden for tables in a + particular tablespace by setting the tablespace parameter of the same + name (see <xref linkend="sql-altertablespace"/>). </para> </listitem> </varlistentry> diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 43c2ec2153e..8ac2beb177b 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -199,7 +199,7 @@ #backend_flush_after = 0 # measured in pages, 0 disables #effective_io_concurrency = 16 # 1-1000; 0 disables prefetching -#maintenance_io_concurrency = 10 # 1-1000; 0 disables prefetching +#maintenance_io_concurrency = 16 # 1-1000; 0 disables prefetching #io_combine_limit = 128kB # usually 1-32 blocks (depends on OS) #io_method = sync # sync (change requires restart) diff --git a/src/include/storage/bufmgr.h b/src/include/storage/bufmgr.h index 79a89f87fcc..7f5def6bada 100644 --- a/src/include/storage/bufmgr.h +++ b/src/include/storage/bufmgr.h @@ -153,7 +153,7 @@ extern PGDLLIMPORT bool track_io_timing; /* only applicable when prefetching is available */ #ifdef USE_PREFETCH #define DEFAULT_EFFECTIVE_IO_CONCURRENCY 16 -#define DEFAULT_MAINTENANCE_IO_CONCURRENCY 10 +#define DEFAULT_MAINTENANCE_IO_CONCURRENCY 16 #else #define DEFAULT_EFFECTIVE_IO_CONCURRENCY 0 #define DEFAULT_MAINTENANCE_IO_CONCURRENCY 0 [parent: 796bdda484c8]