, viimane versioon «maailma parimast avatud lĂ€htekoodiga relatiivsest andmebaasist» ilmub paar-kolm nĂ€dalat pĂ€rast (kui kĂ”ik lĂ€heb plaanipĂ€raselt). See vastab tavapĂ€rasele ajakavale â uus versioon, mis pakub hulgaliselt uusi vĂ”imalusi, ilmub kord aastas ja, ausalt öeldes, see on muljetavaldav. SeetĂ”ttu olen ma aktiivne PostgreSQL kogukonna liige.
Minu arvates ei sisalda PostgreSQL 12, erinevalt varasematest versioonidest, ĂŒhtegi revolutsioonilist funktsiooni (nagu nĂ€iteks sektsioneerimine vĂ”i pĂ€ringute paralleelsus). Ma naljatasin, et PostgreSQL 12 peaesineja on suurem stabiilsus. Ja kas see ei ole see, mida vajate, kui haldate oma Ă€ri kriitilisi andmeid?
Kuid PostgreSQL 12 ei piirdu sellega: uute vĂ”imaluste ja tĂ€iustustega töötavad rakendused paremini, ja teie ainus ĂŒlesanne on teha uuendus!
(Noh, vĂ”ib-olla tuleb indekseid ĂŒmber ehitada, kuid selles versioonis ei ole see nii hirmus, nagu oleme harjunud.)
See oleks suurepĂ€rane â uuendada PostgreSQL ja nautida kohe mĂ€rkimisvÀÀrseid tĂ€iustusi ilma liigsete pingutusteta. MĂ”ned aastad tagasi analĂŒĂŒsisin ĂŒleminekut PostgreSQL 9.4-lt PostgreSQL 10-le ja nĂ€gin, kuidas rakendus kiirenes tĂ€nu PostgreSQL 10 tĂ€iustatud pĂ€ringute paralleelsusele. Ja mis kĂ”ige tĂ€htsam, minult peaaegu ei olnud midagi vaja (ainult mÀÀrata konfiguratsiooni parameeter max_parallel_workers).
Olge nÔus, et on mugav, kui kohe pÀrast uuendust töötavad rakendused paremini. Me pingutame palju, et meie kasutajad oleksid rahul, sest PostgreSQL kasutajate arv kasvab.
Ja kuidas teeb lihtne uuendus PostgreSQL 12 teid Ônnelikuks? RÀÀgin sellest kohe.
Olulised tÀiustused indekseerimises
Ilma indekseerimiseta ei vii andmebaas kaugele. Kuidas muidu kiiresti teavet leida? PostgreSQL pĂ”hindekseerimisĂŒsteem on . See indeksi tĂŒĂŒp on optimeeritud salvestussĂŒsteemide jaoks.
Me kasutame lihtsalt operaatorit CREATE INDEX ON some_table (some_column), ja PostgreSQL teeb suure töö indeksi ajakohasena hoidmiseks, kui me pidevalt lisame, uuendame ja kustutame vÀÀrtusi. KÔik töötab iseenesest, nagu maagia.
Kuid PostgreSQL indeksitel on ĂŒks probleem â nad ja vĂ”tavad kettal liigse ruumi ning andmete vĂ€ljavĂ”tmise ja uuendamise jĂ”udlus langeb. All "paisutamise" mĂ”tlen ma ebaefektiivset indekstruktuuri hooldamist. See vĂ”ib olla â vĂ”i mitte olla â seotud prĂŒgi tupleâite, mida eemaldatakse. (tĂ€nud teabe eest Peter Geogheganile ()). Indeksi paisutamine on eriti mĂ€rgatav töökoormustes, kus indeksit muudetakse aktiivselt.
PostgreSQL 12 tĂ”hustab B-puu indeksite toimimist oluliselt, ja TPC-C tĂŒĂŒpi testidega katsetamine on nĂ€idanud, et ruumi kasutatakse nĂŒĂŒd keskmiselt 40% vĂ€hem. NĂŒĂŒd kulutame vĂ€hem aega mitte ainult B-puu indeksite hooldamiseks (st kirjete jaoks mĂ”eldud toimingutele), vaid ka andmete vĂ€ljavĂ”tmiseks, kuna indeksid on nĂŒĂŒd palju vĂ€iksemad.
Rakendused, mis uuendavad oma tabeleid aktiivselt â tavaliselt OLTP rakendused () â kasutavad ketast palju efektiivsemalt ja töötlevad pĂ€ringuid. Mida rohkem kettal ruumi on, seda rohkem on andmebaasil kasvu ruumi ilma infrastruktuuri uuendamiseta.
MĂ”ned uuendustegevuse strateegiad nĂ”uavad B-puu indeksite taastamist nende eeliste kasutamiseks (nĂ€iteks, ei taasta indekseid automaatselt). Varasemates PostgreSQL versioonides pĂ”hjustas suurte indexite taastamine tabelites mĂ€rkimisvÀÀrse seisaku, kuna sel ajal ei saanud muudatusi teha. Kuid PostgreSQL 12-s on veel ĂŒks Ă€ge funktsioon: indekseid saab nĂŒĂŒd taastada paralleelselt kĂ€suga , et tĂ€ielikult vĂ€ltida seisaku tekkimist.
PostgreSQL 12-s on ka teisi indekstruktuuri infrastruktuuri tĂ€iustusi. Veel ĂŒks asi, kus ei jÀÀnud ilma vĂ”luta â , tuntud ka kui WAL (write-ahead log). Eelnevat kirje ajalugu registreerib iga tehingu PostgreSQL-is rikka tĂ”rke- ja replikaatimise juhtimiseks. Rakendused kasutavad seda arhiivimiseks ja . Loomulikult toimub eelneva kirje ajalugu kettale, mis vĂ”ib mĂ”jutada jĂ”udlust.
PostgreSQL 12 vĂ€hendas WAL-kirjete kulusid, mida GiST-, GIN- ja SP-GiST-indeksite loomisel genereeritakse. See toob endaga kaasa mitu kĂ€egakatsutavat eelist: WAL-kirjed vĂ”tavad vĂ€hem ruumi kettal ning andmete taastamine, nĂ€iteks pĂ€rast tĂ”rget vĂ”i aegahetke taastamisel, on kiirem. Kui kasutate oma rakendustes selliseid indekseid (nĂ€iteks georuumilised rakendused, mis pĂ”hinevad PostGIS-il, kasutavad sageli GiST-indeksit), on see veel ĂŒks funktsioon, mis parandab oluliselt töö tĂ”husust teie pingutusteta.
Jaotamine â rohkem, parem, kiirem
PostgreSQL 10-s toodi sisse . PostgreSQL 11-s muutus selle kasutamine palju lihtsamaks. PostgreSQL 12-s on vÔimalik jaotuse mastaapi muuta.
PostgreSQL 12-s on jaotussĂŒsteemi jĂ”udlus mĂ€rkimisvÀÀrselt paranenud, eriti kui tabelis on tuhandeid jaotusi. NĂ€iteks, kui pĂ€ring kĂ€sitleb vaid mĂ”nda jaotust tabelis, kus neid on tuhandeid, siis tĂ€idetakse see palju kiiremini. JĂ”udlus on paranenud mitte ainult selliste pĂ€ringute puhul. Samuti mĂ€rkate, kui on kiirenetud INSERT-toimingud tabelites, kus on palju jaotusi.
Andmete salvestamine kasutades â muide, see on suurepĂ€rane meetod ja siin on nĂ€ide â ja jaotatud tabelitesse PostgreSQL 12-s toimib see samuti tĂ”husamalt. COPY tegemine oli juba kiire, aga PostgreSQL 12-s on see tĂ€iesti lendav.
Nende eeliste tÔttu saab PostgreSQL-s hoida veel suuremaid andmekogumeid ja nende vÀljavÔtmine on muutunud lihtsamaks. Ja te ei pea selle nimel pingutama. Kui rakendusel on palju jaotusi, nÀiteks see salvestab ajareal pÔhinevaid andmeid, siis lihtne uuendus parandab oluliselt selle jÔudlust.
Ja kuigi see tĂ€iustamine ei kuulu just kategooriasse âuuendame ja oleme Ă”nnelikudâ, on PostgreSQL 12-s vĂ”imalik luua vĂ€lish vĂ”tmeid, mis viitavad jaotatud tabelitele, et jaotamisega tegelemine oleks nauditav.
WITH pÀringud on muutunud palju paremaks
Kui (need on CTE-d, Need on WITH pĂ€ringud), ma ei jĂ”udnud Ă€ra oodata, et kirjutada artikkel sellest, . See on ĂŒks neist funktsioonidest, mis kiirendavad rakendust. Kui muidugi kasutate CTE-d.
Ma sageli mĂ€rkan, et algajad SQL-is armastavad kasutada CTE-d: kui neid kirjutada kindlal viisil, tunned tĂ”eliselt, et kirjutad imperatiivset programmi. Isiklikult meeldis mulle neid pĂ€ringuid ĂŒmber kirjutada, et vĂ€hendada ilma CTE-d ja suurendada jĂ”udlust. Praegu on olukord teine.
PostgreSQL 12 vĂ”imaldab teatud tĂŒĂŒpi CTE-d sisestada ilma kĂ”rvaltoimeteta (SELECT), mida kasutatakse ainult korra, lĂ€hedal pĂ€ringu lĂ”pule. Kui ma oleksin pidanud statistikat CTE-pĂ€ringute kohta, mida ma ĂŒmber kirjutasin, siis enamik neist kuuluks sellesse kategooriasse. See aitab arendajatel kirjutada arusaadavat koodi, mis nĂŒĂŒd töötab veel kiiremini.
Veelgi enam, PostgreSQL 12 optimeerib SQL-i tĂ€itmist automaatselt, te ei pea midagi tegema. Ja kuigi nĂŒĂŒd on ilmselt mul vaja neid pĂ€ringuid optimeerida, on tore, et PostgreSQL jĂ€tkab pĂ€ringute optimeerimise kallal töötamist.
Just-in-Time (JIT) â nĂŒĂŒd vaikimisi
PostgreSQL 12 sĂŒsteemides, kus on tugi JIT-kompileerimine on vaikimisi lubatud. Esiteks saate toe teatud sisemiste operatsioonide jaoks, ja teiseks saavad vĂ€ljendid pĂ€ringutes (lihtsaim nĂ€ide â x + y) valikuloendis (mis on teie SELECT-i jĂ€rel), agregaatide, WHERE-lause vĂ€ljendite ja muude jaoks kasutada JIT-i jĂ”udluse suurendamiseks.
Kuna JIT on PostgreSQL 12-s vaikimisi lubatud, paranenud jÔudlus, kuid soovitan testida rakendust PostgreSQL 11-s, kus JIT alles ilmus, et mÔÔta pÀringute jÔudlust ja teada saada, kas midagi peab seadistama.
Aga mis on PostgreSQL 12 muud uued funktsioonid?
PostgreSQL 12-s on hulgaliselt uusi toredaid funktsioone â alates vĂ”imalusest uurida JSON-andmeid standardsete SQL/JSON marsruutimise vĂ€ljendite abil kuni mitme teguri autentimiseni parameetriga clientcert=verify-full, genereeritud veergude ja muu hulga asjadeni. Sellega jĂ€tkub ĂŒhte postitust.
Nagu PostgreSQL 10, suurendab PostgreSQL 12 ĂŒldist jĂ”udlust kohe pĂ€rast uuendamist. Teil vĂ”ib loomulikult olla oma tee â testige rakendust sarnastes tingimustes tootmisĂŒsteemis, enne kui aktiveerite tĂ€iustused, nagu tegin mina PostgreSQL 10-ga. Isegi kui PostgreSQL 12 on juba praegu stabiilsem, kui ma ette kujutasin, Ă€rge laske laisel testida rakendusi kvaliteetselt, enne kui need tootmisse viia.
Allikas: habr.com
