{"Entry":{"collection":"guc","key":"io_max_concurrency","name":"io_max_concurrency","aliases":[],"metadata":{"baseline":false,"boot_human":"Not specified","boot_val":null,"category":"Resource Usage / I/O","category_zh":"","changed_in":["19"],"changes":[{"documentation_changed":false,"fields":{},"from":"17","status":"added","to":"18"},{"documentation_changed":false,"fields":{"extra_desc":{"from":null,"to":"-1 means use a value based on \"shared_buffers\" and the maximum number of processes."}},"from":"18","status":"changed","to":"19"}],"content_hash":"17dabd969d276bcff2636a10cbe60a7dde354fe3f88431a313008476d2729485","context":"","default_changed_in":[],"default_history":[{"from":"18","to":"19","value":"-1"}],"derived_content_hash":"26b4eaed3fc1f5532202fb74781bd7b0842a4e1a7c848bf61693c5e1edee15f2","editorial":{"advice":{"olap":"Raise the per-process ceiling only when one scan or maintenance process cannot keep high-IOPS storage busy and the target-concurrency settings are already appropriate. Compare outstanding-operation counts, throughput, and latency; this parameter does not change request size.","oltp":"Leave -1 until measurements show the automatic per-process ceiling constrains eligible AIO. If setting it explicitly, multiply the value across concurrently active processes and test device queueing plus tail latency after the required restart.","small":"Prefer -1. An explicit high ceiling is multiplied by concurrent processes and can overwhelm a small device even though no single process exceeds its configured limit."},"mechanism":["io_max_concurrency is a PostgreSQL 18 server-start ceiling on the number of I/O operations that one process may execute simultaneously. It is per process, not a reservation and not a cluster-wide cap.","The default -1 asks PostgreSQL to derive a value from shared_buffers and configured process maxima, capped at 64. Because many backends and workers can each reach their own ceiling, possible cluster-wide outstanding I/O can be much larger.","effective_io_concurrency and maintenance_io_concurrency are workload targets below this ceiling; io_method chooses the execution mechanism, and combine limits control bytes per request. Changing io_max_concurrency requires a restart."],"pitfalls":["Treating the per-process ceiling as a cluster-wide I/O limit.","Reading -1 as unlimited rather than automatic sizing capped at 64.","Calling the ceiling reserved capacity; it permits concurrency but does not preallocate I/O slots.","Confusing operation count with io_combine_limit's bytes per request.","Changing the value without a restart or without multiplying exposure across processes."],"references":[{"title":"PostgreSQL 19 Beta 4: io_max_concurrency","url":"https://www.postgresql.org/docs/19/runtime-config-resource.html#GUC-IO-MAX-CONCURRENCY"},{"title":"PostgreSQL 19 release notes","url":"https://www.postgresql.org/docs/19/release-19.html"}],"related":["io_method","io_workers","effective_io_concurrency","maintenance_io_concurrency","io_combine_limit","max_connections"],"summary":"io_max_concurrency — Max number of IOs that one process can execute simultaneously. Observed in PG18–19 Beta 4; its last measured boot default is -1 in PG19 Beta 4, with postmaster context. This is a beta-snapshot fact and can change before PostgreSQL 19 GA."},"enumvals":[],"first_version":"18","group":"Resource Usage","group_slug":"resource","imported_at":"2026-09-27T17:57:31.405386+08:00","intro_commit":{"authored_at":"2025-03-17T18:51:33-04:00","discussion":["https://postgr.es/m/uvrtrknj4kdytuboidbhwclo4gxhswwcpgadptsjvjqcluzmah%40brqs62irg4dt"],"hash":"02844012b304ba80d1c48d51f6fe10bb622490cc","subject":"aio: Basic subsystem initialization","url":"https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=02844012b304ba80d1c48d51f6fe10bb622490cc"},"key":"io_max_concurrency","last_version":"20","max_val":"","min_val":"","name":"io_max_concurrency","position":183,"present_in":["18","19","20"],"repair_provenance":{"original_source_revision":"english-manuals:1dcd04a4e96190a465f3a43a0b75603f5e871780a65ec58a075149572c0c42e3","receipt_sha256":"7c47ce7d53633fe14dc58d993e5fcbd23f8e1e75cd7574893fd5df3b56ebc738","repair":"wiki-repair-20261023"},"short_desc":"Controls the maximum number of I/O operations that one process can execute simultaneously.","short_desc_zh":"","source_rev":"wiki-repair-20261023:fa313c2652d076bcb1c4024e3614b58c5c449ead9f7044052831d552f984226e","unit":"","vartype":"integer"}},"Definition":{"Collection":"guc","Key":"io_max_concurrency","SourceDatabase":"center","Version":"18","SourceTable":"guc","SourceKey":"io_max_concurrency","SourceRevision":"wiki-repair-20261023:fa313c2652d076bcb1c4024e3614b58c5c449ead9f7044052831d552f984226e","Facts":{"boot_val":"-1","category":"Resource Usage / I/O","context":"postmaster","description":"Controls the maximum number of I/O operations that one process can execute simultaneously. The default setting of -1 selects a number based on shared_buffers and the maximum number of processes (max_connections, autovacuum_worker_slots, max_worker_processes and max_wal_senders), but not more than 64. This parameter can only be set at server start.","description_zh":"控制一个进程可以同时执行的最大 I/O 操作数。 默认设置 -1 会根据 shared_buffers 以及最大进程数（max_connections、autovacuum_worker_slots、max_worker_processes 和 max_wal_senders）来选择一个值，但不会超过 64。 此参数只能在服务器启动时设置。","description_zh_html":"\u003cp\u003e\n         控制一个进程可以同时执行的最大 I/O 操作数。\n        \u003c/p\u003e\u003cp\u003e\n         默认设置 \u003ccode class=\"literal\"\u003e-1\u003c/code\u003e 会根据 \u003ca class=\"xref\" href=\"/zh/docs/18/runtime-config-resource.html#GUC-SHARED-BUFFERS\"\u003eshared_buffers\u003c/a\u003e 以及最大进程数（\u003ca class=\"xref\" href=\"/zh/docs/18/runtime-config-connection.html#GUC-MAX-CONNECTIONS\"\u003emax_connections\u003c/a\u003e、\u003ca class=\"xref\" href=\"/zh/docs/18/runtime-config-vacuum.html#GUC-AUTOVACUUM-WORKER-SLOTS\"\u003eautovacuum_worker_slots\u003c/a\u003e、\u003ca class=\"xref\" href=\"/zh/docs/18/runtime-config-resource.html#GUC-MAX-WORKER-PROCESSES\"\u003emax_worker_processes\u003c/a\u003e 和 \u003ca class=\"xref\" href=\"/zh/docs/18/runtime-config-replication.html#GUC-MAX-WAL-SENDERS\"\u003emax_wal_senders\u003c/a\u003e）来选择一个值，但不会超过 \u003ccode class=\"literal\"\u003e64\u003c/code\u003e。\n        \u003c/p\u003e\u003cp\u003e\n         此参数只能在服务器启动时设置。\n        \u003c/p\u003e","doc":{"anchor":"GUC-IO-MAX-CONCURRENCY","file":"runtime-config-resource.html","lang":"en","sha256":"2e207c599f0884dfbe594558c478a2c7c132578981071e980e2015f31dfce28c","slug":"18"},"documented":true,"enumvals":null,"extra_desc":null,"lang":"en","max_val":"1024","metadata_version":"18","min_val":"-1","name":"io_max_concurrency","short_desc":"Max number of IOs that one process can execute simultaneously.","source":"pg-settings-source-snapshot","translation_provenance":{"inputs":[{"kind":"current-pgdoc-translation","path":"/Users/vonng/pgsty/pgdoc/zh/18/html/runtime-config-resource.html","sha256":"f5fedbf88ec5f973aaf4e525c03e46dda2a2186dabee154e26780da96b2ac85a"}],"kind":"same-version-pgdoc","locale":"zh-Hans","source_revision":"b1b500221dbe5437cfca004d6b04d3f6e422765d","version":"18"},"unit":null,"vartype":"integer","zh_from":"same-version-pgdoc"},"ManualEvidence":{"doc":{"anchor":"GUC-IO-MAX-CONCURRENCY","file":"runtime-config-resource.html","lang":"en","sha256":"2e207c599f0884dfbe594558c478a2c7c132578981071e980e2015f31dfce28c","slug":"18"}},"MeasuredEvidence":{"metadata_version":"18"}},"Text":{"Collection":"guc","Key":"io_max_concurrency","SourceDatabase":"center","Version":"18","Locale":"en","Title":"io_max_concurrency","Summary":"Controls the maximum number of I/O operations that one process can execute simultaneously. The default setting of -1 selects a number based on shared_buffers and the maximum number of processes (max_connections, autovacuum_worker_slots, max_worker_processes and max_wal_senders), but not more than 64. This parameter can only be set at server start.","BodyHTML":"\u003cp\u003eControls the maximum number of I/O operations that one process can execute simultaneously. The default setting of -1 selects a number based on shared_buffers and the maximum number of processes (max_connections, autovacuum_worker_slots, max_worker_processes and max_wal_senders), but not more than 64. This parameter can only be set at server start.\u003c/p\u003e","SourceRevision":"wiki-repair-20261023:fa313c2652d076bcb1c4024e3614b58c5c449ead9f7044052831d552f984226e","ContentHash":"f767c1c0673ad0d9fd8db6d7cf298538e4f31b9e5f2af42e72f692637a6c3852","Payload":{"description":"Controls the maximum number of I/O operations that one process can execute simultaneously. The default setting of -1 selects a number based on shared_buffers and the maximum number of processes (max_connections, autovacuum_worker_slots, max_worker_processes and max_wal_senders), but not more than 64. This parameter can only be set at server start."}},"RequestedLocale":"en","Fallback":false,"Versions":["18","19","20"],"Locales":["en","zh-Hans"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
