Расширение Postgres Pro реализует оптимизированное секционирование больших и распределённых баз данных.

pg_pathman — это расширение Postgres Pro, реализующее оптимизированное решение для секционирования больших и распределённых баз данных. Cовместимо с Postgres Pro начиная с версии 9.5.

Расширение pg_pathman  позволяет:

  • секционировать большие базы данных, не прерывая их работу;

  • ускорять выполнение запросов с секционированными таблицами;

  • управлять существующими и добавлять новые секции "на лету";

  • добавлять в качестве секций сторонние таблицы;

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

По мере увеличения базы данных механизмы индексирования могут становиться неэффективными и запросы могут выполняться намного медленнее. Для повышения производительности, улучшения масштабируемости и оптимизации процессов администрирования можно использовать секционирование — разделение большой таблицы на множество меньших по размеру, когда все строки размещаются в секциях согласно ключу разбиения. Секционирование в Postgres Pro основано на механизме наследования: каждая секция должна создаваться как дочерняя таблица с ограничением CHECK. Однако при очень большом количестве секций возникают заметные издержки планирования, так как планировщик вынужден производить полный перебор и проверку условий ограничения для каждой секции, чтобы построить план выполнения запроса. Расширение pg_pathman решает эту проблему, применяя оптимизированные алгоритмы планирования и функции секционирования, учитывающие внутреннюю структуру секционированных таблиц. 

Расширение pg_pathman поддерживает следующие стратегии секционирования:

  • по хешу — строки сопоставляются с секциями с использованием универсальной функции хеширования; 

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

По умолчанию pg_pathman переносит все данные из родительской таблицы в создаваемые секции сразу (производится блокирующее секционирование). При таком подходе возможно изменить структуру таблицы в одной транзакции, но если объём данных велик, это может привести к приостановке работы. Если важно, чтобы работа не прерывалась, можно выполнить параллельное секционирование. В этом случае pg_pathman записывает все новые данные в созданные секции, но сохраняет исходные данные в родительской таблице, пока они явно не будут перенесены. Это позволяет секционировать большие базы данных, не прерывая работу, так как можно выбрать удобное время для переноса данных и переносить их небольшими порциями, не блокируя другие транзакции. 

Документация: https://postgrespro.ru/docs/postgrespro/10/pg-pathman.


в Расширения Репозиторий: pg_pathman