1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-27 12:41:57 +03:00

Enable IO concurrency on all systems

Previously effective_io_concurrency and maintenance_io_concurrency could not
be set above 0 on machines without fadvise support. AIO enables IO concurrency
without such support, via io_method=worker.

Currently only subsystems using the read stream API will take advantage of
this. Other users of maintenance_io_concurrency (like recovery prefetching)
which leverage OS advice directly will not benefit from this change. In those
cases, maintenance_io_concurrency will have no effect on I/O behavior.

Author: Melanie Plageman <melanieplageman@gmail.com>
Reviewed-by: Noah Misch <noah@leadboat.com>
Discussion: https://postgr.es/m/CAAKRu_atGgZePo=_g6T3cNtfMf0QxpvoUh5OUqa_cnPdhLd=gw@mail.gmail.com
This commit is contained in:
Andres Freund
2025-03-30 19:14:55 -04:00
parent ae3df4b341
commit 2a5e709e72
10 changed files with 14 additions and 67 deletions

View File

@ -2585,8 +2585,7 @@ include_dir 'conf.d'
session attempts to initiate in parallel. The allowed range is
<literal>1</literal> to <literal>1000</literal>, or
<literal>0</literal> to disable issuance of asynchronous I/O requests.
The default is <literal>16</literal> on supported systems, otherwise
<literal>0</literal>.
The default is <literal>16</literal>.
</para>
<para>
@ -2597,8 +2596,9 @@ include_dir 'conf.d'
</para>
<para>
On systems without prefetch advice support, attempting to configure
any value other than <literal>0</literal> will error out.
On systems with prefetch advice support,
<varname>effective_io_concurrency</varname> also controls the
prefetch distance.
</para>
<para>
@ -2621,10 +2621,10 @@ include_dir 'conf.d'
for maintenance work that is done on behalf of many client sessions.
</para>
<para>
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"/>).
The default is <literal>16</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>

View File

@ -88,7 +88,7 @@ ALTER TABLESPACE <replaceable>name</replaceable> RESET ( <replaceable class="par
and <varname>maintenance_io_concurrency</varname>.
Setting these values for a particular tablespace will override the
planner's usual estimate of the cost of reading pages from tables in
that tablespace, and the executor's prefetching behavior, as established
that tablespace, and how many concurrent I/Os are issued, as established
by the configuration parameters of the
same name (see <xref linkend="guc-seq-page-cost"/>,
<xref linkend="guc-random-page-cost"/>,

View File

@ -110,7 +110,7 @@ CREATE TABLESPACE <replaceable class="parameter">tablespace_name</replaceable>
and <varname>maintenance_io_concurrency</varname>.
Setting these values for a particular tablespace will override the
planner's usual estimate of the cost of reading pages from tables in
that tablespace, and the executor's prefetching behavior, as established
that tablespace, and how many concurrent I/Os are issued, as established
by the configuration parameters of the
same name (see <xref linkend="guc-seq-page-cost"/>,
<xref linkend="guc-random-page-cost"/>,