Aġġorna għall-għażżien: kif PostgreSQL 12 itejjeb il-prestazzjoni

Aġġorna għall-għażżien: kif PostgreSQL 12 itejjeb il-prestazzjoni

PostgreSQL 12, l-aħħar verżjoni ta '"l-aqwa database relazzjonali open source tad-dinja," qed toħroġ fi ftit ġimgħat (jekk kollox imur skond il-pjan). Dan isegwi l-iskeda tas-soltu ta 'rilaxx ta' verżjoni ġdida b'tunnellata ta 'karatteristiċi ġodda darba fis-sena, u franchement, dan huwa impressjonanti. Huwa għalhekk li sirt membru attiv tal-komunità PostgreSQL.

Fl-opinjoni tiegħi, kuntrarjament għal rilaxxi preċedenti, PostgreSQL 12 ma fihx karatteristika rivoluzzjonarja waħda jew tnejn (bħal diviżorju jew paralleliżmu tal-mistoqsijiet). Darba ċajtajt li l-karatteristika ewlenija ta 'PostgreSQL 12 hija stabbiltà akbar. Mhux dak li għandek bżonn meta timmaniġġja d-dejta kritika tan-negozju tiegħek?

Iżda PostgreSQL 12 ma jieqafx hemm: b'karatteristiċi u titjib ġodda, l-applikazzjonijiet se jaħdmu aħjar, u kull ma trid tagħmel hu li taġġorna!

(Tajjeb, forsi terġa 'tinbena l-indiċi, iżda f'din ir-rilaxx mhux tal-biża' daqs kemm aħna mdorrijin.)

Ikun tajjeb ħafna li taġġorna PostgreSQL u tgawdi immedjatament titjib sinifikanti mingħajr tfixkil bla bżonn. Ftit snin ilu, irrevedja aġġornament minn PostgreSQL 9.4 għal PostgreSQL 10 u rajt kif l-applikazzjoni tħaffef grazzi għall-paralleliżmu mtejjeb tal-mistoqsijiet f'PostgreSQL 10. U, l-aktar importanti, kważi xejn ma kien meħtieġ mingħandi (settja biss parametru ta' konfigurazzjoni max_parallel_workers).

Naqbel, huwa konvenjenti meta l-applikazzjonijiet jaħdmu aħjar immedjatament wara aġġornament. U nippruvaw ħafna biex nogħġbu lill-utenti, għax PostgreSQL għandu aktar u aktar minnhom.

Allura kif jista 'jagħmel aġġornament sempliċi għal PostgreSQL 12 ferħan? Jien ngħidlek issa.

Titjib kbir fl-indiċjar

Mingħajr indiċjar, database ma tmurx 'il bogħod. Kif inkella tista' ssib informazzjoni malajr? Is-sistema ta 'indiċjar fundamentali ta' PostgreSQL tissejjaħ B-siġra. Dan it-tip ta 'indiċi huwa ottimizzat għal sistemi ta' ħażna.

Aħna sempliċiment nużaw l-operatur CREATE INDEX ON some_table (some_column), u PostgreSQL jagħmel ħafna xogħol biex iżomm l-indiċi aġġornat waqt li kontinwament indaħħlu, naġġornaw u nħassru l-valuri. Kollox jaħdem waħdu, bħallikieku bil-maġija.

Iżda l-indiċi PostgreSQL għandhom problema waħda - huma huma minfuħa u tieħu spazju żejjed fuq disk u tnaqqas il-prestazzjoni tal-irkupru u l-aġġornament tad-data. Permezz ta '"bloat" irrid infisser iż-żamma ineffettiva ta' l-istruttura ta 'l-indiċi. Dan jista' - jew ma jistax - ikun relatat mat-tuples taż-żibel li jneħħi Vakwu (grazzi lil Peter Gaghan għall-informazzjoni)Peter Geoghegan)). Nefħa ta 'l-indiċi hija speċjalment notevoli fil-piżijiet tax-xogħol fejn l-indiċi qed jinbidel b'mod attiv.

