Mizajou pou parese: ki jan PostgreSQL 12 amelyore pèfòmans

Mizajou pou parese: ki jan PostgreSQL 12 amelyore pèfòmans

PostgreSQL 12, dènye vèsyon an nan "pi bon baz done relasyon sous louvri nan mond lan," ap soti nan yon koup la semèn (si tout ale dapre plan). Sa a swiv orè abityèl pou pibliye yon nouvo vèsyon ak yon tòn nouvo karakteristik yon fwa chak ane, e franchman, sa a enpresyonan. Se poutèt sa mwen te vin yon manm aktif nan kominote PostgreSQL la.

Dapre mwen, kontrèman ak degaje anvan yo, PostgreSQL 12 pa gen youn oswa de karakteristik revolisyonè (tankou patisyon oswa paralelis rechèch). Yon fwa mwen te blag ke karakteristik prensipal la nan PostgreSQL 12 se pi gwo estabilite. Èske se pa sa ou bezwen lè ou jere done kritik biznis ou a?

Men, PostgreSQL 12 pa sispann la: ak nouvo karakteristik ak amelyorasyon, aplikasyon yo pral fè pi byen, ak tout sa ou bezwen fè se ajou!

(Oke, petèt rebati endèks yo, men nan lage sa a li pa menm pè jan nou te abitye fè.)

Li pral bon pou ajou PostgreSQL epi imedyatman jwi amelyorasyon enpòtan san meli melo pa nesesè. Kèk ane de sa, mwen te revize yon ajou soti nan PostgreSQL 9.4 a PostgreSQL 10 epi mwen te wè ki jan aplikasyon an te akselere grasa paralelis rechèch amelyore nan PostgreSQL 10. Epi, sa ki pi enpòtan, prèske pa gen anyen yo te mande nan men mwen (jis mete yon paramèt konfigirasyon). max_parallel_workers).

Dakò, li pratik lè aplikasyon yo travay pi byen imedyatman apre yon ajou. Epi nou eseye trè difisil pou fè itilizatè yo plezi, paske PostgreSQL gen plis ak plis ladan yo.

Se konsa, ki jan yon senp amelyorasyon nan PostgreSQL 12 ka fè ou kontan? Mwen pral di w kounye a.

Gwo amelyorasyon Indexing

San yo pa Indexing, yon baz done pa pral ale lwen. Ki lòt fason ou ka jwenn enfòmasyon byen vit? Yo rele sistèm endèks fondamantal PostgreSQL la B-pyebwa. Sa a se kalite endèks optimize pou sistèm depo.

Nou senpleman itilize operatè a CREATE INDEX ON some_table (some_column), ak PostgreSQL fè anpil travay pou kenbe endèks la ajou pandan ke nou toujou ap mete, mete ajou, ak efase valè yo. Tout bagay ap travay poukont li, tankou pa maji.

Men, endèks PostgreSQL gen yon pwoblèm - yo yo gonfle epi pran plis espas disk epi redwi pèfòmans rekipere done ak ajou. Pa "gonfle" mwen vle di inefikas kenbe estrikti endèks la. Sa a ka - oswa pa ka - gen rapò ak tuple yo fatra ke li retire Vakyòm (mèsi a Peter Gaghan pou enfòmasyon an)Pyè Geoghegan)). Endèks gonfleman se espesyalman aparan nan kantite travay kote endèks la ap chanje aktivman.

PostgreSQL 12 anpil amelyore pèfòmans nan endèks B-tree, ak eksperyans ak referans tankou TPC-C te montre ke an mwayèn 40% mwens espas kounye a itilize. Koulye a, nou pase mwens tan pa sèlman sou kenbe endis B-tree (ki se, sou operasyon ekri), men tou sou rekipere done, paske endis yo pi piti anpil.

Aplikasyon ki aktivman mete ajou tab yo - tipikman aplikasyon OLTP (pwosesis tranzaksyon an tan reyèl) - pral sèvi ak disk ak pwosesis demann pi plis efikasite. Plis espas disk, plis espas baz done a gen pou grandi san yo pa amelyore enfrastrikti a.

Gen kèk estrateji amelyorasyon ki mande pou rebati endis B-tree pou pwofite avantaj sa yo (egzanp. pg_upgrade pa pral rebati endèks otomatikman). Nan vèsyon anvan PostgreSQL, rekonstwi gwo endèks sou tab yo te lakòz D 'siyifikatif paske chanjman pa t 'kapab fèt nan entre-temps la. Men, PostgreSQL 12 gen yon lòt karakteristik fre: kounye a ou ka rebati endèks nan paralèl ak lòd la REINDEX AK TANTANTANpou evite konplètman D '.

Gen lòt amelyorasyon nan enfrastrikti Indexing nan PostgreSQL 12. Yon lòt bagay kote te gen kèk maji - ekri-davan boutèy demi lit, aka WAL (write-ahead log). Yon jounal ekri davans anrejistre chak tranzaksyon nan PostgreSQL nan ka echèk ak replikasyon. Aplikasyon yo sèvi ak li pou achiv ak rekiperasyon pwen nan tan. Natirèlman, jounal ekri-ahead ekri sou disk, sa ki ka afekte pèfòmans.

