Fanavaozana ho an'ny kamo: ny fomba hanatsarana ny fahombiazan'ny PostgreSQL 12

Fanavaozana ho an'ny kamo: ny fomba hanatsarana ny fahombiazan'ny PostgreSQL 12

PostgreSQL 12, ny dikan-teny farany amin'ny "angona momba ny fifandraisana loharano misokatra tsara indrindra eran-tany," dia hivoaka afaka herinandro vitsivitsy (raha mandeha araka ny drafitra). Izany dia manaraka ny fandaharam-potoana mahazatra amin'ny famoahana dikan-teny vaovao miaraka amin'ny endri-javatra vaovao marobe indray mandeha isan-taona, ary raha ny marina dia mahavariana izany. Izany no nahatonga ahy ho mpikambana mavitrika amin'ny vondrom-piarahamonina PostgreSQL.

Raha ny hevitro, tsy toy ny famoahana teo aloha, ny PostgreSQL 12 dia tsy misy endri-javatra revolisionera iray na roa (toy ny fisarahana na ny paralelisma manontany). Nivazivazy aho indray mandeha fa ny singa fototra amin'ny PostgreSQL 12 dia ny fahamarinan-toerana bebe kokoa. Tsy izany ve no ilainao rehefa mitantana ny angona manakiana ny orinasanao ianao?

Saingy tsy mijanona eo ny PostgreSQL 12: miaraka amin'ny endri-javatra vaovao sy fanatsarana, ny fampiharana dia hahomby kokoa, ary ny tokony hataonao dia ny fanavaozana!

(Eny, mety hanorina indray ny fanondroana, fa amin'ity famoahana ity dia tsy mampatahotra toy ny mahazatra antsika.)

Tena tsara ny manavao ny PostgreSQL ary mankafy fanatsarana lehibe avy hatrany tsy misy korontana tsy ilaina. Taona vitsy lasa izay, nandinika fanavaozana avy amin'ny PostgreSQL 9.4 mankany amin'ny PostgreSQL 10 aho ary nahita ny fomba nivezivezen'ny fampiharana noho ny fampifanarahana amin'ny fangatahana fanatsarana ao amin'ny PostgreSQL 10. Ary ny tena zava-dehibe dia saika tsy misy zavatra takiana amiko (mametraha mari-pamantarana fanamafisana fotsiny. max_parallel_workers).

Ekeo, mety raha miasa tsara kokoa ny fampiharana avy hatrany aorian'ny fanavaozana. Ary miezaka mafy izahay hampifaly ny mpampiasa, satria ny PostgreSQL dia manana bebe kokoa.

Ka ahoana no ahafahan'ny fanavaozana tsotra amin'ny PostgreSQL 12 hampifaly anao? Holazaiko aminao izao.

Fanatsarana fanondroana lehibe

Raha tsy misy indexing dia tsy ho lasa lavitra ny database. Ahoana koa no hahitanao vaovao haingana? Ny rafitra fanondroana fototra an'ny PostgreSQL dia antsoina B-hazo. Ity karazana fanondroana ity dia natao ho an'ny rafitra fitahirizana.

Mampiasa ny operator fotsiny izahay CREATE INDEX ON some_table (some_column), ary ny PostgreSQL dia manao asa be dia be mba hitazonana ny index hatramin'ny farany raha ampidirintsika, manavao ary mamafa ny soatoavina tsy tapaka. Ny zava-drehetra dia miasa ho azy, toy ny amin'ny majika.

Saingy manana olana iray ny index PostgreSQL - izy ireo dia inflated ary maka habaka kapila fanampiny ary mampihena ny fahombiazan'ny fakana sy fanavaozana ny angona. Ny hoe "bloat" dia midika hoe tsy mahomby ny fikojakojana ny rafitra index. Mety misy ifandraisany amin'ny tuple fako esoriny izany - na tsia vacuum (misaotra an'i Peter Gaghan tamin'ny fanazavana)Peter Geoghegan)). Ny fisondrotan'ny index dia hita indrindra amin'ny enta-mavesatry ny asa izay miova mavitrika ny index.

Ny PostgreSQL 12 dia manatsara ny fahombiazan'ny index-tree B, ary ny fanandramana miaraka amin'ny mari-pamantarana toa ny TPC-C dia naneho fa amin'ny antsalany dia 40% ny habaka ampiasaina ankehitriny. Amin'izao fotoana izao dia mandany fotoana kely kokoa isika tsy amin'ny fikojakojana ny mari-pamantarana B-tree (izany hoe amin'ny asa fanoratana), fa koa amin'ny famerenana ny angona, satria kely kokoa ny index.

