Jauninājums slinkiem: kā PostgreSQL 12 uzlabo veiktspēju

Jauninājums slinkiem: kā PostgreSQL 12 uzlabo veiktspēju

PostgreSQL 12, ā€œpasaules labākās atvērtā koda relāciju datu bāzesā€ jaunākā versija iznāks pēc pāris nedēļām (ja viss noritēs saskaņā ar plānu). Tas notiek saskaņā ar parasto grafiku, kad reizi gadā tiek izlaista jauna versija ar daudzām jaunām funkcijām, un, godÄ«gi sakot, tas ir iespaidÄ«gi. Tāpēc es kļuvu par aktÄ«vu PostgreSQL kopienas dalÄ«bnieku.

Manuprāt, atŔķirÄ«bā no iepriekŔējiem laidieniem, PostgreSQL 12 nesatur vienu vai divas revolucionāras funkcijas (piemēram, sadalÄ«Å”ana vai vaicājumu paralēlisms). Es reiz jokoju, ka PostgreSQL 12 galvenā iezÄ«me ir lielāka stabilitāte. Vai tas nav nepiecieÅ”ams, pārvaldot sava uzņēmuma kritiskos datus?

Taču PostgreSQL 12 nebeidzas ar to: ar jaunām funkcijām un uzlabojumiem lietojumprogrammas darbosies labāk, un viss, kas jums jādara, ir jaunināt!

(Nu, varbÅ«t pārbÅ«vējiet indeksus, taču Å”ajā laidienā tas nav tik biedējoÅ”i, kā mēs esam pieraduÅ”i.)

BÅ«s lieliski jaunināt PostgreSQL un nekavējoties baudÄ«t ievērojamus uzlabojumus bez liekas satraukuma. Pirms dažiem gadiem es pārskatÄ«ju jaunināŔanu no PostgreSQL 9.4 uz PostgreSQL 10 un redzēju, kā lietojumprogramma ir paātrinājusies, pateicoties uzlabotajam vaicājumu paralēlismam programmā PostgreSQL 10. Un, pats galvenais, no manis netika prasÄ«ts gandrÄ«z nekas (vienkārÅ”i iestatiet konfigurācijas parametru max_parallel_workers).

PiekrÄ«tu, tas ir ērti, ja lietojumprogrammas darbojas labāk uzreiz pēc jaunināŔanas. Un mēs ļoti cenÅ”amies izpatikt lietotājiem, jo ā€‹ā€‹PostgreSQL tādu ir arvien vairāk.

Tātad, kā vienkārÅ”a jaunināŔana uz PostgreSQL 12 var jÅ«s iepriecināt? Es tev tagad pateikÅ”u.

Būtiski indeksācijas uzlabojumi

Bez indeksÄ“Å”anas datu bāze netiks tālu. Kā vēl jÅ«s varat ātri atrast informāciju? PostgreSQL pamatindeksÄ“Å”anas sistēma tiek saukta B-koks. Å is indeksa veids ir optimizēts uzglabāŔanas sistēmām.

Mēs vienkārÅ”i izmantojam operatoru CREATE INDEX ON some_table (some_column), un PostgreSQL veic lielu darbu, lai indekss bÅ«tu atjaunināts, kamēr mēs pastāvÄ«gi ievietojam, atjauninām un dzÄ“Å”am vērtÄ«bas. Viss darbojas pats no sevis, it kā uz burvju mājienu.

Bet PostgreSQL indeksiem ir viena problēma - tie ir uzpÅ«sti un aizņem papildu vietu diskā un samazina datu izguves un atjaunināŔanas veiktspēju. Ar "uzpÅ«sties" es domāju neefektÄ«vu indeksa struktÅ«ras uzturÄ“Å”anu. Tas var bÅ«t vai var nebÅ«t saistÄ«ts ar atkritumu kopumiem, ko tas noņem VAKUUMS (paldies PÄ«teram Gaganam par informāciju)PÄ«ters Geoghegans)). Indeksa uzpÅ«Å”anās ir Ä«paÅ”i pamanāma darba slodzēs, kur indekss aktÄ«vi mainās.

PostgreSQL 12 ievērojami uzlabo B-koku indeksu veiktspēju, un eksperimenti ar tādiem etaloniem kā TPC-C ir parādÄ«juÅ”i, ka tagad tiek izmantots vidēji par 40% mazāk vietas. Tagad mēs tērējam mazāk laika ne tikai B-koka indeksu uzturÄ“Å”anai (tas ir, rakstÄ«Å”anas operācijām), bet arÄ« datu izgÅ«Å”anai, jo indeksi ir daudz mazāki.

