PostgreSQL 11: Evolucija particioniranja od Postgres 9.6 do Postgres 11

Ugodan petak svima! Sve manje vremena ostaje do početka tečaja "Relacijski DBMS", pa danas dijelimo prijevod još jednog korisnog materijala na tu temu.

U fazi razvoja PostgreSQL 11 Obavljen je impresivan rad na poboljšanju particioniranja tablice. Pregradni stolovi - radi se o funkciji koja je dosta dugo postojala u PostgreSQL-u, ali ona, da tako kažem, suštinski nije postojala sve do verzije 10, u kojoj je postala vrlo korisna funkcija. Prethodno smo izjavili da je nasljeđivanje tablice naša implementacija particioniranja i to je istina. Samo vas je ova metoda prisilila da većinu posla obavite ručno. Na primjer, ako želite da se torke umetnu u odjeljke tijekom INSERT-a, morali biste konfigurirati okidače da to rade umjesto vas. Particioniranje putem nasljeđivanja bilo je vrlo sporo i teško je razviti dodatnu funkcionalnost povrh toga.

U PostgreSQL 10 vidjeli smo rođenje "deklarativnog particioniranja", značajke osmišljene za rješavanje mnogih problema koji su bili nerješivi korištenjem stare metode nasljeđivanja. To je dovelo do puno moćnijeg alata koji nam je omogućio vodoravno dijeljenje podataka!

Usporedba značajki

PostgreSQL 11 predstavlja impresivan skup novih značajki koje pomažu u poboljšanju performansi i čine particionirane tablice transparentnijima za aplikacije.

PostgreSQL 11: Evolucija particioniranja od Postgres 9.6 do Postgres 11
PostgreSQL 11: Evolucija particioniranja od Postgres 9.6 do Postgres 11
PostgreSQL 11: Evolucija particioniranja od Postgres 9.6 do Postgres 11
1. Korištenje ograničavajućih iznimaka
2. Dodaje samo čvorove
3. Samo za particioniranu tablicu koja se poziva na neparticioniranu
4. Indeksi moraju sadržavati sve ključne stupce particije
5. Ograničenja sekcija na obje strane moraju odgovarati

Performanse

I ovdje imamo dobre vijesti! Dodana nova metoda brisanje odjeljaka. Ovaj novi algoritam može odrediti odgovarajuće odjeljke gledajući uvjet upita WHERE. Prethodni algoritam je pak provjeravao svaki odjeljak kako bi utvrdio može li ispuniti uvjet WHERE. To je rezultiralo dodatnim povećanjem vremena planiranja kako se povećavao broj sekcija.

U 9.6, s particioniranjem putem nasljeđivanja, usmjeravanje torki u particije obično se vršilo pisanjem funkcije okidača koja je sadržavala niz IF izjava za umetanje torki u ispravnu particiju. Te se funkcije mogu vrlo sporo izvršavati. S deklarativnim particioniranjem dodanim u verziji 10, ovo radi mnogo brže.

Koristeći particioniranu tablicu sa 100 particija, možemo procijeniti izvedbu učitavanja 10 milijuna redaka u tablicu s 1 BIGINT stupcem i 5 INT stupaca.

PostgreSQL 11: Evolucija particioniranja od Postgres 9.6 do Postgres 11

Izvedba postavljanja upita ovoj tablici za pronalaženje jednog indeksiranog zapisa i izvršavanje DML-a za manipuliranje jednim zapisom (koristeći samo 1 procesor):

PostgreSQL 11: Evolucija particioniranja od Postgres 9.6 do Postgres 11

Ovdje možemo vidjeti da se izvedba svake operacije značajno povećala od PG 9.6. Zahtjevi SELECT izgledaju mnogo bolje, posebno oni koji mogu isključiti više particija tijekom planiranja upita. To znači da planer može preskočiti mnogo posla koji je prije trebao obaviti. Na primjer, staze se više ne grade za nepotrebne dionice.

Zaključak

Particioniranje tablice počinje postajati vrlo moćna značajka u PostgreSQL-u. Omogućuje vam da brzo prikažete podatke online i prebacite ih offline bez čekanja da se završe spore, masivne DML operacije.. To također znači da se povezani podaci mogu pohraniti zajedno, što znači da se podacima koji su vam potrebni može pristupiti mnogo učinkovitije. Poboljšanja napravljena u ovoj verziji ne bi bila moguća bez programera, recenzenata i komitatora koji su neumorno radili na svim tim značajkama.
Hvala im svima! PostgreSQL 11 izgleda fantastično!

Evo tako kratkog, ali vrlo zanimljivog članka. Podijelite svoje komentare i ne zaboravite se prijaviti za Otvoreni dan, u okviru kojeg će biti detaljno razrađen program tečaja.

Izvor: www.habr.com

Dodajte komentar