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 nowHow to change it
Change in postgresql.conf or ALTER SYSTEM, then restart the server.