Lietojumprogrammas, kas aktÄ«vi atjaunina savas tabulas ā€” parasti OLTP lietojumprogrammas (darÄ«jumu apstrāde reāllaikā) - izmantos disku un apstrādās pieprasÄ«jumus daudz efektÄ«vāk. Jo vairāk vietas diskā, jo vairāk vietas ir jāpalielina datu bāzei, neveicot infrastruktÅ«ras jaunināŔanu.

Dažām jaunināŔanas stratēģijām ir nepiecieÅ”ams atjaunot B-koka indeksus, lai izmantotu Ŕīs priekÅ”rocÄ«bas (piem., pg_upgrade automātiski neatjaunos indeksus). IepriekŔējās PostgreSQL versijās lielu indeksu pārbÅ«ve tabulās izraisÄ«ja ievērojamu dÄ«kstāvi, jo pa to laiku nevarēja veikt izmaiņas. Bet PostgreSQL 12 ir vēl viena lieliska funkcija: tagad varat atjaunot indeksus paralēli komandai REINDEKSĒT VIENLAIDÄŖGIlai pilnÄ«bā izvairÄ«tos no dÄ«kstāves.

PostgreSQL 12 indeksÄ“Å”anas infrastruktÅ«rai ir arÄ« citi uzlabojumi. Vēl viena lieta, kur bija kāda maÄ£ija - priekÅ”rakstÄ«Å”anas žurnāls, aka WAL (iepriekÅ” rakstāms žurnāls). PriekÅ”rakstÄ«Å”anas žurnāls reÄ£istrē katru darÄ«jumu PostgreSQL kļūmes un replikācijas gadÄ«jumā. Lietojumprogrammas to izmanto arhivÄ“Å”anai un tÅ«lÄ«tēja atgÅ«Å”ana. Protams, priekÅ”rakstÄ«Å”anas žurnāls tiek ierakstÄ«ts diskā, kas var ietekmēt veiktspēju.

PostgreSQL 12 ir samazinājusi WAL ierakstu pieskaitāmās izmaksas, ko indeksa veidoÅ”anas laikā rada GiST, GIN un SP-GiST indeksi. Tas nodroÅ”ina vairākas taustāmas priekÅ”rocÄ«bas: WAL ieraksti aizņem mazāk vietas diskā, un dati tiek atskaņoti ātrāk, piemēram, avārijas atkopÅ”anas vai precÄ«zas atkopÅ”anas laikā. Ja lietojat Ŕādus indeksus savās lietojumprogrammās (piemēram, uz PostGIS balstÄ«tās Ä£eotelpiskās lietojumprogrammas daudz izmanto GiST indeksu), Ŕī ir vēl viena funkcija, kas ievērojami uzlabos pieredzi bez jÅ«su piepÅ«les.

SadalīŔana - lielāka, labāka, ātrāka

Ieviests PostgreSQL 10 deklaratÄ«vā sadalÄ«Å”ana. PostgreSQL 11 ir kļuvis daudz vieglāk lietojams. Programmā PostgreSQL 12 varat mainÄ«t sadaļu mērogu.

Programmā PostgreSQL 12 nodalÄ«jumu sistēmas veiktspēja ir kļuvusi ievērojami labāka, it Ä«paÅ”i, ja tabulā ir tÅ«kstoÅ”iem nodalÄ«jumu. Piemēram, ja vaicājums ietekmē tikai dažus nodalÄ«jumus tabulā ar tÅ«kstoÅ”iem no tiem, tas tiks izpildÄ«ts daudz ātrāk. Veiktspēja tiek uzlabota ne tikai Ŕāda veida vaicājumiem. JÅ«s arÄ« pamanÄ«sit, cik ātrākas INSERT darbÄ«bas notiek tabulās ar vairākiem nodalÄ«jumiem.

Datu ierakstÄ«Å”ana, izmantojot COPY - starp citu, tas ir lielisks veids lielapjoma datu lejupielāde un Å”eit ir piemērs saņem JSON ā€” arÄ« PostgreSQL 12 sadalÄ«tās tabulas ir kļuvuÅ”as efektÄ«vākas. Ar COPY viss jau bija ātri, bet PostgreSQL 12 tas absolÅ«ti lido.

