Kwalite maka ndị umengwụ: ka PostgreSQL 12 si eme ka arụmọrụ dịkwuo mma

Kwalite maka ndị umengwụ: ka PostgreSQL 12 si eme ka arụmọrụ dịkwuo mma

PostgreSQL 12, ụdị kachasị ọhụrụ nke "nchịkọta nchekwa data mepere emepe kachasị mma n'ụwa," na-apụta n'ime izu ole na ole (ma ọ bụrụ na ihe niile na-aga dị ka atụmatụ si dị). Nke a na-eso usoro a na-emebu nke iwepụta ụdị ọhụrụ yana ọtụtụ atụmatụ ọhụrụ otu ugboro n'afọ, na n'eziokwu, nke ahụ na-adọrọ mmasị. Ọ bụ ya mere m ji bụrụ onye na-arụsi ọrụ ike na obodo PostgreSQL.

N'uche nke m, n'adịghị ka mwepụta ndị gara aga, PostgreSQL 12 enweghị otu njirimara mgbanwe ma ọ bụ abụọ (dị ka nkebi ma ọ bụ ajụjụ myirịta). M na-akparị otu oge na akụkụ bụ isi nke PostgreSQL 12 bụ nkwụsi ike ka ukwuu. Ọ bụghị nke ahụ bụ ihe ịchọrọ mgbe ị jikwaa data dị oke mkpa nke azụmahịa gị?

Mana PostgreSQL 12 anaghị akwụsị ebe ahụ: site na njirimara na nkwalite ọhụrụ, ngwa ga-arụ ọrụ nke ọma, na ihe niile ị ga - eme bụ nkwalite!

(Ọfọn, ma eleghị anya wughachi index, ma na ntọhapụ a adịghị atụ egwu dị ka anyị na-emebu.)

Ọ ga-adị mma ịkwalite PostgreSQL wee nwee ọmarịcha ndozi ozugbo na-enweghị mkpasu iwe na-enweghị isi. Afọ ole na ole gara aga, enyochara m nkwalite site na PostgreSQL 9.4 ruo PostgreSQL 10 wee hụ ka ngwa ahụ si gbasaa ekele maka mgbaghara ajụjụ dị mma na PostgreSQL 10. Ma, nke kachasị mkpa, ọ fọrọ nke nta ka ọ bụrụ ihe ọ bụla achọrọ n'aka m (naanị setịpụ nhazi nhazi. max_parallel_workers).

Kwere, ọ dị mma mgbe ngwa na-arụ ọrụ nke ọma ozugbo nkwalite. Anyị na-agbasi mbọ ike ime ihe na-atọ ndị ọrụ ụtọ, n'ihi na PostgreSQL nwere ọtụtụ n'ime ha.

Yabụ kedu ka nkwalite dị mfe na PostgreSQL 12 ga-esi mee gị obi ụtọ? Aga m agwa gị ugbua.

Nnukwu mmezi indexing

Enweghị indexing, nchekwa data agaghị aga ebe dị anya. Kedu ka ị ga-esi chọta ozi ngwa ngwa? A na-akpọ usoro nrịbama ntọala PostgreSQL B-osisi. A na-ahazi ụdị ndeksi a maka sistemụ nchekwa.

Naanị anyị na-eji onye ọrụ CREATE INDEX ON some_table (some_column), na PostgreSQL na-arụ ọrụ dị ukwuu iji mee ka ndeksi dị ọhụrụ ka anyị na-etinye oge niile, na-emelite, na ihichapụ ụkpụrụ. Ihe niile na-arụ ọrụ n'onwe ya, dị ka a ga-asị na ọ bụ anwansi.

Mana ndenye aha PostgreSQL nwere otu nsogbu - ha na-ebu ọnụ ma were ohere diski ọzọ wee belata arụmọrụ nke iweghachite na imelite data. Site na "bloat" m na-ekwu na-adịghị arụ ọrụ na-edobe usoro index. Nke a nwere ike - ma ọ bụ enweghị ike - metụtara tuple mkpofu nke ọ na-ewepụ AHỤ (daalụ Peter Gaghan maka ozi ahụ)Peter Geoghegan)). Index bloat bụ nke a na-ahụ anya nke ọma na ibu ọrụ ebe ndeksi na-agbanwe nke ọma.

