Postgres Pro Enterprise 17: Обзор возможностей СУБД

28 марта 2025Уровень технический

Proxima — три в одном для масштабирования, отказоустойчивости и производительности

Proxima — новая технология, встроенная в ядро СУБД Postgres Pro Enterprise, которая объединяет функци для масштабирования, отказоустойчивости и производительности. Это делает работу эффективнее и снижает задержки. 

  • Пул соединений. Proxima создаёт несколько подключений, которые могут быть использованы для большого количества клиентских сессий. Это позволяет клиентам устанавливать соединения с минимальными задержками, минуя затратные по времени операции создания соединений и выделение оперативной памяти для пользовательских процессов. Proxima также снижает нагрузку на мастера на шифрование трафика и авторизацию пользователей. Клиентские подключения используют готовые соединения из пула, а значит, ресурсы расходуются эффективно.

  • Проксирование запросов. Proxima автоматически определяет назначенного «лидера» в кластере BiHA и прозрачно перенаправляет клиентские запросы на него, даже если клиент изначально подключился к реплике. Это избавляет приложения от необходимости самостоятельно следить за изменениями в топологии кластера и гарантирует, что запросы на запись всегда попадают на нужный узел.

  • Балансировка нагрузки (ещё в разработке). Proxima будет отслеживать нагрузку и динамически распределять входящие соединения между узлами отказоустойчивого кластера. Такой подход обеспечивает равномерное распределение нагрузки между узлами, что предотвращает перегрузку отдельных реплик и максимизирует общую производительность системы.

Эффективное управление очередями прямо в базе данных 

Для работы с асинхронной обработкой сообщений подходит pgpro_queue. Это расширение позволяет управлять очередями сообщений прямо в Postgres Pro Enterprise, без использования сторонних сервисов. Таким образом можно реализовать сложную бизнес-логику внутри базы данных. pgpro_queue создаёт очереди, в которые добавляются сообщения и которые получатели сообщений могут эффективно обрабатывать.

  • Транзакционность. Сообщение будет либо успешно обработано, либо вернётся в очередь для повторной попытки. В случае сбоя в обработчике сообщения, оно автоматически вернётся в очередь для повторной попытки обработки. При сбое в обработчике соответствующая транзакция откатывается, и механизм retry on rollback не просто возвращает его в очередь, но и устанавливает отсрочку видимости для предотвращения зацикливания.

  • Приоритеты, фильтрация и исключения. Поддерживается не только последовательная обработка сообщений, но и приоритизация, фильтрация сообщений по атрибутам и возможность исключить из очереди сообщения, которые не были обработаны в течение определённого времени.

  • Модель хранения сообщений. Сообщения в очереди хранятся до тех пор, пока их не прочитают. Все сообщения, включая их состояния, также сохраняются при перезапуске Postgres или переключении на реплику. Это делает систему более надёжной и отказоустойчивой.

Новые инструменты для управления планами запросов 

В Postgres Pro Enterprise 17 улучшены инструменты для работы с планами выполнения запросов, что особенно оценят те, кто заботится о производительности.

  • pgpro_multiplan. Это расширение заменяет устаревший sr_plan и позволяющее хранить неограниченное количество планов, одобренных администратором базы данных, для каждого запроса. Система автоматически выбирает оптимальный план на основе параметров запроса, а поддержка переноса планов между серверами упрощает администрирование и повышает стабильность работы системы. В расширение добавлен новый тип зафиксированных планов — hintset, который представляет собой набор указаний, сформированных на основе замороженного плана выполнения, включая значения переменных окружения оптимизатора, типы соединений, порядок соединений и методы доступа к данным, аналогичные тем, что поддерживаются расширением pg_hint_plan. В отличие от предыдущих типов планов, hintset привязан не к уникальным идентификаторам объектов (OID), а к их именам, что обеспечивает устойчивость плана к изменениям в базе данных, таким как пересоздание таблиц или добавление полей.

  • Шаблонные планыВ Postgres Pro Enterprise 17.2.2 появилась привязка одного плана к группе запросов, отличающихся только именами таблиц. В именах таблиц можно использовать wildcard’ы , что упрощает управление планами для запросов с динамическими именами таблиц, особенно для пользователей 1С (temp_tab_*).

  • Ассистент регистрации запросовАвтоматизирован процесс выбора и сохранения запросов для управления планами. Все выполняемые запросы с планами сохраняются в специальной таблице, что позволяет администраторам удобно выбирать и «замораживать» планы, не работая с текущими запросами в реальном времени. Упрощает механизм «захвата» планов, фиксируя id + планы.

Адаптивное выполнение и оптимизация запросов