Pateicoties Ŕīm priekÅ”rocÄ«bām, PostgreSQL ļauj saglabāt vēl lielākas datu kopas un atvieglot to izgÅ«Å”anu. Un nekādas pÅ«les no jÅ«su puses. Ja lietojumprogrammai ir daudz nodalÄ«jumu, piemēram, laikrindu datu ierakstÄ«Å”ana, vienkārÅ”a jaunināŔana ievērojami uzlabos tās veiktspēju.

Lai gan tas nav gluži "jauniniet un izbaudiet" uzlabojums, PostgreSQL 12 ļauj izveidot ārējās atslēgas, kas atsaucas uz sadalÄ«tajām tabulām, padarot sadalÄ«Å”anu patÄ«kamu darbu.

AR vaicājumiem kļuva daudz labāk

Kad ielāps tika uzlikts iebÅ«vētām kopÄ«gām tabulas izteiksmēm (pazÄ«stams arÄ« kā CTE, pazÄ«stams arÄ« kā WITH queries), es nevarēju sagaidÄ«t, kad varÄ“Å”u uzrakstÄ«t rakstu par cik laimÄ«gi bija lietojumprogrammu izstrādātāji ar PostgreSQL. Å Ä« ir viena no funkcijām, kas paātrinās lietojumprogrammu. Ja vien, protams, neizmantojat CTE.

Es bieži atklāju, ka SQL iesācējiem patÄ«k izmantot CTE; ja tos rakstāt noteiktā veidā, Ŕķiet, ka jÅ«s rakstāt obligātu programmu. PersonÄ«gi man patika pārrakstÄ«t Å”os vaicājumus, lai apietu bez CTE un palielināt produktivitāti. Tagad viss ir savādāk.

PostgreSQL 12 ļauj iekļaut noteikta veida CTE bez blakusparādībām (SELECT), kas tiek izmantota tikai vienu reizi pieprasījuma beigās. Ja es sekotu līdzi pārrakstītajiem CTE vaicājumiem, lielākā daļa no tiem ietilptu Ŕajā kategorijā. Tas palīdz izstrādātājiem uzrakstīt skaidru kodu, kas tagad arī darbojas ātri.

Turklāt PostgreSQL 12 optimizē paÅ”u SQL izpildi, jums nekas nav jādara. Un, lai gan man, visticamāk, tagad nevajadzēs optimizēt Ŕādus vaicājumus, ir lieliski, ka PostgreSQL turpina strādāt pie vaicājumu optimizācijas.

Just-in-Time (JIT) ā€” tagad noklusējuma

PostgreSQL 12 sistēmās ar atbalstu LLVM JIT kompilācija ir iespējota pēc noklusējuma. Pirmkārt, jÅ«s saņemat atbalstu JIT dažām iekŔējām operācijām, un, otrkārt, vaicājumi ar izteiksmēm (vienkārŔākais piemērs ir x + y) atlases sarakstos (kas jums ir pēc SELECT), apkopojumi, izteiksmes ar WHERE klauzulām un citi var izmantot JIT, lai uzlabotu veiktspēju.

Tā kā sistēmā PostgreSQL 12 pēc noklusējuma ir iespējots JIT, veiktspēja uzlabosies pati par sevi, taču es iesaku pārbaudÄ«t lietojumprogrammu programmā PostgreSQL 11, kas ieviesa JIT, lai izmērÄ«tu vaicājuma veiktspēju un noskaidrotu, vai jums ir nepiecieÅ”ams kaut ko pielāgot.

Kā ar pārējām jaunajām funkcijām programmā PostgreSQL 12?

PostgreSQL 12 ir daudz lielisku jaunu funkciju, sākot ar iespēju pārbaudÄ«t JSON datus, izmantojot standarta SQL/JSON marÅ”ruta izteiksmes, lÄ«dz daudzfaktoru autentifikācijai ar parametru. clientcert=verify-full, izveidotas kolonnas un daudz kas cits. Pietiek atseviŔķam ierakstam.

Tāpat kā PostgreSQL 10, arÄ« PostgreSQL 12 uzlabos vispārējo veiktspēju tÅ«lÄ«t pēc jaunināŔanas. Jums, protams, var bÅ«t savs ceļŔ - pirms uzlabojumu iespējoÅ”anas pārbaudiet lietojumprogrammu lÄ«dzÄ«gos apstākļos ražoÅ”anas sistēmā, kā es to darÄ«ju ar PostgreSQL 10. Pat ja PostgreSQL 12 jau ir stabilāks, nekā es gaidÄ«ju, neesiet slinks ar testÄ“Å”anu. lietojumprogrammas rÅ«pÄ«gi pirms to laiÅ”anas ražoÅ”anā.

Avots: www.habr.com

Pievieno komentāru