Перейти к основному содержимому

Надежная эксплуатация высоконагруженных систем

Контекст

Современные информационные системы часто функционируют в условиях высоких нагрузок: миллионы транзакций в день, тысячи одновременных подключений, интенсивная работа с большими объемами данных, интеграция с внешними сервисами и приложениями (в том числе с 1С). Отказоустойчивость, производительность и масштабируемость становятся критически важными характеристиками инфраструктуры.

Для СУБД это означает необходимость быстрой обработки запросов, эффективной работы с пулами соединений, гибкой архитектуры хранения данных и минимального времени отклика, даже в условиях пиковых нагрузок.

Проблема

При эксплуатации СУБД в высоконагруженной среде возникают типовые сложности:

  • деградация производительности из-за роста числа подключений;
  • неэффективные планы выполнения запросов, приводящие к замедлению операций;
  • блокировки и узкие места при работе с большим объемом данных в партиционированных таблицах;
  • невозможность быстрой масштабируемости;
  • ограниченная поддержка платформ, таких как 1С;
  • сложность развертывания высокодоступных и управляемых кластеров, особенно в контейнеризованных средах.

Эти проблемы ведут к нарушению SLA, затрудняют сопровождение, увеличивают нагрузку на администраторов и разработчиков.

Решение

Для обеспечения надежной эксплуатации высоконагруженных систем в СУБД Pangolin доступны следующие функциональности, которые расширят возможности разработчика:

  • Поддержка работы с 1С;
  • Улучшенный пулер соединений – Pangolin Pooler;
  • Резервирование подключений для ролей;
  • Управление планами запросов;
  • Неблокирующее нативное интервальное партиционирование;
  • Глобальные индексы и глобальные ограничения на партиционированные таблицы;
  • Управление легкими блокировками;
  • Механизм обновления системных каталогов Pangolin без изменения структуры данных;
  • 64-битные идентификаторы транзакций;
  • Поставка сборки с отладочными пакетами;
  • Поставка Docker-образа СУБД Pangolin.

Совокупность этих решений позволяет добиться стабильной, управляемой и масштабируемой работы СУБД Pangolin в условиях высоких нагрузок, снизить издержки на администрирование и сопровождение, а также обеспечить гибкость в развертывании.

В подразделах ниже представлено более детальное описание данных функциональностей.

Поддержка работы с 1С

Данная функциональность позволяет использовать СУБД Pangolin в качестве СУБД для «Платформы 1С: Предприятие».

Включение поддержки 1С активирует:

  • оптимизации планировщика запросов;
  • изменения в работе внутренних алгоритмов СУБД;
  • дополнительные расширения.

Возможность является отключаемой, так как полная совместимость поведения продукта Pangolin с выключенной поддержкой 1С и с включенной поддержкой 1С отличается. Оптимизации и изменения могут приводить к построению планов с деградацией производительности при использовании без 1С. Рекомендуется включать поддержку при использовании продукта совместно с 1С.

Более подробное описание данной функциональности представлено в разделе «Поддержка 1С» документа «Руководство администратора».

Улучшенный пулер соединений – Pangolin Pooler

Компонент Pangolin Pooler – это менеджер пулов соединений СУБД Pangolin. Данный компонент является доработанной версией утилиты PgBouncer.

Предназначением компонента является минимизация издержек, связанных с установлением новых подключений к СУБД Pangolin. Pangolin Pooler позволяет уменьшить накладные расходы на базу данных в случае, когда огромное количество физических соединений ведет к падению производительности СУБД Pangolin.

К ключевым доработкам программы PgBouncer в рамках создания компонента Pangolin Pooler относятся:

  • Режим сквозной аутентификации пользователей, который дополнительно осуществляет поддержку аутентификации пользователей методом LDAP и аудирование действий пользователя в лог компонента Pangolin Pooler;
  • Поддержка подготовленных запросов для транзакционного режима кластера высокой доступности Pangolin;
  • Поддержка использования сертификатов PKCS#12 и управление через Secret Management System (SecMan);
  • Поддержка топологии N-ЦОД в Pangolin Pooler;
  • Реализация вывода команды SHOW POOLS в лог компонента;
  • Создание команды RESET_AUTH, которая сбрасывает в исходное состояние сквозную аутентификацию пользователей.

