PostgreSQL 11: Развитие на разделянето от Postgres 9.6 до Postgres 11

Страхотен петък на всички! Остава по-малко време до стартирането на курса "Релационна СУБД", затова днес споделяме превода на още един полезен материал по темата.

На етап развитие PostgreSQL 11 беше извършена впечатляваща работа за подобряване на разделянето на таблици. Преградни маси е функция, която съществува в PostgreSQL от доста дълго време, но, така да се каже, не съществува до версия 10, в която се превърна в много полезна функция. По-рано казахме, че наследяването на таблицата е нашата реализация на разделянето и това е вярно. Само по този начин ви принуди да вършите по-голямата част от работата ръчно. Например, ако искате кортежи да бъдат вмъкнати в секции по време на INSERTs, ще трябва да настроите тригери, които да правят това вместо вас. Разделянето с наследяване беше много бавно и сложно за разработване на допълнителни функции върху него.

В PostgreSQL 10 видяхме раждането на "декларативното разделяне" - функция, предназначена да разреши много проблеми, които бяха неразрешими с помощта на стария метод с наследяване. Това доведе до много по-мощен инструмент, който ни позволява да разделяме данните хоризонтално!

Сравнение на характеристиките

PostgreSQL 11 има впечатляващ набор от нови функции, които помагат за подобряване на производителността и правят разделените таблици по-прозрачни за приложенията.

PostgreSQL 11: Развитие на разделянето от Postgres 9.6 до Postgres 11
PostgreSQL 11: Развитие на разделянето от Postgres 9.6 до Postgres 11
PostgreSQL 11: Развитие на разделянето от Postgres 9.6 до Postgres 11
1. Използване на ограничаващи изключения
2. Добавя само възли
3. Само за разделена таблица, препращаща към неразделена
4. Индексите трябва да съдържат всички ключови колони на раздела
5. Ограничението на секциите от двете страни трябва да съвпада

продуктивност

Тук имаме и добри новини! Добавен нов метод изтриване на секции. Този нов алгоритъм може да определи подходящи дялове, като разгледа условието на заявката WHERE. Предишният алгоритъм от своя страна тества всяка секция, за да определи дали може да изпълни условието WHERE. Това доведе до допълнително увеличаване на времето за планиране, тъй като броят на секциите се увеличи.

В 9.6, с разделяне на наследяване, маршрутизирането на кортежи в дялове обикновено се извършваше чрез писане на тригерна функция, която съдържаше поредица от оператори IF за вмъкване на кортеж в правилния дял. Тези функции може да се изпълняват много бавно. С декларативното разделяне, добавено във версия 10, това е много по-бързо.

Използвайки разделена таблица със 100 дяла, можем да оценим производителността на зареждането на 10 милиона реда в таблица с 1 колона BIGINT и 5 колони INT.

PostgreSQL 11: Развитие на разделянето от Postgres 9.6 до Postgres 11

Изпълнението на заявка в тази таблица за търсене на единичен индексиран запис и изпълнение на DML за манипулиране на единичен запис (използвайки само 1 процесор):

PostgreSQL 11: Развитие на разделянето от Postgres 9.6 до Postgres 11

Тук можем да видим, че производителността на всяка операция се е увеличила значително след PG 9.6. Заявки SELECT изглеждат много по-добре, особено тези, които могат да изключат много дялове по време на планирането на заявката. Това означава, че планировчикът може да пропусне повечето от работата, която е трябвало да върши преди. Например вече не се изграждат пътеки за ненужни участъци.

Заключение

Разделянето на таблици започва да се превръща в много мощна функция в PostgreSQL. Тя ви позволява бързо да прехвърляте данни онлайн и да ги прехвърляте офлайн, без да чакате завършването на бавни масивни DML операции.. Това също означава, че свързаните данни могат да се съхраняват заедно, което означава, че необходимите данни могат да бъдат достъпни много по-ефективно. Подобренията, направени в тази версия, не биха били възможни без разработчиците, рецензентите и изпълнителите, които работят неуморно върху всички тези функции.
Благодаря на всички тях! PostgreSQL 11 изглежда фантастично!

Ето една такава кратка, но доста интересна статия. Споделете вашите коментари и не забравяйте да се абонирате Отворен ден, в рамките на който ще бъде подробно описана програмата на курса.

Източник: www.habr.com

Добавяне на нов коментар