PostgreSQL 12 na-eme ka arụmọrụ nke ndepụta B-osisi dịkwuo mma, na nnwale ndị nwere akara dị ka TPC-C egosila na na nkezi 40% obere ohere ugbu a na-eji. Ugbu a, anyị na-etinye obere oge ọ bụghị naanị n'ịnọgide na-edobe ndepụta B-osisi (ya bụ, na-arụ ọrụ ederede), kamakwa na iweghachite data, n'ihi na indexes dị ntakịrị.

Ngwa na-arụsi ọrụ ike na-emelite tebụl ha - na-abụkarị ngwa OLTP (nhazi azụmahịa ozugbo) - ga-eji diski ma hazie arịrịọ nke ọma karịa. Ka ohere diski dịkwuo, ka ohere nchekwa data ga-eto eto na-enweghị ịkwalite akụrụngwa.

Ụfọdụ atụmatụ nkwalite chọrọ iwughachi ndepụta aha osisi B iji nweta uru ndị a (dịka ọmụmaatụ. pg_mmelite agaghị wughachi index na-akpaghị aka). Na nsụgharị PostgreSQL ndị gara aga, iwughachi nnukwu indexes na tebụl rụpụtara nnukwu ọdịda n'ihi na enweghị ike ịme mgbanwe n'oge a. Mana PostgreSQL 12 nwere njirimara ọzọ mara mma: ugbu a ị nwere ike wughachi indexes n'otu aka ahụ na iwu ahụ. REINDEX n'otu ogeka kpamkpam zere downtime.

Enwere nkwalite ndị ọzọ na akụrụngwa indexing na PostgreSQL 12. Ihe ọzọ ebe enwere anwansi - ide-n'ihu log, aka WAL (dere-n'ihu log). Ndekọ ederede n'ihu na-edekọ azụmahịa ọ bụla na PostgreSQL ma ọ bụrụ na ọdịda dara na mmegharị ya. Ngwa na-eji ya maka nchekwa na mgbake n'oge. N'ezie, a na-ede akwụkwọ ndekọ ederede na diski, nke nwere ike imetụta arụmọrụ.

PostgreSQL 12 ebelatala isi ihe ndekọ WAL nke ihe ndeksi GiST, GIN na SP-GiST mebere n'oge a na-arụ ndeksi. Nke a na-enye ọtụtụ uru a na-ahụ anya: Ihe ndekọ WAL na-ewe obere ohere diski, a na-emegharị data ngwa ngwa, dị ka n'oge mgbake ọdachi ma ọ bụ mgbake oge. Ọ bụrụ na ị na-eji index dị otú ahụ na ngwa gị (dịka ọmụmaatụ, ngwa geospatial dabeere na PostGIS na-eji index GiST ọtụtụ), nke a bụ ihe ọzọ ga-eme ka ahụmịhe ahụ dịkwuo mma n'enweghị mgbalị ọ bụla n'akụkụ gị.

Nkebi - ibu, mma, ngwa ngwa

ewebata PostgreSQL 10 nkewa nkwupụta. Na PostgreSQL 11 ọ dịla mfe iji. Na PostgreSQL 12, ị nwere ike ịgbanwe nha nke ngalaba.

Na PostgreSQL 12, arụmọrụ nke usoro nkewa aghọwo nke ọma karị, karịsịa ma ọ bụrụ na e nwere ọtụtụ puku akụkụ na tebụl. Dịka ọmụmaatụ, ọ bụrụ na ajụjụ na-emetụta naanị akụkụ ole na ole na tebụl nwere ọtụtụ puku n'ime ha, ọ ga-eme ngwa ngwa. Ọ bụghị naanị na emelitere arụmọrụ maka ụdị ajụjụ ndị a. Ị ga-ahụkwa ka ọrụ INSERT si dị ngwa ngwa na tebụl nwere ọtụtụ akụkụ.

Iji dekọọ data Detuo - Site n'ụzọ, nke a bụ nnukwu ụzọ nbudata data buru ibu na ebe a bụ ihe atụ na-enweta JSON - Tebụl ndị kewara ekewa na PostgreSQL 12 abụrụla nke ọma. Na COPY ihe niile adịlarị ngwa ngwa, mana na PostgreSQL 12 ọ na-efe efe kpamkpam.

N'ihi uru ndị a, PostgreSQL na-enye gị ohere ịchekwa ọbụna nhazi data buru ibu ma mee ka ọ dị mfe iji weghachite. Ọ dịghịkwa mgbalị n'akụkụ gị. Ọ bụrụ na ngwa ahụ nwere ọtụtụ akụkụ, dị ka ndekọ data usoro oge, nkwalite dị mfe ga-eme ka arụmọrụ ya dịkwuo mma.