Более подробное описание и управление компонентом и его доработками представлено в разделе «Администрирование Pangolin Pooler» документа «Руководство администратора».

Резервирование подключений для ролей

В ядре оригинального PostgreSQL отсутствует возможность резервирования подключений для пользователей, не обладающих правами суперпользователя. Это приводит к проблеме невозможности подключиться к БД, когда все свободные подключения заняты.

В СУБД Pangolin реализована возможность резервировать для ролей количество доступных подключений как индивидуально, так и по признаку вхождения в групповую роль. Это гарантирует пользователю наличие свободных подключений к БД в любое время.

В каждой БД создается файл pg_quota.conf, который содержит записи для ролей, требующих зарезервировать соединения.

Более подробное описание и настройка данной функциональности представлено в одноименном разделе документа «Руководство администратора».

Управление планами запросов

В теории порядок выполнения запроса определяет оптимизатор запросов – программа, определяющая оптимальный «маршрут» на основании информации о количестве записей, распределения данных и индексах.

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

  • некорректная или неполная статистика;
  • недостаточные или избыточные индексы;
  • некорректные настройки стоимостей операций;
  • ошибки работы оптимизатора.

Неоптимальный маршрут выполнения может приводить к увеличенному времени выполнения запросов, деградации сервиса в целом (вплоть до отказа) или несоблюдению SLA.

Реализованная возможность фиксации и подмены планов запросов позволяет оперативно и без влияния на существующую структуру объектов:

  • принудительно определять план выполнения SQL-запроса, выполняемого как самостоятельный запрос, подготовленный запрос или запрос в составе PL/pgSQL-блока;
  • корректировать в процессе план выполнения запроса на стороне сервера при его обработке без необходимости вносить изменения в его текст на стороне отправляющего его приложения.

Подробнее о расширениях, которые предоставляют данную функциональность представлено в разделе «Управление планами запросов» документа «Руководство администратора».

Неблокирующее нативное интервальное партиционирование

Неблокирующее нативное интервальное партиционирование – это возможность создать партиционированную таблицу, указав лишь правило разбиения на партиции и сразу наполнять данными. В этом случае при добавлении данных отсутствующая партиция будет создана автоматически, вместо генерации сообщения об ошибке о необходимости создать партицию вручную. В остальном поведение автопартиционированных таблиц не отличается от стандартного партиционирования.

Более подробное описание и настройка функциональности представлено в разделе «Нативное интервальное партиционирование» документа «Руководство администратора».

Глобальные индексы и глобальные ограничения на партиционированные таблицы

СУБД Pangolin предоставляет возможность создавать и использовать глобальные ограничения уникальности по полям партиционированных таблиц, отличных от полей ключа партиционирования. Тем самым повышая эффективность поиска записей в партиционированных таблицах для предикатов, не включающих ключ партиционирования.

Более подробное описание и настройка данной функциональности представлено в одноименном разделе документа «Руководство администратора».

Управление легкими блокировками

В СУБД Pangolin реализованы дополнительные конфигурационные параметры, обеспечивающие более эффективное использование механизмов блокировок в многопроцессорных системах и под высокой нагрузкой.

Настройка этих параметров позволяет:

  • снизить конкуренцию за общие ресурсы;
  • предотвратить чрезмерные задержки exclusive-блокировок;
  • повысить общую масштабируемость и предсказуемость производительности кластера СУБД Pangolin.

Параметры позволяют управлять легкими блокировками (LWLock) на высоконагруженных системах для повышения производительности в следующих сценариях нагрузки:

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

Более подробное описание и настройка данной функциональности представлено в одноименном разделе документа «Руководство администратора».

Механизм обновления системных каталогов Pangolin без изменения структуры данных

