В мире баз данных, где каждая миллисекунда на счету, а объемы информации растут как на дрожжах, выход PostgreSQL 18 стал настоящим подарком для разработчиков и администраторов. Это не просто косметический апгрейд, а глубокая перестройка подкапотных механизмов, от облачных хранилищ до высоконагруженных OLAP-систем. Давайте разберемся, что там в этом релизе появилось и/или изменилось.

Асинхронный ввод-вывод: от теории к сверхбыстрому чтению данных

Чтобы понять революцию, которую принес PostgreSQL 18, стоит заглянуть в прошлое и вспомнить, как раньше обстояли дела с обработкой дисковых операций. В предыдущих версиях база полагалась на синхронный подход: каждый запрос на чтение данных из хранилища блокировался, пока операционная система не вернет нужный кусок информации, что особенно болезненно сказывалось на последовательных сканированиях таблиц или bitmap-сканированиях индексов. Представьте себе очередь в супермаркете, где каждый покупатель ждет, пока предыдущий полностью оплатит товар, — эффективность падает, а время растягивается. Новая подсистема AIO меняет эту парадигму кардинально, позволяя бэкендам ставить в очередь несколько запросов на чтение одновременно, пока процессоры заняты другими задачами, такими как фильтрация или агрегация результатов. Это не просто оптимизация, а фундаментальный сдвиг, где ввод-вывод перестает быть бутылочным горлышком, а становится фоном для основной работы.

Разработчики из глобального сообщества PostgreSQL, включая таких ключевых фигур, как Andres Freund и Thomas Munro, потратили годы на эту инновацию, интегрируя ее с существующими механизмами вроде shared buffers — общего пула памяти, куда данные загружаются для быстрого доступа. Теперь, когда запрос требует данных с диска, сервер не тратит время на ожидание: он отправляет батч операций в фоновые рабочие процессы или напрямую в ядро ОС, а сам продолжает планировать следующие шаги плана выполнения. В результате, для типичных сценариев вроде вакуумирования таблиц или глубоких последовательных просканирований, пропускная способность чтения вырастает в 2–3 раза, как показали бенчмарки от команды Neon и pganalyze. Конечно, это касается пока только операций чтения — записи и WAL (журнал предзаписей) останутся синхронными в этой версии, но даже такой шаг вперед делает систему заметно отзывчивее, особенно в облачных средах, где задержки сетевого хранения могут достигать десятков миллисекунд.

Но магия AIO раскрывается не только скорости. Возьмем, к примеру, вакуум — процесс, который чистит мертвые кортежи и обновляет статистику, часто становящийся причиной простоев в больших базах. Раньше он мог часами ковыряться в файлах, блокируя другие операции, но теперь, благодаря асинхронным чтениям, этот процесс ускоряется, освобождая ресурсы для пользовательских запросов. Аналогично, bitmap heap scans — метод, где индексы помогают отсеивать ненужные строки на этапе чтения кусков таблицы, — теперь работают плавнее, минимизируя трафик между диском и памятью. А если ваша нагрузка включает аналитику с джойнами на огромных датасетах, то здесь прирост проявится в сокращении времени ожидания, позволяя аналитикам получать insights не через полчаса, а за минуты. В общем, этот механизм не просто ускоряет; он делает базу предсказуемее, снижая пиковые нагрузки на storage и распределяя усилия по времени, что особенно ценно в микросервисах или распределенных системах, где PostgreSQL часто служит надежным ядром.

Настройка тоже продумана с учетом реальной жизни: новый параметр io_method в postgresql.conf дает три варианта поведения, от консервативного 'sync' для тестов до продвинутого 'io_uring' на Linux с ядром 5.1+. По умолчанию стоит 'worker' — универсальный режим с фоновыми процессами, который работает везде и дает солидный буст без лишних хлопот. А чтобы не гадать на кофейной гуще, добавлены параметры вроде io_combine_limit, контролирующие, сколько запросов объединять в один батч, и свежие системные представления, такие как pg_aios, где можно мониторить открытые дескрипторы файлов и эффективность операций. В итоге, администраторы получают инструмент не только для ускорения, но и для тонкой отладки, где каждый грамм производительности поддается контролю, делая миграцию на 18-ю версию не риском, а инвестицией в будущее.