Fampiharana mazoto manavao ny latabany - matetika ny fampiharana OLTP (fanodinana ny fifanakalozana ara-potoana) - hampiasa ny kapila sy ny fangatahana amin'ny fomba mahomby kokoa. Arakaraky ny haben'ny habaka kapila, ny habaka bebe kokoa tsy maintsy mitombo ny angon-drakitra tsy misy fanavaozana ny fotodrafitrasa.

Ny paikadin'ny fanavaozana sasany dia mitaky ny fananganana ny mari-pamantarana hazo B mba hanararaotra ireo tombontsoa ireo (oh. pg_upgrade tsy hanorina indexes ho azy). Ao amin'ny dikan-teny PostgreSQL teo aloha, ny fananganana indeksa lehibe eo amin'ny latabatra dia niteraka fiatoana lehibe satria tsy azo natao ny fanovana nandritra izany. Fa ny PostgreSQL 12 dia manana endri-javatra mahafinaritra hafa: afaka manangana indexes mifanaraka amin'ny baiko ianao izao. REINDEX CONCURRENTmba hialana tanteraka amin'ny fotoana fitsaharana.

Misy fanatsarana hafa amin'ny fotodrafitrasa fanondroana ao amin'ny PostgreSQL 12. Zavatra iray hafa izay nisy majika - soratana mialoha, antsoina hoe WAL (rakitra fanoratana mialoha). Ny diarin'ny fanoratana mialoha dia mirakitra ny fifampiraharahana rehetra ao amin'ny PostgreSQL raha misy tsy fahombiazana sy replication. Ny fampiharana dia mampiasa azy io ho an'ny archiving sy famerenana amin'ny laoniny. Mazava ho azy fa nosoratana amin'ny kapila ny diarin'ny fanoratana mialoha, izay mety hisy fiantraikany amin'ny fampisehoana.

Ny PostgreSQL 12 dia nampihena ny tampon'ny rakitra WAL izay noforonin'ny indeksan'ny GiST, GIN, ary SP-GIST nandritra ny fananganana tondro. Manome tombony azo tsapain-tanana maromaro izany: Kely kokoa ny habaka kapila ny rakitra WAL, ary averina averina haingana kokoa ny angon-drakitra, toy ny mandritra ny fanarenana ny loza na ny fanarenana amin'ny fotoana fohy. Raha mampiasa fanondroana toy izany amin'ny rindranasao ianao (ohatra, ny fampiharana geospatial mifototra amin'ny PostGIS dia mampiasa ny mari-pamantarana GiST), dia endri-javatra hafa hanatsara ny traikefa tsy misy ezaka avy aminao izany.

Fizarana - lehibe kokoa, tsara kokoa, haingana kokoa

PostgreSQL 10 nampidirina fisarahana fanambarana. Ao amin'ny PostgreSQL 11 dia lasa mora kokoa ny fampiasana azy. Ao amin'ny PostgreSQL 12 dia azonao atao ny manova ny haben'ny fizarana.

Ao amin'ny PostgreSQL 12, ny fahombiazan'ny rafitra fisarahana dia nanjary tsara kokoa, indrindra raha misy fizarazarana an'arivony ao amin'ny latabatra. Ohatra, raha misy fizarazarana vitsivitsy monja amin'ny tabilao misy an'arivony amin'izy ireo ny fangatahana dia ho vita haingana kokoa izany. Tsy hatsaraina fotsiny ny fampisehoana ho an'ireo karazana fanontaniana ireo. Ho hitanao koa ny hafainganam-pandehan'ny INSERT eo amin'ny latabatra misy fizarazarana maro.

Fandraketana angona mampiasa Copy - Raha ny marina, ity dia fomba tsara fampidinana angona betsaka ary ity misy ohatra mandray JSON - ny latabatra fisarahana ao amin'ny PostgreSQL 12 dia lasa mahomby kokoa. Miaraka amin'ny COPY dia efa haingana ny zava-drehetra, fa ao amin'ny PostgreSQL 12 dia manidina tanteraka.

Noho ireo tombony ireo, ny PostgreSQL dia ahafahanao mitahiry angon-drakitra lehibe kokoa ary manamora ny fakana azy ireo. Ary tsy misy ezaka avy aminao. Raha manana fizarazarana maro ny fampiharana, toy ny fandraketana angon-drakitra andiam-potoana, ny fanavaozana tsotra dia hanatsara ny fahombiazany.

