В новой версии Postgres появляется долгожданное обновление, способное серьёзно ускорить работу баз данных. Речь о асинхронном вводе-выводе (async I/O) — функции, которая делает операции чтения с диска в разы эффективнее.
Что это значит?
Когда данные нужно достать с диска, а не из памяти, вступают в игру операции ввода-вывода. В привычной синхронной модели они идут строго по очереди: пока одна операция не завершится, следующая даже не начнётся. В условиях высокой нагрузки это превращается в узкое горлышко, особенно в облачных базах.
Async I/O снимает это ограничение: процессы перестают простаивать и начинают работать параллельно, используя время максимально продуктивно. (Важно: операции записи в Postgres по-прежнему будут оставаться синхронными.)
Простая аналогия
Синхронная модель — как если бы вы заказали еду в ресторане и стояли у стойки, пока её готовят. Всё внимание — только на ожидании.
Асинхронная модель — вы получаете пейджер, идёте за столик и спокойно общаетесь с друзьями. Когда пейджер завибрировал — забираете готовое блюдо.
Где поможет async I/O?
🔵последовательные сканирования (sequential scans)
🔵Чтение из bitmap in-memory индекса (bitmap heap scans)
🔵задачи обслуживания вроде vacuum
С официальным release notes можно ознакомиться тут.
👉 Иными словами, внутренний механизм работы Postgres с persistence storage стал существенно эффективнее. Это не значит, что конкретный
SELECT в приложении будет работать быстрее. Однако, системы под нагрузкой с большим количеством READ операций, скорее всего, будут более производительнымиКак включить?
io_method = worker — данные загружают общие рабочие процессы (поддерживается на всех платформах).io_method = io_uring — для Linux 5.1+ в качестве ассинхронного API ядра можно использовать системные вызовыio_uring, выполняя операции напрямую через backend-процессы.💡 Дополнительно: появится новый системный view -
pg_aios, который позволяет мониторить файловые дискрипторы ядра linux в рамках I/O.Обсудим?👇