PostgreSQL 12 itejjeb ħafna l-prestazzjoni tal-indiċi tas-siġar B, u esperimenti b'punti ta 'referenza bħal TPC-C wrew li issa jintuża medja ta' 40% inqas spazju. Issa nqattgħu inqas ħin mhux biss fuq iż-żamma ta 'indiċi B-tree (jiġifieri, fuq operazzjonijiet ta' kitba), iżda wkoll fuq l-irkupru tad-dejta, minħabba li l-indiċijiet huma ħafna iżgħar.

Applikazzjonijiet li jaġġornaw it-tabelli tagħhom b'mod attiv - tipikament applikazzjonijiet OLTP (l-ipproċessar tat-tranżazzjonijiet f'ħin reali) - se tuża disk u tipproċessa t-talbiet ħafna aktar effiċjenti. Iktar ma jkun hemm spazju fuq id-diska, iktar ma jkollha spazju id-database biex tikber mingħajr ma ttejjeb l-infrastruttura.

Xi strateġiji ta’ aġġornament jeħtieġu li jinbnew mill-ġdid l-indiċi tas-siġar B biex jieħdu vantaġġ minn dawn il-benefiċċji (eż. pg_upgrade mhux se jerġa’ jibni l-indiċi awtomatikament). Fil-verżjonijiet preċedenti ta 'PostgreSQL, il-bini mill-ġdid ta' indiċijiet kbar fuq it-tabelli rriżulta f'waqfien sinifikanti minħabba li ma setgħux isiru bidliet fil-frattemp. Iżda PostgreSQL 12 għandu karatteristika oħra friska: issa tista 'terġa' tibni l-indiċi b'mod parallel mal-kmand REINDIĊĊA FIL-KORRENTbiex tevita kompletament il-waqfien.

Hemm titjib ieħor fl-infrastruttura tal-indiċjar f'PostgreSQL 12. Ħaġa oħra fejn kien hemm xi maġija - log tal-kitba bil-quddiem, magħruf ukoll bħala WAL (write-ahead log). Ir-reġistru tal-kitba bil-quddiem jirreġistra kull tranżazzjoni f'PostgreSQL f'każ ta 'falliment u replikazzjoni. L-applikazzjonijiet jużawh għall-arkivjar u irkupru fil-ħin. Naturalment, ir-reġistru tal-kitba bil-quddiem huwa miktub fuq disk, li jista 'jkollhom impatt fuq il-prestazzjoni.

PostgreSQL 12 naqqas l-overhead tar-rekords WAL li huma maħluqa mill-indiċi GiST, GIN, u SP-GiST waqt il-kostruzzjoni tal-indiċi. Dan jipprovdi diversi benefiċċji tanġibbli: ir-rekords WAL jieħdu inqas spazju fuq id-diska, u d-dejta terġa' tintlagħab aktar malajr, bħal waqt l-irkupru minn diżastru jew l-irkupru fil-ħin. Jekk tuża dawn l-indiċi fl-applikazzjonijiet tiegħek (pereżempju, applikazzjonijiet ġeospazjali bbażati fuq PostGIS jużaw ħafna l-indiċi GiST), din hija karatteristika oħra li ttejjeb b'mod sinifikanti l-esperjenza mingħajr ebda sforz min-naħa tiegħek.

Il-qsim - akbar, aħjar, aktar mgħaġġel

PostgreSQL 10 introdott qsim dikjarattiv. F'PostgreSQL 11 sar ħafna aktar faċli biex tużah. F'PostgreSQL 12 tista' tbiddel l-iskala tat-taqsimiet.

F'PostgreSQL 12, il-prestazzjoni tas-sistema ta 'qsim saret aħjar b'mod sinifikanti, speċjalment jekk ikun hemm eluf ta' diviżorji fit-tabella. Pereżempju, jekk mistoqsija taffettwa biss ftit diviżorji f'tabella b'eluf minnhom, se tesegwixxi ħafna aktar malajr. Il-prestazzjoni mhix imtejba biss għal dawn it-tipi ta' mistoqsijiet. Tinnota wkoll kemm l-operazzjonijiet INSERT huma aktar mgħaġġla fuq tabelli b'diversi diviżorji.

Reġistrazzjoni tad-data bl-użu KOPJA - mill-mod, dan huwa mod tajjeb ħafna tniżżil ta' data bl-ingrossa u hawn eżempju qed jirċievi JSON — it-tabelli maqsuma f'PostgreSQL 12 saru wkoll aktar effiċjenti. B'COPY kollox kien diġà mgħaġġel, iżda f'PostgreSQL 12 assolutament itir.

