Uppfærsla fyrir lata: hvernig PostgreSQL 12 bætir árangur

Uppfærsla fyrir lata: hvernig PostgreSQL 12 bætir árangur

12, nýjasta útgáfan af „besta opna samskiptagagnagrunni heims,“ kemur út eftir nokkrar vikur (ef allt gengur að óskum). Þetta fylgir venjulegri áætlun um að gefa út nýja útgáfu með fullt af nýjum eiginleikum einu sinni á ári, og satt að segja er það áhrifamikið. Þess vegna varð ég virkur meðlimur PostgreSQL samfélagsins.

Að mínu mati, ólíkt fyrri útgáfum, inniheldur PostgreSQL 12 ekki einn eða tvo byltingarkennda eiginleika (eins og skipting eða samhliða fyrirspurn). Ég gerði einu sinni grín að því að aðaleinkenni PostgreSQL 12 væri meiri stöðugleiki. Er það ekki það sem þú þarft þegar þú stjórnar mikilvægum gögnum fyrirtækisins?

En PostgreSQL 12 hættir ekki þar: með nýjum eiginleikum og endurbótum munu forrit skila betri árangri, og allt sem þú þarft að gera er að uppfæra!

(Jæja, kannski endurreisa vísitölurnar, en í þessari útgáfu er það ekki eins skelfilegt og við erum vön.)

Það verður frábært að uppfæra PostgreSQL og njóta strax umtalsverðra umbóta án óþarfa vesen. Fyrir nokkrum árum síðan fór ég yfir uppfærslu frá PostgreSQL 9.4 í PostgreSQL 10 og sá hvernig forritið flýtti sér þökk sé bættri samhliða fyrirspurn í PostgreSQL 10. Og, síðast en ekki síst, var nánast ekkert krafist af mér (bara stilltu stillingarbreytu max_parallel_workers).

Sammála, það er þægilegt þegar forrit virka betur strax eftir uppfærslu. Og við reynum mjög mikið að þóknast notendum, því PostgreSQL hefur fleiri og fleiri af þeim.

Svo hvernig getur einföld uppfærsla í PostgreSQL 12 gert þig hamingjusaman? Ég skal segja þér það núna.

Miklar endurbætur á verðtryggingu

Án flokkunar mun gagnagrunnur ekki ná langt. Hvernig er annars hægt að finna upplýsingar fljótt? Grundvallarvísitölukerfi PostgreSQL er kallað B-tré. Þessi tegund af vísitölu er fínstillt fyrir geymslukerfi.

Við notum einfaldlega rekstraraðilann CREATE INDEX ON some_table (some_column), og PostgreSQL gerir mikla vinnu til að halda vísitölunni uppfærðri á meðan við setjum stöðugt inn, uppfærum og eyðum gildum. Allt virkar af sjálfu sér, eins og fyrir töfra.

En PostgreSQL vísitölur hafa eitt vandamál - þær eru uppblásnar og taka upp auka pláss á disknum og draga úr afköstum við gagnaöflun og uppfærslu. Með "blæstri" á ég við að viðhalda vísitöluskipulaginu á árangurslausan hátt. Þetta gæti - eða ekki - tengst sorpinu sem það fjarlægir VACUUM (þökk sé Peter Gaghan fyrir upplýsingarnar)Peter Geoghegan)). Vísitala uppþemba er sérstaklega áberandi í vinnuálagi þar sem vísitalan er virkur að breytast.

PostgreSQL 12 bætir verulega afköst B-tré vísitölu og tilraunir með viðmið eins og TPC-C hafa sýnt að að meðaltali er 40% minna pláss notað núna. Nú eyðum við minni tíma ekki aðeins í að viðhalda B-tré vísitölum (þ.e. í ritaðgerðum), heldur einnig í að sækja gögn, vegna þess að vísitölurnar eru miklu minni.

Forrit sem uppfæra töflurnar sínar virkan - venjulega OLTP forrit (vinnslu í rauntíma) - mun nota disk og vinna úr beiðnum mun skilvirkari. Því meira pláss, því meira pláss þarf gagnagrunnurinn að stækka án þess að uppfæra innviðina.

Sumar uppfærsluaðferðir krefjast þess að endurbyggja B-tré vísitölur til að nýta þessa kosti (t.d. pg_uppfærsla mun ekki endurbyggja vísitölur sjálfkrafa). Í fyrri útgáfum af PostgreSQL leiddi endurbygging af stórum vísitölum á töflur til umtalsverðs niður í miðbæ vegna þess að ekki var hægt að gera breytingar á meðan. En PostgreSQL 12 hefur annan flottan eiginleika: nú geturðu endurbyggt vísitölur samhliða skipuninni ENDURSKRÁÐU SAMTÍMItil að forðast algjörlega niður í miðbæ.

Það eru aðrar endurbætur á flokkunarinnviði í PostgreSQL 12. Annað þar sem það var einhver galdur - skrifa fram í tímann, aka WAL (skrifa-ahead log). Framskráningarskrá skráir allar færslur í PostgreSQL ef bilun er og afritun. Forrit nota það til geymslu og bata á tímapunkti. Að sjálfsögðu er framskráningarskráin skrifuð á diskinn, sem getur haft áhrif á frammistöðu.

