PostgreSQL 11: Evoluce partitioning od Postgres 9.6 do Postgres 11

Všem přeji skvělý pátek! Čím dál méně času zbývá do spuštění kurzu „Relační DBMS“, a proto dnes sdílíme překlad dalšího užitečného materiálu na toto téma.

Během vývoje PostgreSQL 11 byla odvedena ohromná práce na zlepšení sekcionování tabulek. Sekcionování tabulek — je to funkce, která v PostgreSQL existovala dost dlouho, ale v podstatě neexistovala až do verze 10, ve které se stala velmi užitečnou funkcí. Dříve jsme tvrdili, že dědičnost tabulek je naše implementace sekcionování, a to je pravda. Jenže tento způsob vás nutil provádět většinu práce ručně. Například, pokud jste chtěli, aby se tuplety vkládaly do sekcí během INSERTů, museli jste nastavit spouštěče, aby to udělaly za vás. Sekcionování pomocí dědičnosti bylo velmi pomalé a složité pro vyvíjení dalších funkcí nad ním.

V PostgreSQL 10 jsme viděli zrození „deklarativního sekcionování“ — funkce určené k řešení mnoha problémů, které nebyly vyřešitelné při používání starého metody s dědičností. To vedlo k vytvoření mnohem mocnějšího nástroje, který nám umožňuje rozdělovat data horizontálně!

Srovnání funkcí

Ve verzi PostgreSQL 11 se objevil ohromující soubor nových funkcí, které pomáhají zvyšovat výkon a zpřehledňují sekcionované tabulky pro aplikace.

PostgreSQL 11: Evoluce partitioning od Postgres 9.6 do Postgres 11
PostgreSQL 11: Evoluce partitioning od Postgres 9.6 do Postgres 11
PostgreSQL 11: Evoluce partitioning od Postgres 9.6 do Postgres 11
1. Použití restriktivních výjimek
2. Přidává pouze uzly
3. Pouze pro sekcionovanou tabulku, která se odvolává na nesectionovanou
4. Indexy musí obsahovat všechny klíčové sloupce sekce
5. Omezení na sekci z obou stran musí odpovídat

Výkon

Máme zde také dobrou zprávu! Byla přidána nová metoda odstraňování sekcí. Tento nový algoritmus může určovat vhodné sekce procházením podmínky dotazu není spolehlivý:. Předchozí algoritmus mezitím kontroloval každou sekci, aby určil, zda může vyhovět podmínce není spolehlivý:. To vedlo k dalšímu zvyšování času plánování s rostoucím počtem sekcí.

V 9.6, s oddělováním pomocí dědičnosti, se směrování tuple do sekce obvykle provádělo psaním triggerové funkce, která obsahovala sérii příkazů IF pro vložení tuple do správné sekce. Tyto funkce mohly být při provádění velmi pomalé. S deklarativním oddělováním přidaným ve verzi 10 to nyní funguje mnohem rychleji.

Použitím oddělené tabulky se 100 sekcemi můžeme vyhodnotit výkon načítání 10 milionů řádků do tabulky z 1 sloupce BIGINT a 5 sloupců INT.

PostgreSQL 11: Evoluce partitioning od Postgres 9.6 do Postgres 11

Výkon dotazu na tuto tabulku pro vyhledání jednoho indexovaného záznamu a vykonání DML pro manipulaci s jedním záznamem (pouze s 1 procesorem):

PostgreSQL 11: Evoluce partitioning od Postgres 9.6 do Postgres 11

Zde vidíme, že výkon každé operace výrazně vzrostl po PG 9.6. Dotazy nebude prováděn při nepravdivosti první podmínky. Opravy pomocí vypadají mnohem lépe, zejména ty, které mohou během plánování dotazů vyloučit více sekcí. To znamená, že plánovač může přeskočit velkou část práce, kterou musel dříve vykonávat. Například již se nestaví cesty pro nepotřebné sekce.

Závěr

Oddělování tabulek se začíná stávat velmi silnou funkcí v PostgreSQL. Umožňuje rychle vyvést data online a převést je do offline, aniž by čekala na dokončení pomalých masivních operací DML.To také znamená, že související data mohou být uložena společně, což znamená, že k požadovaným datům lze získat přístup mnohem efektivněji. Vylepšení provedená v této verzi by nebyla možná bez vývojářů, recenzentů a komitérů, kteří neúnavně pracovali na všech těchto funkcích.
Děkujeme všem! PostgreSQL 11 vypadá prostě fantasticky!

Toto je takový krátký, ale docela zajímavý článek. Sdílejte komentáře a nezapomeňte se zaregistrovat na den otevřených dveří, v rámci kterého bude podrobně prezentována programová struktura kurzu.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster