Hloov kho rau cov tub nkeeg: yuav ua li cas PostgreSQL 12 txhim kho kev ua tau zoo

Hloov kho rau cov tub nkeeg: yuav ua li cas PostgreSQL 12 txhim kho kev ua tau zoo

PostgreSQL 12, qhov tseeb version ntawm "lub ntiaj teb zoo tshaj plaws qhib qhov chaw sib raug zoo database," tab tom tawm hauv ob peb lub lis piam (yog tias txhua yam mus raws li kev npaj). Qhov no ua raws li lub sijhawm ib txwm tso tawm cov ntawv tshiab nrog ib tuj ntawm cov yam ntxwv tshiab ib xyoos ib zaug, thiab hais ncaj ncees, qhov zoo siab. Tias yog vim li cas kuv tau dhau los ua tus tswv cuab ntawm PostgreSQL zej zog.

Hauv kuv lub tswv yim, tsis zoo li kev tshaj tawm yav dhau los, PostgreSQL 12 tsis muaj ib lossis ob qhov kev hloov pauv (xws li kev faib lossis cov lus nug sib luag). Kuv ib zaug tso dag tias qhov tseem ceeb ntawm PostgreSQL 12 yog qhov ruaj khov dua. Tsis yog qhov koj xav tau thaum koj tswj koj lub lag luam cov ntaub ntawv tseem ceeb?

Tab sis PostgreSQL 12 tsis nres qhov ntawd: nrog cov yam ntxwv tshiab thiab kev txhim kho, cov ntawv thov yuav ua tau zoo dua, thiab txhua yam koj yuav tau ua yog upgrade!

(Zoo, tej zaum rov tsim kho qhov ntsuas, tab sis hauv qhov kev tso tawm no tsis txaus ntshai li peb tau siv los.)

Nws yuav ua tau zoo los txhim kho PostgreSQL thiab tam sim ntawd txaus siab rau kev txhim kho tseem ceeb yam tsis muaj kev cuam tshuam tsis tsim nyog. Ob peb xyoos dhau los, kuv tau tshuaj xyuas qhov kev hloov kho tshiab los ntawm PostgreSQL 9.4 rau PostgreSQL 10 thiab pom tias daim ntawv thov nce siab li cas ua tsaug rau cov lus nug zoo dua qub hauv PostgreSQL 10. Thiab, qhov tseem ceeb tshaj, yuav luag tsis muaj dab tsi los ntawm kuv (tsuas yog teeb tsa kev teeb tsa. max_parallel_workers).

Pom zoo, nws yooj yim thaum cov ntawv thov ua haujlwm zoo dua tam sim tom qab hloov kho dua tshiab. Thiab peb sim ua kom txaus siab rau cov neeg siv, vim PostgreSQL muaj ntau thiab ntau ntawm lawv.

Yog li yuav ua li cas hloov kho yooj yim rau PostgreSQL 12 ua rau koj zoo siab? Kuv mam qhia koj tam sim no.

Kev txhim kho indexing loj

Yog tsis muaj indexing, database yuav tsis mus deb. Yuav ua li cas lwm tus koj tuaj yeem nrhiav tau cov ntaub ntawv sai? PostgreSQL's fundamental indexing system hu ua B- tsob ntoo. Hom kev ntsuas no yog optimized rau cov tshuab cia.

Peb tsuas yog siv tus neeg teb xov tooj xwb CREATE INDEX ON some_table (some_column), thiab PostgreSQL ua haujlwm ntau los ua kom qhov ntsuas tau mus txog thaum peb niaj hnub ntxig, hloov kho, thiab tshem tawm qhov tseem ceeb. Txhua yam ua haujlwm ntawm nws tus kheej, zoo li yog los ntawm khawv koob.

Tab sis PostgreSQL indexes muaj ib qho teeb meem - lawv yog inflated thiab siv qhov chaw disk ntxiv thiab txo qhov kev ua tau zoo ntawm cov ntaub ntawv rov qab thiab hloov kho dua tshiab. Los ntawm "bloat" Kuv txhais tau tias tsis muaj txiaj ntsig tswj cov qauv ntsuas. Qhov no yuav - lossis tsis yog - cuam tshuam nrog cov khib nyiab tuples uas nws tshem tawm NQUS PLUA PLAV (ua tsaug rau Peter Gaghan rau cov ntaub ntawv)Peter Geoghegan)). Index bloat yog tshwj xeeb tshaj yog pom nyob rau hauv workloads qhov twg qhov Performance index yog nquag hloov.

PostgreSQL 12 txhim kho kev ua tau zoo ntawm B-ntoo indexes, thiab kev sim nrog cov qauv zoo li TPC-C tau pom tias qhov nruab nrab 40% tsawg dua qhov chaw tam sim no siv. Tam sim no peb siv sijhawm tsawg dua tsis yog rau kev tswj hwm B-ntoo indexes (uas yog, ntawm kev sau ntawv), tab sis kuj tseem khaws cov ntaub ntawv, vim tias cov indexes tsawg dua.

Cov ntawv thov uas nquag hloov kho lawv cov ntxhuav - feem ntau OLTP daim ntawv thov (real-time kev ua lag luam) - yuav siv disk thiab txheej txheem thov ntau npaum li cas. Qhov chaw disk ntau dua, qhov chaw ntau qhov chaw khaws ntaub ntawv yuav tsum loj hlob yam tsis muaj kev txhim kho cov txheej txheem.

Qee cov tswv yim txhim kho yuav tsum tau rov tsim kho B-ntoo indexes kom tau txais txiaj ntsig ntawm cov txiaj ntsig no (xws li. pg_upgrade yuav tsis rov tsim cov indexes tau). Nyob rau hauv yav dhau los versions ntawm PostgreSQL, rebuilding loj indexes ntawm cov ntxhuav ua rau lub downtime tseem ceeb vim hais tias kev hloov pauv tsis tuaj yeem ua rau lub sijhawm no. Tab sis PostgreSQL 12 muaj lwm qhov tshwj xeeb txias: tam sim no koj tuaj yeem rov tsim cov indexes sib npaug nrog cov lus txib REINDEX CONCURRENTLYkom tsis txhob downtime kiag li.

Muaj lwm yam kev txhim kho rau qhov indexing infrastructure hauv PostgreSQL 12. Lwm qhov uas muaj qee qhov khawv koob - sau-ua ntej log, aka WAL (sau-ua ntej log). Daim ntawv sau ua ntej sau txhua qhov kev sib pauv hauv PostgreSQL thaum tsis ua haujlwm thiab rov ua dua. Daim ntawv thov siv nws rau archiving thiab point-in-time rov qab. Tau kawg, cov ntawv sau ua ntej sau rau disk, uas tuaj yeem cuam tshuam kev ua haujlwm.

PostgreSQL 12 tau txo cov nyiaj siv ua haujlwm ntawm WAL cov ntaub ntawv uas tau tsim los ntawm GiST, GIN, thiab SP-GiST indexes thaum lub sij hawm tsim kho. Qhov no muab ntau yam txiaj ntsig zoo: WAL cov ntaub ntawv siv qhov chaw disk tsawg dua, thiab cov ntaub ntawv rov ua dua sai dua, xws li thaum muaj kev puas tsuaj rov qab los yog rov qab los ntawm lub sijhawm. Yog tias koj siv cov kev ntsuas zoo li no hauv koj daim ntawv thov (piv txwv li PostGIS-based geospatial applications siv GiST Performance index ntau), qhov no yog lwm qhov tshwj xeeb uas yuav txhim kho cov kev paub dhau los yam tsis muaj kev siv zog ntawm koj li.

Kev faib tawm - loj dua, zoo dua, nrawm dua

PostgreSQL 10 qhia tshaj tawm partitioning. Hauv PostgreSQL 11 nws tau dhau los ua kev siv yooj yim dua. Hauv PostgreSQL 12 koj tuaj yeem hloov cov nplai ntawm ntu.

Hauv PostgreSQL 12, qhov kev ua tau zoo ntawm qhov kev faib tawm tau ua tau zoo dua, tshwj xeeb tshaj yog tias muaj ntau txhiab qhov kev faib tawm hauv lub rooj. Piv txwv li, yog tias cov lus nug cuam tshuam tsuas yog ob peb qhov kev faib hauv ib lub rooj nrog ntau txhiab tus ntawm lawv, nws yuav ua tiav sai dua. Kev ua tau zoo tsis yog txhim kho rau cov lus nug no xwb. Koj tseem yuav pom tias kev ua haujlwm INSERT sai npaum li cas ntawm cov rooj nrog ntau qhov kev faib tawm.

Sau cov ntaub ntawv siv COPY - Los ntawm txoj kev, qhov no yog ib txoj kev zoo bulk data download tau thiab ntawm no yog ib qho piv txwv txais JSON - Cov rooj sib faib hauv PostgreSQL 12 kuj tau ua haujlwm zoo dua. Nrog COPY txhua yam twb tau nrawm, tab sis hauv PostgreSQL 12 nws yoov kiag li.

Ua tsaug rau cov txiaj ntsig zoo no, PostgreSQL tso cai rau koj khaws cov ntaub ntawv loj dua thiab ua rau lawv yooj yim dua los khaws. Thiab tsis muaj kev rau siab rau koj feem. Yog tias daim ntawv thov muaj ntau qhov sib faib, xws li cov ntaub ntawv teev cov sijhawm teev tseg, kev hloov kho yooj yim yuav ua kom nws qhov kev ua tau zoo.

Thaum qhov no tsis yog qhov "kho kom zoo dua thiab txaus siab" kev txhim kho, PostgreSQL 12 tso cai rau koj los tsim cov yuam sij txawv teb chaws uas siv cov lus sib faib, ua kom muaj kev txaus siab ua haujlwm nrog.

Nrog cov lus nug tsuas yog tau txais txiaj ntsig zoo dua

Thaum ib thaj yog siv rau cov kab lus sib xyaw ua ke (aka CTE, aka Nrog cov lus nug), Kuv tos tsis tau sau ib tsab xov xwm txog zoo siab npaum li cas cov neeg tsim daim ntawv thov nrog PostgreSQL tau. Qhov no yog ib qho ntawm cov yam ntxwv uas yuav ua kom cov ntawv thov sai. Tshwj tsis yog, tau kawg, koj siv CTE.

Kuv feem ntau pom tias cov neeg tshiab rau SQL nyiam siv CTEs; yog tias koj sau lawv ib txoj hauv kev, nws zoo li koj tab tom sau qhov tseem ceeb. Tus kheej, Kuv nyiam sau cov lus nug no kom tau txais ib puag ncig tsis muaj CTE thiab nce productivity. Tam sim no txhua yam txawv.

PostgreSQL 12 tso cai rau koj los sau ib hom CTE yam tsis muaj kev phiv (SELECT), uas tsuas yog siv ib zaug nyob ze qhov kawg ntawm qhov kev thov. Yog tias kuv khaws cia cov lus nug CTE kuv rov sau dua, feem ntau ntawm lawv yuav poob rau hauv pawg no. Qhov no pab cov neeg tsim khoom sau cov lej meej uas tam sim no tseem ua haujlwm sai.

Ntxiv mus, PostgreSQL 12 optimizes SQL ua nws tus kheej, tsis tas koj yuav tsum ua dab tsi. Thiab txawm hais tias kuv tej zaum yuav tsis tas yuav ua kom zoo dua cov lus nug tam sim no, nws zoo heev uas PostgreSQL tseem ua hauj lwm rau cov lus nug optimization.

Just-in-Time (JIT) - tam sim no default

Ntawm PostgreSQL 12 tshuab nrog kev txhawb nqa LLVM JIT compilation yog enabled los ntawm lub neej ntawd. Ua ntej tshaj plaws, koj tau txais kev txhawb nqa JIT rau qee qhov kev ua haujlwm sab hauv, thiab qhov thib ob, cov lus nug nrog cov lus qhia (qhov piv txwv yooj yim tshaj plaws yog x + y) hauv cov npe xaiv (uas koj muaj tom qab SELECT), sib sau ua ke, cov lus hais nrog WHERE clauses thiab lwm tus tuaj yeem siv JIT los txhim kho kev ua haujlwm.

Txij li thaum JIT tau qhib los ntawm lub neej ntawd hauv PostgreSQL 12, kev ua tau zoo yuav txhim kho ntawm nws tus kheej, tab sis kuv pom zoo kom sim cov ntawv thov hauv PostgreSQL 11, uas tau qhia txog JIT, los ntsuas cov lus nug kev ua tau zoo thiab saib seb koj xav tau dab tsi.

Yuav ua li cas txog qhov seem ntawm cov yam ntxwv tshiab hauv PostgreSQL 12?

PostgreSQL 12 muaj ib tuj ntawm cov yam ntxwv tshiab, los ntawm lub peev xwm los tshuaj xyuas JSON cov ntaub ntawv siv tus qauv SQL / JSON txoj kev qhia mus rau ntau qhov kev lees paub nrog qhov tsis muaj clientcert=verify-full, tsim kab thiab ntau ntxiv. Txaus rau tus ncej cais.

Zoo li PostgreSQL 10, PostgreSQL 12 yuav txhim kho kev ua tau zoo tag nrho tam sim ntawd tom qab hloov kho. Koj, tau kawg, tuaj yeem muaj koj tus kheej txoj hauv kev - sim daim ntawv thov nyob rau hauv cov xwm txheej zoo sib xws ntawm cov txheej txheem tsim khoom ua ntej ua kom muaj kev txhim kho, zoo li kuv tau ua nrog PostgreSQL 10. Txawm tias PostgreSQL 12 twb ruaj khov dua li kuv xav, tsis txhob tub nkeeg hauv kev sim. daim ntawv thov kom huv si, ua ntej tso lawv mus rau hauv ntau lawm.

Tau qhov twg los: www.hab.com

Ntxiv ib saib