Объём статьи не позволяет детально описать все новшества вышедшей версии Postgres Pro Enterprise 17, поэтому мы решили опубликовать краткий обзор со ссылками на более детальную информацию.
Proxima — три в одном для масштабирования, отказоустойчивости и производительности
Забудьте о пулерах, прокси и балансировщиках нагрузки. Proxima — новый инструмент, который объединяет все эти функции в одном расширении, встроенном в ядро СУБД Postgres Pro Enterprise. Это делает работу эффективнее и снижает задержки. Что это даёт?
Пул соединений. Proxima заранее создаёт несколько подключений, чтобы они были готовы к использованию. Это позволяет клиентам устанавливать соединения с минимальными задержками, минуя затратные по времени операции создания и разрыва соединений. Клиентские подключения используют готовые соединения из пула, а значит, ресурсы расходуются эффективно.
Проксирование запросов. Proxima автоматически определяет назначенного «лидера» в кластере BiHA и прозрачно перенаправляет клиентские запросы на него, даже если клиент изначально подключился к реплике. Это избавляет приложения от необходимости самостоятельно следить за изменениями в топологии кластера и гарантирует, что запросы на запись всегда попадают на нужный узел.
Балансировка нагрузки (ещё в разработке). Proxima отслеживает загрузку реплик и динамически распределяет входящие соединения между ними. Такой подход обеспечивает равномерное распределение нагрузки между узлами, что предотвращает перегрузку отдельных реплик и максимизирует общую производительность системы.
Эффективное управление очередями прямо в базе данных
Для работы с асинхронной обработкой сообщений подходит pgpro_queue. Это расширение позволяет управлять очередями сообщений прямо в Postgres Pro Enterprise, без использования сторонних сервисов. Таким образом можно реализовать сложную бизнес-логику внутри базы данных. pgpro_queue создаёт очереди, в которые добавляются сообщения и которые подписчики могут эффективно обрабатывать.
Транзакционность. Сообщение будет либо успешно обработано, либо вернётся в очередь для повторной попытки. В случае сбоя транзакция откатывается и сообщение возвращается в очередь с отсрочкой видимости для предотвращения зацикливания.
Приоритеты, фильтрация и исключения. Поддерживается не только последовательная обработка сообщений, но и приоритизация, фильтрация сообщений по атрибутам и возможность исключить из очереди сообщения, которые не были обработаны в течение определённого времени.
Модель хранения сообщений. Сообщения в очереди хранятся до тех пор, пока их не прочитают. Все сообщения, включая их состояния, также сохраняются при перезапуске 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.
Audit 2.0. Инструмент позволяет назначать аудит не для каждого пользователя, а для группы пользователей. Также можно использовать предустановленные группы аудита, например ALL_DDL, ALL_DML и ALL_PROC, которые позволяют отслеживать все команды DDL, DML и вызовы процедур. Это значительно ускоряет и упрощает использование средств аудита.
Интеллектуальное хранение данных с помощью pgpro_ilm
Расширение pgpro_ilm позволяет автоматически перемещать на более дешёвые диски редко используемые данные и, если необходимо, сжимать их.Таким образом можно экономить место и эффективно использовать ресурсы, перемещая таблицы или их части в другие хранилища с разными характеристиками.
Температурная карта. Для каждой таблицы и секции отслеживается время последнего доступа к данным (чтение и модификация). На основе этих данных формируется температурная карта в виде битовых масок по секциям.
Политики. Специалист задаёт политики декларативно, определяя, что делать с данными (перемещение, сжатие) в зависимости от времени последнего доступа или модификации. Поддерживаются политики по no access и no modification. Политики выполняются автоматически (scheduler).
Сжатие. Перемещение данных в сжатое табличное пространство происходит автоматически через CFS.
Инфраструктура и удобство
В Postgres Pro Enterprise 17 добавили новые функции, которые делают настройку, мониторинг и управление кластерами проще. Это даёт администраторам больше возможностей для оптимизации работы и создания гибкой, масштабируемой инфраструктуры.
Улучшения BiHA. Добавлена возможность вызова пользовательских SQL-функций при добавлении/удалении узлов или при доступности «лидера» для записи. Добавлена роль пользователя biha_callbacks_user для выполнения обработчиков. Для конфигурации из двух узлов — «лидер» и «ведомый» — добавлена возможность установить облегченный вариант BiHA («рефери») без пользовательской БД на третий узел. Добавлена возможность размещать реплику под контролем BiHA в удалённый ЦОД, администратор БД может превратить эту реплику в «лидера».
Multimaster. Ускорено применение транзакций на отстающем узле в режиме catchup, при котором узел сокращает отставание от других узлов кластера.
pgpro_pwr. Добавлено отслеживание версий расширений и возможность скрытия данных для определённых баз данных в отчёте. Модуль обновлен до версии 4.8.
Автоматическое секционирование (pgpro_autopart). Инструмент динамически создаёт секции при добавлении или изменении ключа секционирования данных в таблице, что избавляет от необходимости вручную создавать новые секции. Расширение позволяет автоматически создавать партиции при использовании интервального секционирования.
PPEM 2.0. Предложены новая архитектура и платформа на Golang, обновлённый UI, визуализация планов запросов, отображение состояния кластеров, дерева блокировок, профиля ожиданий сессии, восстановление в режиме Point-In-Time-Recovery, управление объектами схемы БД, автоматическая настройка экземпляра под 1С/OLTP.
Представленные нововведения охватывают широкий спектр задач, включая повышение производительности и масштабируемости, усиление безопасности и упрощение администрирования. Инструменты, такие как Proxima, pgpro_queue, pgpro_multiplan, AQE и pgpro_ilm, предоставляют разработчикам и администраторам баз данных дополнительные возможности для создания более эффективных и надёжных приложений.