Релиз расширения pg_pathman 1.0.0
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. В докладе мы расскажем как про детали внутреннего устройства, так и про приёмы практического использования.