Облачные базы данных

Создайте готовую базу данных в облаке за 5 минут. Поддерживаем PostgreSQL, MySQL, Redis и не только.

Подробнее →

Другие новинки, которые усиливают эффект: от индексов до удобства разработчиков

Хотя асинхронный ввод-вывод крадет шоу, PostgreSQL 18 не ограничивается им — релиз полон фич, которые дополняют его, создавая синергию для еще большего ускорения. Начнем с индексации: теперь планировщик запросов может применять skip scan на B-tree индексах с несколькими колонками, что полезно, когда в условии WHERE пропущен префиксный столбец. Представьте запрос, ищущий клиентов по городу, но без фильтра по региону в индексе 'регион+город' — раньше это приводило к полному сканированию, а теперь система умно "пропускает" ненужные ветки, экономя время и ресурсы. Это особенно заметно в e-commerce или CRM-системах, где запросы часто бывают неидеально структурированы, и такой трюк может сократить время выполнения на 20–50%, усиливая эффект от AIO на этапе чтения данных для индекса.

Еще один плюс для разработчиков — виртуальные генерируемые столбцы. Значения вычисляются только при чтении, а не хранятся на диске, что экономит место и упрощает схемы. Если вы строите вычисляемые поля вроде полного имени из first_name и last_name, то теперь это происходит на лету, без дублирования данных, и интегрируется с AIO для быстрого доступа к базовым столбцам. Параллельно ввели поддержку UUIDv7 — новой версии универсальных идентификаторов, отсортированных по времени, что идеально для распределенных систем: они лучше индексируются, чем случайные UUIDv4, и ускоряют сортировки в запросах. А для тех, кто работает с временными рядами, temporal constraints позволяют задавать проверки вроде "событие не может быть в будущем", делая данные надежнее без лишнего кода в триггерах.

Не обошли вниманием и безопасность с интеграцией: OAuth 2.0 для SSO упрощает авторизацию в корпоративных средах, а улучшения в pg_upgrade — параллельные проверки и флаг --swap для обмена директориями — сокращают время миграции с часов до минут, сохраняя статистику планировщика для мгновенного достижения пиковой производительности. В довершение, EXPLAIN ANALYZE теперь всегда показывает буферы, а SIMD-оптимизации ускоряют обработку JSON и CRC32C-вычисления, что актуально для веб-приложений с API. Все эти изменения дополняют друг друга. Так что AIO не висит в вакууме, а работает в тандеме с остальными улучшениями, поднимая общую эффективность на новый уровень.

Почему стоит обновляться прямо сейчас и как это сделать без боли

Переход на PostgreSQL 18 — это не про модный хайп, а про прагматичный шаг к системе, которая лучше справляется с ростом данных и сложностью запросов, особенно если ваша инфраструктура уже мигрировала в облако или борется с латентностью дисков. Бенчмарки от сообщества, включая тесты на io_uring, подтверждают: для read-heavy нагрузок прирост в 3 раза реален, для ряда сценариев. А для смешанных — все равно заметный буст, плюс меньше простоев от вакуума. Конечно, как и в любом мажорном релизе, стоит протестировать на staging, особенно если вы полагаетесь на расширения, но обратная совместимость здесь на высоте, а инструменты миграции стали умнее.

Начните с установки: скачайте бинарники с официального сайта, соберите с --with-liburing для Linux, чтобы разблокировать максимум, и настройте io_method в conf-файле. Затем запустите pg_upgrade с --jobs для параллелизма — и вуаля, ваша база оживает. PostgreSQL 18 — напоминание, почему open-source база остается на высоте: она эволюционирует с сообществом, делая сложное простым и быстрое еще быстрее. Если вы еще не попробовали, самое время — будущее асинхронных баз уже здесь.

