Релиз расширения pg_pathman 1.0.0

PostgreSQL Источник: Postgres Professional

          1 сентября 2016 наши разработчики выпустили в мир IT очень полезное расширение для СУБД PostgreSQL — модуль для эффективного, оптимизированного секционирования таблиц — pg_pathman 1.0.0.

          Работа над этим экстеншном велась с ноября 2015 года командой из трех наших программистов: Александром Коротковым, Ильдаром Мусиным и Дмитрием Ивановым. Хотя сама идея названия проекта принадлежит генеральному директору компании Postgres Professional — Олегу Бартунову. Для Дмитрия и Ильдара разработка модуля pg_pathman 1.0.0 стала боевым крещением на поле создания расширений для СУБД PostgreSQL. Этот момент был отмечен Олегом Бартуновым, и его поздравление в адрес разработчиков следует ниже:

Олег Бартунов

генеральный директор компании
Postgres Professional


Поздравляю авторов, в первую очередь Ильдара Мусина и Диму Иванова!

          Я помню, как Ильдар только появился у нас в компании и я с Сашей Коротковым сразу же предложили ему поработать над правильным секционированием, прямо тогда же было придумано название pg_pathman. Ильдар сделал первую рабочую версию за несколько месяцев, потом к нему присоединился Дима, который разобрался с кастомными нодами и вдвоем у них работа пошла веселее. Ребята конкретно подросли и я считаю, что первоначальный трудный этап входа в разработку Постгреса они прошли.


          Что же такое модуль pg_pathman, что он дает, зачем он нужен?

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

          Но теперь новое расширение для СУБД PostgreSQL — pg_pathman — предоставляет функции для создания и управления секциями, а также механизм секционирования, оптимизированный с учетом знания о структуре дочерних таблиц. Конфигурация сохраняется таблице pathman_config, каждая строка которой содержит запись для одной секционированной таблицы (название таблицы, атрибут и тип разбиения). В процессе инициализации pg_pathman кеширует конфигурацию дочерних таблиц в формате, удобном для быстрого поиска. Получив запрос типа SELECT к секционированной таблице, pg_pathman анализирует дерево условий запроса и выделяет из него условия вида:

ПЕРЕМЕННАЯ ОПЕРАТОР КОНСТАНТА


где ПЕРЕМЕННАЯ — это атрибут, по которому было выполнено разбиение, ОПЕРАТОР — оператор сравнения (поддерживаются =, <, <=, >, >=), КОНСТАНТА — скалярное значение. Например:

WHERE id = 150


          Затем основываясь на стратегии секционирования и условиях запроса pg_pathman находит в кеше соответствующие секции и строит план.

          В текущей версии pg_pathman поддерживает следующие типы секционирования:

  • RANGE — разбивает таблицу на секции по диапазонам ключевого аттрибута; для оптимизации построения плана используется метод бинарного поиска.
  • HASH — данные равномерно распределяются по секциям в соответствии со значениями hash-функции, вычисленными по заданному целочисленному атрибуту.

          На сегодняшний день расширение совместимо с PostgreSQL 9.5. Поддержка 9.6 будет добавлена в одном из ближайших обновлений.

          Подробнее о модуле pg_pathman 1.0.0 можно прочитать на странице README.rus.md в нашем репозитории на сервере GITHUB.com:


          Расширению pg_pathman будет посвящен доклад одного из его разработчиков — Александра Короткова — на «Профессиональной конференции разработчиков высоконагруженных систем HighLoad++2016» в ноябре этого года. Уже сейчас Вы можете ознакомиться с его тезисами:

 

«Долгожданный релиз pg_pathman 1.0»

Спикер: Александр Коротков | Postgres Professional

          Имеет статус PostgreSQL major constributor, разработал следующие фичи СУБД PostgreSQL: команда CREATE ACCESS METHOD, generic WAL интерфейс, lockfree Pin/UnpinBuffer, индексный поиск по регулярным выражениям в pg_trgm, сжатие и "быстрый поиск" по GIN индексам, буферизованный алгоритм построения и улучшенное разбиение страниц для GiST индексов, статистика и оценки селективности для массивов и диапазонных типов, улучшения в нечётком поиске строк, KNN-GiST с перепроверкой по heap. Защитил кандидатскую диссертацию, основанную на своём вкладе в развитие PostgreSQL.

 

Тезисы доклада

          Механизм секционирования в Postgres имеет ряд ограничений, которые не позволяют использовать концепцию секционирования в полной мере. Среди таких ограничений можно выделить неэффективность планирования запросов для секционированных таблиц (линейный рост времени планирования при увеличении количества секций), отсутствие HASH-секционирования, необходимость ручного управления секциями.
          В нашем докладе мы расскажем про расширение pg_pathman, которое позволяет обойти эти ограничения. pg_pathman реализует RANGE и HASH секционирования с логарифмическим и константным временами планирования соответственно. В pg_pathman поддерживается определение секции на этапе выполнения, конкурентное секционирование.
          pg_pathman долго находился в стадии beta-тестирования, но теперь мы рады, наконец, сообщить о релизе 1.0. В докладе мы расскажем как про детали внутреннего устройства, так и про приёмы практического использования.