Postgres Pro Enterprise 17 предлагает решения, которые автоматически подстраиваются под нагрузку и помогают ускорить выполнение сложных запросов:

  • AQE (Adaptive Query Execution). Система автоматически обнаруживает долго выполняющиеся запросы и «на лету» отправляет их на повторное планирование и выполнение. AQE может перезапускаться в случае превышения времени выполнения, ошибок планировщика или переполнения памяти бэкенда. В качестве триггеров теперь используется не только время, но и память и нарушение кардинальности. Это позволяет оптимизировать выполнение запросов в реальном времени. Поддерживается extended-протокол/prepared statements.

  • AQO EnterpriseМодуль, поставляемый начиная с релиза Postgres Pro Enterprise 17.2.2, постоянно обучается на всём массиве выполняемых запросов, корректирует ошибки планировщика и не требует ручного вмешательства. AQO Enterprise использует историю выполнения запросов и корректирует планы на основе полученных знаний, обеспечивая максимальную производительность. Он задействует механизм оценки кардинальности Delta Learning, автоматически передаёт базу знаний на реплики через WAL.

Инструменты контроля и защиты 

В Postgres Pro Enterprise 17 улучшены инструменты для защиты данных. Например, модуль pgpro_usage собирает статистику использования объектов базы данных и вызовов функций каждым пользователем и на её основе формирует отчёт о реально используемых привилегиях, выявляя избыточные права доступа. В отчёте указываются объекты, пользователи, их привилегии и роли, благодаря которым получены привилегии. 

Пример отчёта pgpro_usage

Специалист по информационной безопасности видит, какие права пользователи используют или не используют. Соответственно, он может убрать ненужные права и повысить безопасность. За сбор статистики отвечают pg_stat_all_tables_per_user и pg_stat_all_functions_per_user.

Интеллектуальное хранение данных с помощью pgpro_ilm

Расширение pgpro_ilm позволяет автоматически перемещать на более дешёвые диски редко используемые данные и, если необходимо, сжимать их.Таким образом можно экономить место и эффективно использовать ресурсы, перемещая таблицы или их части в другие хранилища с разными характеристиками. 


 
Схема возможной реализации интеллектуального хранения данных
  • Температурная карта. Для каждой таблицы и секции отслеживается время последнего доступа к данным (чтение и модификация). На основе этой информации формируется температурная карта, которую pgpro_ilm использует для отслеживания «устаревших» данных.

  • Политики. Специалист задаёт политики  декларативно, определяя, что делать с данными (перемещение, сжатие) в зависимости от времени последнего доступа или модификации. Поддерживаются политики по no access и no modification. Политики выполняются автоматически (scheduler).

  • Сжатие. Упаковка редко модифицируемых данных выполняется автоматически, как перемещение их в сжатое с использованием CFS табличное пространство.

Инфраструктура и удобство

В Postgres Pro Enterprise 17 добавили новые функции, которые делают настройку, мониторинг и управление кластерами проще. Это даёт администраторам больше возможностей для оптимизации работы и создания гибкой, масштабируемой инфраструктуры.

  • Улучшения BiHA. Добавлена возможность вызова пользовательских SQL-функций при добавлении/удалении узлов или других событиях в кластере BiHA, например при смене «лидера». Добавлена роль пользователя biha_callbacks_user для выполнения обработчиков. Для конфигурации из двух узлов — «лидер» и «ведомый» — добавлена возможность установить облегченный вариант BiHA («рефери») без пользовательской БД на третьем узле. Добавлена возможность размещать реплику под контролем BiHA в удалённый ЦОД, при сбое всего основного ЦОД администратор БД легко может превратить эту реплику в «лидера».

  • Multimaster. Ускорено применение транзакций на отстающем узле в режиме catchup, при котором узел сокращает отставание от других узлов кластера.

  • pgpro_pwr. Добавлено отслеживание версий расширений и возможность скрытия данных для определённых баз данных в отчёте. Модуль обновлен до версии 4.8.

  • Улучшенное управление секционированными таблицами. В команду ALTER TABLE добавлены две подкоманды: SPLIT PARTITION разделяет одну секцию на несколько, а MERGE PARTITIONS объединяет несколько секций в одну. Кроме того, расширение pgpro_autopart динамически создаёт секции при добавлении или изменении ключа секционирования данных в таблице, что избавляет от необходимости вручную создавать новые секции. Расширение позволяет автоматически создавать партиции при использовании интервального секционирования.

  • PPEM 2.0. Предложены новая архитектура и платформа на Golang, обновлённый UI, визуализация планов запросов, отображение состояния кластеров, дерева блокировок, профиля ожиданий сессии, восстановление в режиме Point-In-Time-Recovery, управление объектами схемы БД, автоматическая настройка экземпляра под 1С/OLTP.

Представленные нововведения охватывают широкий спектр задач, включая повышение производительности и масштабируемости, усиление безопасности и упрощение администрирования. Инструменты, такие как Proxima, pgpro_queue, pgpro_multiplan, AQE и pgpro_ilm, предоставляют разработчикам и администраторам баз данных дополнительные возможности для создания более эффективных и надёжных приложений.

Больше о возможностях новой СУБД Postgres Pro Enterprise 17 —  в выступлении  Марка Ривкина, руководителя отдела технического консалтинга Postgres Professional.