Комментарии (16)


  1. erogov
    27.09.2025 12:17

    Учёный изнасиловал журналиста.

    Benchmarking has demonstrated performance gains of up to 3x in certain scenarios.

    новый асинхронный I/O ускоряет запросы в 3 раза


    1. snuk182
      27.09.2025 12:17

      Я вижу в этих отношениях треугольник. С переводчиком.


  1. Fisher324
    27.09.2025 12:17

    Асинхронное чтение - хооошо бы сравнить с другими популярными бд (ms sql oracle, mysql)

    В ms sql и oracle это уже было вроде.


    1. vvm13xx
      27.09.2025 12:17

      Насколько я помню, в Oracle возможна асинхронная запись в файлы БД (но не в редо-логи) при соответствующих настройках. Т.е., может чистить грязные буфера асинхронно. Чтение синхронно, и я не представляю, как асинхронное чтение могло Oracle чем-то помочь.

      Вообще, статья оставляет... странное впечатление.


      1. Ivan22
        27.09.2025 12:17

        oracle и mssql давно пошли по другому пути - распараллеливание i/o. То есть там есть N потоков на чтение даже одной таблицы и они всю i/o загружают так что быстрее она уже не побежит. Поэтому я думаю асинхронность там не так востребованна


        1. edo1h
          27.09.2025 12:17

          так и в pg вроде давно завезлли распараллеливание длительных операций, вроде seq scan


        1. vvm13xx
          27.09.2025 12:17

          У Oracle SE один коннект соответствует одному серверному процессу. А в пределах одного серверного процесса никакого параллелизма нет. У Oracle EE на один коннект, в зависимости от запроса и его оптимизации, может приходиться несколько серверных процессов, которые могут читать таблицу одновременно. Не вижу, где тут может сыграть асинхронщина. Вот сброс на диск грязных буферов...


  1. OlegAxenow
    27.09.2025 12:17

    Все эти изменения сплетаются в coherentную ткань

    ниже счета за облако и happier команда

    Найдите нейросеть получше или, что ли, читайте то, что пишете... Некогда?

    P.S. Сначала думал - машинный перевод, но нет плашки "перевод"...


  1. welga
    27.09.2025 12:17

    Вопрос от тех.сопровождения. Почему нельзя сохранять, а затем востанавливать БД PostGree через архиватор zip или другой архиватор, а только через программы самого Postgree(pg_dump.exe). БД как-то привязывается к физическому носителю?


    1. DMinsky
      27.09.2025 12:17

      Потому что в процессе архивирования БД продолжает работать, а значит файлы могут меняться прямо посреди этого процесса. В итоге часть файлов будет от одного "состояния БД", часть от другого. Но принципиально это можно делать если предварительно выключить БД.


    1. alan008
      27.09.2025 12:17

      Не такого слова Postgree, есть Postgres и PostgreSQL (два общепринятых названия для данной РСУБД)


    1. ky0
      27.09.2025 12:17

      Конечно же, можно!

      Останавливаете СУБД, архивируете чем вам угодно каталог PGDATA - вуаля.


  1. Chanser
    27.09.2025 12:17

    асинхронный ввод-вывод крадет шоу

    Google translate без вычитки крадет время читателей


    1. edo1h
      27.09.2025 12:17

      мне кажется, что гуглопереводчик давно уже генерирует гораздо более качественный текст


      1. Chanser
        27.09.2025 12:17

        Да, Google translate вполне корректно переводит "steals the show" в данном контексте как "затмевает все остальное". Даже интересно в чем был сделан данный перевод


  1. sitozzz
    27.09.2025 12:17

    Странно, что в статье есть раздел "Почему стоит обновляться прямо сейчас и как это сделать без боли", но на деле там ни слова про обновления с предыдущих версий