Grazzi għal dawn il-vantaġġi, PostgreSQL jippermettilek taħżen settijiet ta 'dejta saħansitra akbar u tagħmilhom aktar faċli biex jiġu rkuprati. U l-ebda sforz min-naħa tiegħek. Jekk l-applikazzjoni għandha ħafna diviżorji, bħall-irrekordjar tad-dejta tas-serje tal-ħin, aġġornament sempliċi se jtejjeb b'mod sinifikanti l-prestazzjoni tiegħu.

Filwaqt li dan mhuwiex eżattament titjib "taġġorna u jgawdi", PostgreSQL 12 jippermettilek toħloq ċwievet barranin li jirreferu għal tabelli maqsuma, u b'hekk il-qsim ikun pjaċir jaħdem magħhom.

B'mistoqsijiet biss marret ħafna aħjar

Meta ġiet applikata garża għal espressjonijiet ta' tabella komuni integrati (magħruf ukoll bħala CTE, aka WITH queries), ma stajtx nistenna li nikteb artiklu dwaru kemm kienu kuntenti l-iżviluppaturi tal-applikazzjoni bil-PostgreSQL. Din hija waħda minn dawk il-karatteristiċi li se tħaffef l-applikazzjoni. Sakemm, ovvjament, ma tużax CTE.

Spiss insib li l-ġodda tal-SQL iħobbu jużaw CTEs; jekk tiktebhom b'ċertu mod, verament tħoss li qed tikteb programm imperattiv. Personalment, għoġobni nikteb mill-ġdid dawn il-mistoqsijiet biex inmur mingħajr CTE u żżid il-produttività. Issa kollox huwa differenti.

PostgreSQL 12 jippermettilek inline tip speċifiku ta' CTE mingħajr effetti sekondarji (SELECT), li tintuża darba biss lejn it-tmiem tat-talba. Jekk inżomm kont tal-mistoqsijiet tas-CTE li ktibt mill-ġdid, ħafna minnhom jaqgħu f'din il-kategorija. Dan jgħin lill-iżviluppaturi jiktbu kodiċi ċar li issa wkoll jaħdem malajr.

Barra minn hekk, PostgreSQL 12 jottimizza l-eżekuzzjoni SQL innifsu, mingħajr ma jkollok tagħmel xejn. U għalkemm probabbilment mhux se jkolli bżonn nottimizza tali mistoqsijiet issa, huwa tajjeb ħafna li PostgreSQL ikompli jaħdem fuq l-ottimizzazzjoni tal-mistoqsijiet.

Just-in-Time (JIT) - issa default

Fuq sistemi PostgreSQL 12 b'appoġġ LLVM Il-kumpilazzjoni JIT hija attivata awtomatikament. L-ewwelnett, ikollok appoġġ JIT għal xi operazzjonijiet interni, u t-tieni, mistoqsijiet b'espressjonijiet (l-aktar eżempju sempliċi huwa x + y) f'listi magħżula (li għandek wara SELECT), aggregati, espressjonijiet bi klawsoli WHERE u oħrajn jistgħu jużaw JIT biex itejbu l-prestazzjoni.

Peress li JIT huwa attivat b'mod awtomatiku f'PostgreSQL 12, il-prestazzjoni se titjieb waħedha, iżda nirrakkomanda li tittestja l-applikazzjoni f'PostgreSQL 11, li introduċa JIT, biex titkejjel il-prestazzjoni tal-mistoqsijiet u tara jekk għandekx bżonn tistuna xi ħaġa.

Xi ngħidu dwar il-bqija tal-karatteristiċi ġodda f'PostgreSQL 12?

PostgreSQL 12 għandu ton ta 'karatteristiċi ġodda friski, mill-abbiltà li teżamina dejta JSON billi tuża espressjonijiet ta' rotta SQL/JSON standard għal awtentikazzjoni b'ħafna fatturi b'parametru clientcert=verify-full, ħoloq kolonni u ħafna aktar. Biżżejjed għal post separat.

Bħal PostgreSQL 10, PostgreSQL 12 se jtejjeb il-prestazzjoni ġenerali immedjatament wara l-aġġornament. Int, ovvjament, jista 'jkollok it-triq tiegħek - ittestja l-applikazzjoni taħt kundizzjonijiet simili fuq is-sistema ta' produzzjoni qabel ma tippermetti titjib, kif għamilt ma 'PostgreSQL 10. Anki jekk PostgreSQL 12 huwa diġà aktar stabbli milli stennejt, tkun għażżien fl-ittestjar l-applikazzjonijiet bir-reqqa, qabel ma joħorġuhom fil-produzzjoni.

Sors: www.habr.com

Żid kumment