diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 7ece94474d9..8c82b39a89d 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -2574,39 +2574,33 @@ include_dir 'conf.d' - Sets the number of concurrent disk I/O operations that + Sets the number of concurrent storage I/O operations that PostgreSQL expects can be executed simultaneously. Raising this value will increase the number of I/O - operations that any individual PostgreSQL session - attempts to initiate in parallel. The allowed range is 1 to 1000, - or zero to disable issuance of asynchronous I/O requests. Currently, - this setting only affects bitmap heap scans. + operations that any individual PostgreSQL + session attempts to initiate in parallel. The allowed range is + 1 to 1000, or + 0 to disable issuance of asynchronous I/O requests. + The default is 16 on supported systems, otherwise + 0. - For magnetic drives, a good starting point for this setting is the - number of separate - drives comprising a RAID 0 stripe or RAID 1 mirror being used for the - database. (For RAID 5 the parity drive should not be counted.) - However, if the database is often busy with multiple queries issued in - concurrent sessions, lower values may be sufficient to keep the disk - array busy. A value higher than needed to keep the disks busy will - only result in extra CPU overhead. - SSDs and other memory-based storage can often process many - concurrent requests, so the best value might be in the hundreds. + Higher values will have the most impact on higher latency storage + where queries otherwise experience noticeable I/O stalls and on + devices with high IOPs. Unnecessarily high values may increase I/O + latency for all queries on the system - Asynchronous I/O requires that the operating system supports issuing - read-ahead advice. If there is no operating system support then - setting this parameter to anything but zero will result in an error. + On systems without prefetch advice support, attempting to configure + any value other than 0 will error out. - The default is 1 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 - ). + This value can be overridden for tables in a particular tablespace by + setting the tablespace parameter of the same name (see ). diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index d2bd329a587..36cb64d7ebc 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -198,7 +198,7 @@ # - I/O - #backend_flush_after = 0 # measured in pages, 0 disables -#effective_io_concurrency = 1 # 1-1000; 0 disables prefetching +#effective_io_concurrency = 16 # 1-1000; 0 disables prefetching #maintenance_io_concurrency = 10 # 1-1000; 0 disables prefetching #io_combine_limit = 128kB # usually 1-32 blocks (depends on OS) diff --git a/src/include/storage/bufmgr.h b/src/include/storage/bufmgr.h index 7c1e4316dde..b204e4731c1 100644 --- a/src/include/storage/bufmgr.h +++ b/src/include/storage/bufmgr.h @@ -152,7 +152,7 @@ extern PGDLLIMPORT bool track_io_timing; /* only applicable when prefetching is available */ #ifdef USE_PREFETCH -#define DEFAULT_EFFECTIVE_IO_CONCURRENCY 1 +#define DEFAULT_EFFECTIVE_IO_CONCURRENCY 16 #define DEFAULT_MAINTENANCE_IO_CONCURRENCY 10 #else #define DEFAULT_EFFECTIVE_IO_CONCURRENCY 0