PostgreSQL 12 hefur dregið úr kostnaði við WAL færslur sem eru búnar til af GiST, GIN og SP-GiST vísitölunum við smíði vísitölunnar. Þetta veitir nokkra áþreifanlega kosti: WAL færslur taka minna pláss á plássi og gögn eru endurspiluð hraðar, eins og við endurheimt hamfara eða endurheimt á tímapunkti. Ef þú notar slíkar vísitölur í forritunum þínum (til dæmis, PostGIS-undirstaða landrýmisforrit nota GiST vísitöluna mikið), er þetta annar eiginleiki sem mun bæta upplifunina verulega án nokkurrar fyrirhafnar af þinni hálfu.

Skipting - stærri, betri, hraðari

PostgreSQL 10 kynnt yfirlýsandi skipting. Í PostgreSQL 11 er það orðið miklu auðveldara í notkun. Í PostgreSQL 12 geturðu breytt umfangi hluta.

Í PostgreSQL 12 hefur frammistaða skiptingarkerfisins orðið verulega betri, sérstaklega ef það eru þúsundir skiptinga í töflunni. Til dæmis, ef fyrirspurn hefur aðeins áhrif á nokkrar skiptingar í töflu með þúsundum þeirra mun hún keyra mun hraðar. Afköst eru ekki bara betri fyrir þessar tegundir fyrirspurna. Þú munt líka taka eftir hversu hraðari INSERT aðgerðir eru á borðum með mörgum skiptingum.

Skráning gagna með því að nota COPY - við the vegur, þetta er frábær leið magn gagna niðurhal og hér er dæmi að fá JSON — skiptingartöflur í PostgreSQL 12 hafa einnig orðið skilvirkari. Með COPY var allt þegar hratt, en í PostgreSQL 12 flýgur það algjörlega.

Þökk sé þessum kostum gerir PostgreSQL þér kleift að geyma enn stærri gagnasöfn og gera það auðveldara að sækja þau. Og engin fyrirhöfn af þinni hálfu. Ef forritið hefur margar skiptingar, eins og að taka upp tímaraðargögn, mun einföld uppfærsla bæta árangur þess verulega.

Þó að þetta sé ekki beinlínis „uppfærsla og njóttu“ framför, gerir PostgreSQL 12 þér kleift að búa til erlenda lykla sem vísa í skiptingartöflur, sem gerir skiptinguna ánægjulegt að vinna með.

MEÐ fyrirspurnum varð bara miklu betra

Þegar plástur var notaður fyrir innbyggðar algengar töflutjáningar (aka CTE, aka MEÐ fyrirspurnum), ég gat ekki beðið eftir að skrifa grein um hversu ánægðir forritarar með PostgreSQL voru. Þetta er einn af þessum eiginleikum sem mun flýta fyrir forritinu. Nema, auðvitað, þú notir CTE.

Mér finnst oft að nýliðar í SQL elska að nota CTE; ef þú skrifar þær á ákveðinn hátt, þá líður þér í raun eins og þú sért að skrifa bráðnauðsynlegt forrit. Persónulega fannst mér gaman að endurskrifa þessar fyrirspurnir til að komast um без CTE og auka framleiðni. Nú er allt öðruvísi.

PostgreSQL 12 gerir þér kleift að setja inn ákveðna tegund af CTE án aukaverkana (SELECT), sem er aðeins notað einu sinni undir lok beiðninnar. Ef ég fylgdist með CTE fyrirspurnunum sem ég endurskrifaði myndu flestar falla í þennan flokk. Þetta hjálpar forriturum að skrifa skýran kóða sem keyrir nú líka hratt.

Þar að auki fínstillir PostgreSQL 12 SQL framkvæmd sjálfa, án þess að þú þurfir að gera neitt. Og þó ég þurfi líklega ekki að fínstilla slíkar fyrirspurnir núna, þá er frábært að PostgreSQL heldur áfram að vinna að fínstillingu fyrirspurna.

Just-in-Time (JIT) - nú sjálfgefið

Á PostgreSQL 12 kerfum með stuðningi LLVM JIT samantekt er sjálfkrafa virkjuð. Fyrst af öllu færðu stuðning SLÁ fyrir sumar innri aðgerðir, og í öðru lagi, fyrirspurnir með tjáningu (einfaldasta dæmið er x + y) í völdum listum (sem þú ert með á eftir SELECT), samanlagnir, tjáningar með WHERE-ákvæðum og aðrir geta notað JIT til að bæta árangur.

Þar sem JIT er sjálfgefið virkt í PostgreSQL 12 mun frammistaða batna af sjálfu sér, en ég mæli með að prófa forritið í PostgreSQL 11, sem kynnti JIT, til að mæla árangur fyrirspurna og sjá hvort þú þurfir að stilla eitthvað.

Hvað með hina nýju eiginleikana í PostgreSQL 12?

PostgreSQL 12 er með fullt af flottum nýjum eiginleikum, allt frá getu til að skoða JSON gögn með því að nota staðlaða SQL/JSON leiðartjáningu til margþátta auðkenningar með færibreytu clientcert=verify-full, búið til dálka og margt fleira. Nóg fyrir sérstaka færslu.

Eins og PostgreSQL 10 mun PostgreSQL 12 bæta heildarafköst strax eftir uppfærsluna. Þú getur auðvitað haft þína eigin leið - prófaðu forritið við svipaðar aðstæður á framleiðslukerfinu áður en þú gerir endurbætur kleift, eins og ég gerði með PostgreSQL 10. Jafnvel þó að PostgreSQL 12 sé nú þegar stöðugra en ég bjóst við, ekki vera latur við að prófa umsóknir vandlega áður en þær eru gefnar út í framleiðslu.

Heimild: www.habr.com

Bæta við athugasemd