Утилита pangolin-inplace-upgrade предоставляет механизм обновления системных каталогов СУБД Pangolin без изменения структуры таблиц и без миграции пользовательских данных, что позволяет существенно сократить длительность обновления и избежать выполнения ресурсоемкого процесса, который требует полного комплекса действий:

  • миграции с помощью pg_upgrade;
  • создания резервной копии;
  • инициализации и настройки новой базы данных;
  • подготовки конфигурационных файлов
  • переноса данных (rsync);
  • сборки статистики (vacuumdb);
  • обновления расширений.

Утилита pangolin-inplace-upgrade работает гораздо быстрее, так как не выполняет полную выгрузку и загрузку данных системного каталога.

Такой подход снижает эксплуатационные затраты, делает обновление менее ограниченным по требованиям и позволяет выполнить переход на новую версию СУБД значительно быстрее и проще.

Описание работы утилиты приведено в одноименном разделе документа «Руководство по установке».

64-битные идентификаторы транзакций

В ядре оригинального PostgreSQL под счетчик транзакций выделено 32 бита, которые покрывают всего 4 млрд транзакций (XID). Во избежание исчерпания номеров транзакций применяется закольцованная схема счетчика транзакций.

Переход на 64-битный счетчик транзакций решает проблему их переполнения, делая этот момент практически недостижимым. Даже при нагрузке 2322^{32} транзакций в день (~50 000 TPS) граница раздела между прошлым и будущим будет достигнута через 2312^{31} дней (5,9 млн лет). Использование 64-битного счетчика предоставляет следующие преимущества:

  • В условии высокой транзакционной нагрузки позволяет избежать прекращения выполнения поступающих запросов на запись при наличии долгоживущей транзакции, удерживающей горизонт транзакций (xmin).

    В случае 32-битного счетчика 13 часовой OLAP-запрос стал бы причиной отказа в обслуживании OLTP-запросов со скоростью 50 000 TPS спустя 12 часов. К этому моменту возраст самой старой транзакции достиг бы 2312^{31}. Горизонт транзакций (xmin), удерживаемый OLAP-запросом, не дает autovacuum заморозить версии строк младше горизонта транзакций для продвижения счетчика. В результате новый номер для пишущей транзакции не выделяется и Pangolin завершает OLTP-запросы с ошибкой, чтобы не допустить потерю данных.

    64-битный счетчик снимает ограничение на предельный возраст самой старой транзакции 2312^{31}, поэтому рассмотренная выше проблема отсутствует.

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

Более подробное описание и настройка данной функциональности представлено в одноименном разделе документа «Руководство администратора».

Поставка сборки с отладочными пакетами

Для улучшения качества и скорости исследования инцидентов, возникших в промышленной среде, производится поставка отладочных пакетов. Отладочная информация отделяется от исполняемых/библиотечных объектов и сохраняется в отдельных файлах.

В корневом каталоге дистрибутива продукта существует директория debug, содержащая отладочные пакеты всех компонентов, для которых предусмотрена поставка.

Установка отладочных пакетов позволяет:

  • получать информативный стек вызовов (с адресами и именами функций);
  • производить рассекречивание дампов памяти процесса (core dump), в том числе сформированных автоматически до момента установки отладочных пакетов;
  • сократить срок расследования инцидентов.

Описание установки и управление функциональностью представлено в одноименном разделе документа «Руководство по установке».

Поставка Docker-образа СУБД Pangolin

В СУБД Pangolin возможно запускать Docker-образы компонентов продукта в кластерных конфигурациях с одним главным узлом и произвольным числом узлов реплицирования. Решение позволяет создавать многоконтейнерные приложения, где роль кластера базы данных берет на себя Pangolin DB, а управление пулом соединений обеспечивает Pangolin Pooler.

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

Дополнительно можно самостоятельно активировать и настроить также ряд функциональных возможностей.

Список данных функциональностей (включенных и дополнительно настраиваемых), а также процесс запуска образа представлен в разделе «Docker-образы СУБД Pangolin» документа «Руководство по установке».