Ọ bụ ezie na nke a abụghị kpọmkwem nkwalite "mmelite ma nwee ọ enjoyụ", PostgreSQL 12 na-enye gị ohere ịmepụta igodo mba ọzọ nke na-ezo aka na tebụl ndị kewara ekewa, na-eme ka nkewa bụrụ ihe ụtọ iji rụọ ọrụ.

N'ajụjụ ọnụ nwetara nke ọma

Mgbe etinyere patch maka okwu tebụl nkịtị arụnyere n'ime (aka CTE, aka WITH ajụjụ), enweghị m ike ichere ka m dee akụkọ gbasara ya ka ndị mmepe ngwa nwere PostgreSQL si nwee obi ụtọ. Nke a bụ otu n'ime atụmatụ ndị ga-eme ngwa ngwa. Ọ gwụla ma, n'ezie, ị na-eji CTE.

M na-achọpụtakarị na ndị ọhụrụ SQL na-enwe mmasị iji CTE ma ọ bụrụ na ị na-ede ha otu ụzọ, ọ na-adị gị ka ị na-ede ihe omume dị mkpa. Onwe m, ọ masịrị m idegharị ajụjụ ndị a ka m wee gbagharịa enweghị CTE ma na-abawanye mmepụta. Ugbu a ihe niile dị iche.

PostgreSQL 12 na-enye gị ohere ịdebanye aha otu ụdị CTE na-enweghị mmetụta ọ bụla.SELECT), nke a na-eji naanị otu ugboro n'akụkụ njedebe nke arịrịọ ahụ. Ọ bụrụ na m debere ajụjụ CTE m degharịrị, ọtụtụ n'ime ha ga-adaba na ngalaba a. Nke a na-enyere ndị mmepe aka ide koodu doro anya nke na-agbakwa ọsọ ọsọ ugbu a.

Ọzọkwa, PostgreSQL 12 na-ebuli ogbugbu SQL n'onwe ya, na-enweghị ịme ihe ọ bụla. Ma n'agbanyeghị na m gaghị achọ ịkwalite ajụjụ ndị dị otú ahụ ugbu a, ọ dị mma na PostgreSQL na-aga n'ihu na-arụ ọrụ na njikarịcha ajụjụ.

Just-in-Time (JIT) - ndabara ugbu a

Na sistemụ PostgreSQL 12 nwere nkwado LLVM Agbanyere mkpokọta JIT na ndabara. Nke mbụ, ị ga-enweta nkwado HIT maka ụfọdụ arụmọrụ ime, na nke abụọ, ajụjụ nwere okwu (ihe atụ kachasị mfe bụ x + y) na listi ahọpụtara (nke ị nwere mgbe SELECT), nchịkọta, okwu nwere WHERE clauses na ndị ọzọ nwere ike iji JIT kwalite arụmọrụ.

Ebe ọ bụ na enyere JIT aka na ndabara na PostgreSQL 12, arụmọrụ ga-akawanye mma n'onwe ya, mana m na-akwado ịnwale ngwa ahụ na PostgreSQL 11, nke webatara JIT, iji tụọ arụmọrụ ajụjụ wee hụ ma ọ bụrụ na ịchọrọ ịmegharị ihe ọ bụla.

Kedu maka njirimara ọhụrụ ndị ọzọ na PostgreSQL 12?

PostgreSQL 12 nwere ọtụtụ atụmatụ ọhụrụ dị mma, site n'ikike iji nyochaa data JSON site na iji usoro ụzọ SQL/JSON ọkọlọtọ gaa na nyocha ọtụtụ ihe na oke. clientcert=verify-full, kere ogidi na ọtụtụ ndị ọzọ. Zuru oke maka post dị iche.

Dị ka PostgreSQL 10, PostgreSQL 12 ga-emeziwanye arụmọrụ n'ozuzu ya ozugbo nkwalite ahụ gasịrị. Ị, n'ezie, nwere ike ịnweta ụzọ nke aka gị - nwalee ngwa ahụ n'okpuru ọnọdụ ndị yiri ya na usoro mmepụta tupu ịmalite imeziwanye, dị ka m mere na PostgreSQL 10. Ọbụna ma ọ bụrụ na PostgreSQL 12 adịlarị karịa ka m tụrụ anya, adịghị umengwụ na ule. ngwa nke ọma, tupu ahapụ ha n'ime mmepụta.

isi: www.habr.com

Tinye a comment