PostgreSQL 12 te redwi anlè dosye WAL ke endis GiST, GIN, ak SP-GiST kreye pandan konstriksyon endèks yo. Sa a bay plizyè benefis byen mèb: Dosye WAL pran mwens espas disk, epi done yo rejoue pi vit, tankou pandan rekiperasyon dezas oswa rekiperasyon nan moman an. Si w itilize endèks sa yo nan aplikasyon w yo (pa egzanp, aplikasyon jeospasyo ki baze sou PostGIS yo sèvi ak endèks GiST la anpil), sa a se yon lòt karakteristik ki pral siyifikativman amelyore eksperyans lan san okenn efò nan men w.

Partitioning - pi gwo, pi bon, pi vit

PostgreSQL 10 prezante patisyon deklaratif. Nan PostgreSQL 11 li vin pi fasil pou itilize. Nan PostgreSQL 12 ou ka chanje echèl seksyon yo.

Nan PostgreSQL 12, pèfòmans sistèm patisyon an vin pi bon anpil, sitou si gen plizyè milye patisyon nan tablo a. Pou egzanp, si yon rechèch afekte sèlman kèk patisyon nan yon tab ak dè milye de yo, li pral egzekite anpil pi vit. Pèfòmans pa sèlman amelyore pou kalite demann sa yo. Ou pral remake tou ki jan pi vit operasyon INSERT yo sou tab ki gen plizyè patisyon.

Anrejistreman done lè l sèvi avèk KOPI - By wout la, sa a se yon bon fason telechaje done an gwo e isit la se yon egzanp k ap resevwa JSON — tab partisyone nan PostgreSQL 12 yo te vin pi efikas tou. Avèk COPY tout bagay te deja vit, men nan PostgreSQL 12 li absoliman vole.

Mèsi a avantaj sa yo, PostgreSQL pèmèt ou sere seri done menm pi gwo epi fè yo pi fasil pou rekipere. E pa gen efò sou pati ou. Si aplikasyon an gen anpil patisyon, tankou anrejistreman done seri tan, yon amelyorasyon senp pral siyifikativman amelyore pèfòmans li.

Pandan ke sa a se pa egzakteman yon "amelyorasyon epi jwi" amelyorasyon, PostgreSQL 12 pèmèt ou kreye kle etranje ki fè referans tab patisyon yo, fè patisyon an yon plezi pou travay avèk yo.

WITH queries jis te vin pi bon anpil

yo te aplike yon plak pou bati-an ekspresyon tab komen (aka CTE, aka WITH queries), mwen pa t 'kapab tann yo ekri yon atik sou ki jan devlopè aplikasyon yo kontan ak PostgreSQL yo te. Sa a se youn nan karakteristik sa yo ki pral akselere aplikasyon an. Sòf si, nan kou, ou itilize CTE.

Mwen souvan jwenn ke newbies nan SQL renmen sèvi ak CTEs; si ou ekri yo yon sèten fason, li reyèlman santi w tankou w ap ekri yon pwogram enperatif. Pèsonèlman, mwen te renmen reekri demann sa yo jwenn alantou san yo pa CTE ak ogmante pwodiktivite. Koulye a, tout bagay diferan.

PostgreSQL 12 pèmèt ou aliye yon kalite espesifik CTE san efè segondè (SELECT), ki itilize yon sèl fwa tou pre fen demann lan. Si mwen te swiv demann CTE mwen te reekri yo, pifò nan yo ta tonbe nan kategori sa a. Sa a ede devlopè yo ekri kòd klè ki kounye a tou kouri byen vit.

Anplis, PostgreSQL 12 optimize ekzekisyon SQL tèt li, san ou pa oblije fè anyen. Ak byenke mwen pwobableman pa pral bezwen optimize demann sa yo kounye a, li nan gwo ke PostgreSQL kontinye travay sou optimize demann.

Jis-in-Time (JIT) - kounye a default

Sou sistèm PostgreSQL 12 ak sipò LLVM Konpilasyon JIT aktive pa default. Premye a tout, ou jwenn sipò JIT pou kèk operasyon entèn, ak dezyèmman, demann ak ekspresyon (egzanp ki pi senp la se x + y) nan lis chwazi (ki ou genyen apre SELECT), total, ekspresyon ki gen paragraf WHERE ak lòt moun ka itilize JIT pou amelyore pèfòmans.

Depi JIT aktive pa default nan PostgreSQL 12, pèfòmans yo pral amelyore poukont li, men mwen rekòmande tès aplikasyon an nan PostgreSQL 11, ki te prezante JIT, pou mezire pèfòmans rechèch ak wè si ou bezwen melodi anyen.

E rès nouvo karakteristik yo nan PostgreSQL 12?

PostgreSQL 12 gen yon tòn nouvo karakteristik fre, ki soti nan kapasite pou egzamine done JSON lè l sèvi avèk ekspresyon wout estanda SQL/JSON rive nan otantifikasyon milti-faktè ak yon paramèt. clientcert=verify-full, kreye kolòn ak plis ankò. Ase pou yon pòs separe.

Menm jan ak PostgreSQL 10, PostgreSQL 12 pral amelyore pèfòmans jeneral imedyatman apre amelyorasyon an. Ou, nan kou, ka gen pwòp chemen ou - teste aplikasyon an nan kondisyon ki sanble sou sistèm pwodiksyon an anvan pèmèt amelyorasyon, menm jan mwen te fè ak PostgreSQL 10. Menm si PostgreSQL 12 deja pi estab pase mwen te espere, pa fè parese nan tès la. aplikasyon yo byen, anvan yo lage yo nan pwodiksyon an.

Sous: www.habr.com

Add nouvo kòmantè