Top.Mail.Ru

Как происходит секционирование в PostgreSQL

Секционирование таблиц PostgreSQL появилось еще в десятой версии продукта. И с тех пор ни только развивается. К примеру, у же в 11-й версии началось проводиться секционирование по хешу и секции. Легче стало перемещать запись в необходимую секцию, исключать или добавлять секции и т. д.

Как вы помните, PostgreSQL — это свободная Система Управления Базой Данных, в простонародье — СУБД. Активно стала развиваться последние 17 лет и представляет собой серьезную альтернативу многим коммерческим СУБД (Oracle, Microsoft SQL и др.). PostgreSQL можно реализовать на различных платформах:

  • Линукс, во всем его многообразии;
  • Mac OS;
  • WIN32;
  • FreeBSD и др.

Самой сильной стороной данной СУБД является ее уникальная архитектура, позволяющая ее применение в варианте пользователь-сервер. Наверное поэтому PostgreSQL достигла такой популярности.

Сегодня мы отметим ряд преимуществ, которые нам дает секционирование в PostgreSQL 12.

Производительность «COPY»

До 12-й версии PostgreSQL при использовании «copy» в таблицу можно было только по одной строке. Теперь же данный оператор поддерживает массовые вставки в таблицу.

Проводя тест с кодом «copy», получили следующие результаты. Когда увеличивается количество секций, работа кода притормаживается. Но в тоже время при уменьшении количества строк на раздел, код ускоряется. Снижение скорости связано с тем, что для каждой строчки «copy» может предоставить до 999 слотов.

Производительность «INSERT»

В PostgreSQL 12 секционирование улучшилось и за счет повышения производительности «вставки». В прежних версиях, когда выполнялся «insert» в таблицу, все ее разделы блокировались независимо от того работали они в данный момент или нет. А в новой версии СУБД все по-другому.

В новой PostgreSQL 12 блокирование секции происходит прямо перед тем как в нее вставляется запись. То есть, при добавлении одной строки блокируется только одна секция, а не как раньше — все. Именно поэтому секционирование в PostgreSQL 12 стало более производительным. Особенно это заметно, когда у нас большое количество секций в таблице, а вставлять нужно только только одну строчку.

Производительность «SELECT»

Со времен внедрения секционирования в PostgreSQL «выборка» претерпела ряд изменений и окончательно улучшилась ее производительность только в12-й версии:

  • В PostgreSQL 10 каждая секция проверялась последовательно на наличие ограничений и необходимой информации.
  • В PostgreSQL 11 пошли немного дальше и добавили исключение секций, в которых нет необходимость, теперь немного ускорилась работа, но все равно выполнялась ненужная работа – прогружались метаданные абсолютно всех секций и нужных и ненужных;
  • И только в PostgreSQL 12 все исправили, теперь метаданные загружаются только после полного исключения ненужных секций и производительность улучшилась.

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

Секционирование PostgreSQL 12 и его улучшения

В PostgreSQL 12 было внедрено еще несколько интересных, но возможно не столь важных улучшений, о которых тоже нужно рассказать. Некоторые из них:

  1. Упорядочено сканирование разделов. В новой версии данной СУБД сканирование разделов может производиться в неявном порядке по методу LIST или RANGE. При данном решении отсутствует бесполезная сортировка и сравнение.
  2. Можно избавиться от плана Append и MergeAppend. Избавление от них дает небольшой прирост в производительности.
  3. Другие изменения: возможность исключить разделы прямо во время выполнения, добавлена инструкция по манипулированию битами, ряд изменений внесены в «executor», улучшено использование метода «Range» и мн.др

Заключение

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

Возможно вам будет интересно почитать как происходит “Установка Windows на Raspberry Pi 3”

Text.ru - 100.00%
Поделись статьей с друзьями!

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *