Postgres Pro Enterprise 17: Обзор возможностей СУБД
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 собирает статистику использования объектов базы данных и вызовов функций каждым пользователем и на её основе формирует отчёт о реально используемых привилегиях, выявляя избыточные права доступа. В отчёте указываются объекты, пользователи, их привилегии и роли, благодаря которым получены привилегии.
Специалист по информационной безопасности видит, какие права пользователи используют или не используют. Соответственно, он может убрать ненужные права и повысить безопасность. За сбор статистики отвечают 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.