PostgreSQL 11: Ewolucja partycjonowania od Postgres 9.6 do Postgres 11

Świetnego piątku dla wszystkich! Coraz mniej czasu do rozpoczęcia kursu. „Relacyjne bazy danych”, dlatego dzisiaj dzielimy się tłumaczeniem kolejnego przydatnego materiału na ten temat.

W procesie rozwoju PostgreSQL 11 została wykonana imponująca praca nad poprawą sekcjonowania tabel. Sekcjonowanie tabel to funkcja, która istniała w PostgreSQL przez dość długi czas, ale, żeby tak to ująć, w zasadzie nie była obecna aż do 10 wersji, w której stała się bardzo użyteczną funkcją. Wcześniej twierdziliśmy, że dziedziczenie tabel to nasza realizacja sekcjonowania, i to prawda. Tylko ten sposób zmuszał cię do wykonania większości pracy ręcznie. Na przykład, jeśli chciałeś, aby krotki były wstawiane do sekcji podczas INSERTów, musiałeś skonfigurować wyzwalacze, aby to za ciebie robiły. Sekcjonowanie przez dziedziczenie było bardzo wolne i trudne w rozwoju dodatkowych funkcji na jego podstawie.

W PostgreSQL 10 zobaczyliśmy narodziny „deklaratywnego sekcjonowania” – funkcji zaprojektowanej, aby rozwiązać wiele problemów, które były nierozwiązywalne przy użyciu starej metody opartej na dziedziczeniu. Doprowadziło to do powstania znacznie potężniejszego narzędzia, które umożliwia nam dzielenie danych w sposób poziomy!

Porównanie funkcji

W PostgreSQL 11 pojawił się imponujący zestaw nowych funkcji, które pomagają poprawić wydajność i uczynić sekcjonowane tabele bardziej przejrzystymi dla aplikacji.

PostgreSQL 11: Ewolucja partycjonowania od Postgres 9.6 do Postgres 11
PostgreSQL 11: Ewolucja partycjonowania od Postgres 9.6 do Postgres 11
PostgreSQL 11: Ewolucja partycjonowania od Postgres 9.6 do Postgres 11
1. Używając ograniczeń wyjątków
2. Dodaje tylko węzły
3. Tylko dla sekcjonowanej tabeli, odnoszącej się do niesekcjonowanej
4. Indeksy muszą zawierać wszystkie kluczowe kolumny sekcji
5. Ograniczenia na sekcję z obu stron muszą się zgadzać

Wydajność

Mamy również dobre wieści! Dodano nową metodę usuwania sekcji. Ten nowy algorytm może określać odpowiednie sekcje, przeglądając warunki zapytania WHERE. Poprzedni algorytm, z kolei, sprawdzał każdą sekcję, aby określić, czy może ona odpowiadać warunkowi WHERE. To prowadziło do dodatkowego wzrostu czasu planowania w miarę wzrostu liczby sekcji.

W wersji 9.6, przy sekcjonowaniu za pomocą dziedziczenia, routowanie krotek w sekcji zazwyczaj odbywało się poprzez napisanie funkcji wyzwalającej, która zawierała szereg operatorów IF do wstawienia krotki do odpowiedniej sekcji. Funkcje te mogły być bardzo wolne w wykonywaniu. Dzięki deklaratywnemu sekcjonowaniu, dodanemu w wersji 10, działa to znacznie szybciej.

Używając sekcjonowanej tabeli z 100 sekcjami, możemy ocenić wydajność ładowania 10 milionów wierszy do tabeli z 1 kolumną BIGINT i 5 kolumnami INT.

PostgreSQL 11: Ewolucja partycjonowania od Postgres 9.6 do Postgres 11

Wydajność zapytania do tej tabeli w celu wyszukania jednego indeksowanego rekordu i wykonania DML w celu manipulacji jednym rekordem (używając tylko 1 procesora):

PostgreSQL 11: Ewolucja partycjonowania od Postgres 9.6 do Postgres 11

Tutaj widzimy, że wydajność każdej operacji znacznie wzrosła po PG 9.6. Zapytania SELECT wyglądają znacznie lepiej, szczególnie te, które potrafią wykluczać wiele sekcji podczas planowania zapytań. Oznacza to, że planner może pominąć dużą część pracy, którą musiał wcześniej wykonać. Na przykład ścieżki do niepotrzebnych sekcji nie są już budowane.

Podsumowanie

Sekcjonowanie tabel zaczyna stawać się bardzo potężną funkcją w PostgreSQL. Pozwala szybko wyprowadzać dane online i przekładać je na offline, nie czekając na zakończenie wolnych masowych operacji DML.Oznacza to również, że powiązane dane mogą być przechowywane razem, co pozwala na o wiele bardziej efektywny dostęp do wymaganych danych. Ulepszenia w tej wersji byłyby niemożliwe bez programistów, recenzentów i komitterów, którzy niestrudzenie pracowali nad wszystkimi tymi funkcjami.
Dzięki nim wszystkim! PostgreSQL 11 wygląda po prostu fantastycznie!

To krótki, ale dość interesujący artykuł. Dzielcie się komentarzami i pamiętajcie, aby zapisać się na dzień otwarty, w ramach którego dokładnie przedstawiona zostanie program kursu.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster