Меня зовут Михаил Гелемеев, я лидер команды сопровождения Platform V Pangolin в СберТехе.
Platform V Pangolin — реляционная система управления базами данных. Она основана на свободно распространяемой версии PostgreSQL и содержит ряд доработок, обеспечивающих соответствие повышенным требованиям к безопасности данных, доступности, надежности, а также удобству эксплуатации. Наш продукт помогает получить функциональные возможности реляционной СУБД, включая построение кластеров высокой доступности, резервирование данных, снятие и восстановление резервных копий.
В январе мы выпустили новую версию — Platform V Pangolin 6.1. В ней появились обновления для работы с большим объёмом данных. Если вкратце — работать с секциями стало проще и быстрее: дешевле доступ к данным в секционированных таблицах, и для них можно гибко создавать уникальные глобальные индексы. Теперь можно предотвратить высокое потребление CPU и RAM пользовательской сессией, это улучшает доступность сервиса. Мы также добавили инструмент диагностики текущей активности для детального понимания процессов сессии, так работа СУБД становится более прозрачной.
Расскажу о каждой из доработок. Их можно условно разделить на две части: для пользователей и для администраторов/инфраструктуры.
Впервые эта статья опубликована на Хабре.
Начну с достоинств обновлённого продукта для наших пользователей.
Глобальные индексы для секционированных таблиц физически покрывают сразу множество подтаблиц и обеспечивают ограничение уникальности по набору атрибутов, не содержащих ключ секционирования.
Каждый, кто использовал секционированные таблицы, рано или поздно сталкивался с ограничениями реализации механизма секционирования, например:
В версии 6.1 мы добавили возможность создавать глобальные индексы. Эта функциональность снимает описанные ограничения:
Важно, что при проектировании и разработке мы учитывали опыт эксплуатации решений западных коллег. Например, в Platform V Pangolin при отсоединении секции, то есть при вызове ALTER TABLE DETACH PARTITION,индекс остаётся доступным для пользования. Подробнее можно узнать из документации.
Увеличение битности идентификаторов транзакций (XID) до 64 бит способствует снятию проблемы достижения XID wraparound и связанных с этим ограничений и нюансов эксплуатации.
Сейчас в ядре оригинального PostgreSQL под счётчик транзакций выделено 32 бита, которые покрывают всего 4 млрд транзакций (XID). Во избежание исчерпания номеров транзакций применяется закольцованная схема счётчика.
Много лет назад на этапе проектирования PostgreSQL 4 млрд транзакций было достаточно. Но сейчас в нагруженной системе вполне можно исчерпать счётчик за несколько дней. 64-битный счетчик транзакций практически никогда не переполнится. Даже при нагрузке 2^32 транзакций в день (~50 000 TPS) граница раздела между прошлым и будущим будет достигнута через 2^31 дней (5,9 млн лет). Преимущества такого счетчика следующие:
Добавление расширений plpgsql_check и pldebugger помогает отладить и проконтролировать pl/pgsql-процедуры и функции.
Наш опыт подсказывает, что использование СУБД как универсальной машины для решения любых задач имеет обратную сторону и не всегда приводит к ожидаемым результатам. В то же время в ряде случаев необходимы механизмы для решения точечных задач без расширения используемой инфраструктуры и добавления внешних сервисов и компонентов.
В подобных случаях может пригодиться расширение plsql-http — HTTP-клиент на уровне СУБД. Расширение позволяет обращаться к REST-сервисам из SQL-запросов.
Поддержка очередей сообщений включает в себя расширения pgq, pgq-coop, демон pgqd. Очередь — это структура данных с последовательным доступом к объектам по методу «первым пришёл — первым ушёл». Чаще всего очереди сообщений используются для взаимодействия сервисов между собой, выполнения отложенных операций и т. д. Для организации очередей существуют специализированные решения: RabbitMQ, Platform V Synapse и другие.
Если у вас есть задача, для которой отлично подходит механизм очередей, но использовать отдельный сервис нет возможности, можно воспользоваться расширением pgq.
Посмотрим, что нового появилось для администраторов и инфраструктуры.
Один из частых случаев в работе администратора баз данных — это когда неаккуратно написанный пользовательский запрос приводит к переполнению памяти на сервере и последующему перезапуску процессов экземпляра PostgreSQL из-за работы OOM Killer.
В версии Platform V Pangolin 6.1 появилась возможность контролировать потребление вычислительных ресурсов (CPU, RAM) клиентскими сессиями. Теперь при попытке выполнения неоптимально составленного запроса можно обеспечить защиту от недоступности или деградации функционирования при превышении ожидаемого потребления ресурсов СУБД каким-либо из процессов сессий.
Кроме того, теперь можно диагностировать случаи выполнения неоптимально составленных запросов не только по времени выполнения, но и по потреблению ресурсов.
Каждый администратор СУБД сталкивался с необходимостью посмотреть, что же делает сессия.
Трассировка сессии — это удобный механизм включения/выключения отладочной информации, позволяющий без использования системного журнала и аудита точечно рассматривать приложение с максимальной детализацией взаимодействия с сервером СУБД. Инструмент позволяет получить необходимую для анализа информацию в зависимости от выбранного уровня детализации, например:
Отчёт о трассировке можно получить в понятном структурированном виде в формате текстового файла или гипертекста.
Доработанная утилита pg_upgrade позволяет мигрировать с оригинального PostgreSQL на Platform V Pangolin. Доработка будет актуальна для решения задач перехода с оригинального PostgreSQL на Platform V Pangolin на существующих стендах, без переноса данных через сторонние средства. Другими словами — путём «конвертации» базы данных, что часто бывает необходимо в условиях ограниченности дисковых и серверных ресурсов.
Теперь полный список поддерживаемых ОС выглядит так:
Мы рассмотрели основные обновления, которые появились в новой версии Platform V Pangolin. Они позволяют работать с большими объёмами данных ещё проще и удобнее. Начиная с релиза 6.1 продукт выпускается в различных редакциях (Enterprise, Standart, Trial). Подробнее об этом можно почитать тут.
И самое приятное — теперь пользователям не нужно платить за функциональность, которую они не используют. Дистрибутив можно приобрести с необходимым набором функциональности, в том числе и для целевого использования, например, совместно с 1С: Предприятие.