PostgreSQL 11: Evolucija particioniranja od Postgres 9.6 do Postgres 11

Veliki petak svima! Ostalo je manje vremena do pokretanja kursa "Relacioni DBMS", pa danas dijelimo prijevod još jednog korisnog materijala na tu temu.

U fazi razvoja PostgreSQL 11 obavljen je impresivan posao na poboljšanju particioniranja tablice. Pregradni stolovi je funkcija koja postoji u PostgreSQL-u dosta dugo, ali, da tako kažem, nije postojala do verzije 10, u kojoj je postala vrlo korisna karakteristika. Prethodno smo rekli da je nasljeđivanje tablice naša implementacija particioniranja, i to je istina. Samo vas je ovaj način prisilio da većinu posla obavljate ručno. Na primjer, ako želite da se torke umetnu u sekcije tokom INSERT-a, morali biste postaviti okidače da to urade umjesto vas. Particioniranje sa nasljeđivanjem bilo je vrlo sporo i složeno da bi se razvile dodatne karakteristike povrh toga.

U PostgreSQL 10, vidjeli smo rođenje "deklarativnog particioniranja" - osobine dizajnirane da riješi mnoge probleme koji su bili nerješivi korištenjem stare metode s nasljeđivanjem. Ovo je dovelo do mnogo moćnijeg alata koji nam omogućava horizontalnu podjelu podataka!

Poređenje karakteristika

PostgreSQL 11 ima impresivan skup novih funkcija koje pomažu u poboljšanju performansi i čine particionirane tabele transparentnijim 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 izuzetaka
2. Dodaje samo čvorove
3. Samo za particioniranu tablicu koja upućuje na neparticioniranu
4. Indeksi moraju sadržavati sve ključne stupce sekcije
5. Ograničenje presjeka na obje strane mora se podudarati

Produktivnost

I ovdje imamo dobre vijesti! Dodata nova metoda brisanje sekcija. Ovaj novi algoritam može odrediti prikladne particije gledanjem uslova upita WHERE. Prethodni algoritam je zauzvrat testirao svaku sekciju kako bi utvrdio da li može ispuniti uslov WHERE. To je dovelo do dodatnog povećanja vremena planiranja kako se povećavao broj sekcija.

U 9.6, s particioniranjem nasljeđivanja, usmjeravanje torki u particije se obično obavljalo pisanjem funkcije okidača koja je sadržavala niz IF naredbi za umetanje tuple u ispravnu particiju. Ove funkcije mogu biti vrlo spore u izvršavanju. Sa deklarativnim particioniranjem dodanim u verziji 10, ovo je mnogo brže.

Koristeći particioniranu tablicu sa 100 particija, možemo procijeniti performanse učitavanja 10 miliona redova u tabelu sa 1 BIGINT kolonom i 5 INT kolona.

PostgreSQL 11: Evolucija particioniranja od Postgres 9.6 do Postgres 11

Performanse upita na ovoj tabeli za traženje jednog indeksiranog zapisa i izvršavanje DML-a za manipulaciju jednim zapisom (koristeći samo 1 procesor):

PostgreSQL 11: Evolucija particioniranja od Postgres 9.6 do Postgres 11

Ovdje možemo vidjeti da su performanse svake operacije značajno porasle od PG 9.6. Zahtjevi SELECT izgledaju mnogo bolje, posebno one koje mogu isključiti mnoge particije tokom planiranja upita. To znači da planer može preskočiti većinu posla koji je trebao obaviti prije. Na primjer, staze za nepotrebne sekcije se više ne grade.

zaključak

Particioniranje tabele počinje da postaje veoma moćna karakteristika u PostgreSQL-u. Omogućava vam da brzo prenesete podatke na mrežu i prenesete ih van mreže bez čekanja na završetak sporih velikih DML operacija.. To također znači da se povezani podaci mogu pohraniti zajedno, što znači da se potrebnim podacima može pristupiti mnogo efikasnije. Poboljšanja napravljena u ovom izdanju ne bi bila moguća bez programera, recenzenata i naručilaca koji su neumorno radili na svim ovim funkcijama.
Hvala im svima! PostgreSQL 11 izgleda fantastično!

Evo ovako kratkog, ali prilično zanimljivog članka. Podijelite svoje komentare i ne zaboravite se pretplatiti Dan otvorenih vrata, u okviru koje će biti detaljno opisan program kursa.

izvor: www.habr.com

Dodajte komentar