Na dia tsy fanatsarana "fanavaozana sy hankafizana" aza izany, ny PostgreSQL 12 dia mamela anao hamorona fanalahidy vahiny izay manondro latabatra fisarahana, ka mahatonga ny fisarahana ho mahafinaritra ny miasa.

WITH fanontaniana dia lasa tsara kokoa

rehefa nasiana patch ho an'ny fitenenana an-databatra iombonana (aka CTE, antsoina hoe MISY fanontaniana), tsy andriko ny hanoratra lahatsoratra momba izany Tena faly ireo mpamorona fampiharana miaraka amin'ny PostgreSQL. Io no iray amin'ireo endri-javatra izay hanafaingana ny fampiharana. Raha tsy hoe, mazava ho azy, mampiasa CTE ianao.

Matetika aho no mahita fa tia mampiasa CTE ny vaovao amin'ny SQL; raha manoratra azy ireo amin'ny fomba iray ianao, dia toa manoratra programa tsy maintsy atao ianao. Izaho manokana dia tiako ny mamerina manoratra ireo fanontaniana ireo mba hivezivezena tsy misy CTE ary hampitombo ny vokatra. Ankehitriny dia hafa ny zava-drehetra.

Ny PostgreSQL 12 dia ahafahanao mampiditra karazana CTE manokana tsy misy fiantraikany (SELECT), izay ampiasaina indray mandeha eo akaikin'ny faran'ny fangatahana. Raha nanara-maso ireo fanontaniana CTE nosoratako indray aho dia ho tafiditra ao anatin'ity sokajy ity ny ankamaroan'izy ireo. Izany dia manampy ny mpamorona hanoratra kaody mazava izay mandeha haingana koa ankehitriny.

Ankoatr'izay, ny PostgreSQL 12 dia manatsara ny famonoana SQL ny tenany, tsy mila manao na inona na inona ianao. Ary na dia mety tsy mila manatsara ny fangatahana toy izany aza aho izao, dia mahafinaritra ny PostgreSQL manohy miasa amin'ny fanatsarana ny fangatahana.

Just-in-Time (JIT) - default izao

Amin'ny rafitra PostgreSQL 12 misy fanohanana LLVM Ny fanangonana JIT dia alefa amin'ny alΓ lan'ny default. Voalohany indrindra, mahazo fanohanana ianao hira ho an'ny hetsika anatiny sasany, ary faharoa, fanontaniana misy fitenenana (ny ohatra tsotra indrindra dia x + y) amin'ny lisitra voafantina (izay anananao aorian'ny SELECT), aggregates, fanehoana miaraka amin'ny clause WHERE ary ny hafa dia afaka mampiasa JIT hanatsarana ny fampisehoana.

Satria ny JIT dia alefa amin'ny alΓ lan'ny PostgreSQL 12, dia hihatsara ho azy ny fampisehoana, fa manoro hevitra aho hanandrana ny fampiharana ao amin'ny PostgreSQL 11, izay nampiditra JIT, mba handrefesana ny fahombiazan'ny fangatahana ary hijerena raha mila manitsy na inona na inona ianao.

Ahoana ny amin'ny sisa amin'ireo endri-javatra vaovao ao amin'ny PostgreSQL 12?

PostgreSQL 12 dia manana endri-javatra vaovao mahafinaritra, avy amin'ny fahafahana mijery ny angon-drakitra JSON amin'ny fampiasana fomba fiteny SQL/JSON mahazatra mankany amin'ny fanamarinana marobe miaraka amin'ny paramètre. clientcert=verify-full, tsanganana noforonina sy ny maro hafa. Ampy ho lahatsoratra mitokana.

Tahaka ny PostgreSQL 10, PostgreSQL 12 dia hanatsara ny fampisehoana ankapobeny avy hatrany aorian'ny fanavaozana. Mazava ho azy fa afaka manana ny lalanao manokana ianao - andramo ny fampiharana amin'ny fepetra mitovy amin'ny rafitra famokarana alohan'ny ahafahana manatsara, toy ny nataoko tamin'ny PostgreSQL 10. Na dia efa miorina kokoa noho ny nantenaiko aza ny PostgreSQL 12, aza kamo amin'ny fitsapana. fampiharana tsara, alohan'ny hamoahana azy ireo amin'ny famokarana.

Source: www.habr.com

Add a comment