PostgreSQL 11: Еволюция секционирането от Postgres 9.6 до Postgres 11

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

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

В 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. То позволява бързо изваждане на данни online и трансформирането им в offline, без да се чака завършването на бавни масивни DML операции.. Това също така означава, че свързаните данни могат да се съхраняват заедно, тоест до необходимите данни може да се получи достъп много по-ефективно. Подобренията, направени в тази версия, биха били невъзможни без разработчиците, рецензентите и комитерите, които неуморно работиха върху всички тези функции.
Благодарим им всички! PostgreSQL 11 изглежда просто фантастично!

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

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

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster