DB Internals AtlasPostgreSQL 18.6 Home About

Parameter · Resource Usage / I/O

io_max_concurrency

Max number of IOs that one process can execute simultaneously.

  • Default: -1
  • Type: integer
  • Range: -1 … 1024
  • Applies: Restart required

In plain words

Each process gets a fixed number of slots for asynchronous I/O requests in shared memory. This is that number. The automatic default picks a value from shared_buffers and the number of processes, up to 64.

For DBAs and operators

New in PostgreSQL 18. With -1 the server derives it from shared_buffers and the total number of processes (max_connections, autovacuum_worker_slots, max_worker_processes, max_wal_senders), capped at 64; SHOW io_max_concurrency on a running server shows the resolved number (64 on typical setups). It is a hard cap above effective_io_concurrency: a session never has more I/Os in flight than this. Only consider raising it if you use very high effective_io_concurrency on extremely fast storage; lowering it is a way to limit how hard one backend can hit storage. Changing it needs a restart because the handles live in shared memory.

SHOW io_max_concurrency;
SELECT count(*) FROM pg_aios;   -- I/Os in flight right now

How to change it

Change in postgresql.conf or ALTER SYSTEM, then restart the server.

See it in context

Asynchronous I/O I/O workers

Related parameters

effective_io_concurrency io_method io_max_combine_limit

All Resource Usage parameters