Навсозӣ барои танбал: чӣ гуна PostgreSQL 12 иҷроишро беҳтар мекунад

Навсозӣ барои танбал: чӣ гуна PostgreSQL 12 иҷроишро беҳтар мекунад

PostgreSQL 12, версияи охирини "беҳтарин махзани реляционии кушодаасос дар ҷаҳон" пас аз чанд ҳафта мебарояд (агар ҳама мувофиқи нақша бошад). Ин ҷадвали муқаррарии нашри версияи нав бо як тонна хусусиятҳои навро дар як сол як маротиба пайравӣ мекунад ва ошкоро, ин таъсирбахш аст. Барои ҳамин ман узви фаъоли ҷомеаи PostgreSQL шудам.

Ба андешаи ман, бар хилофи версияҳои қаблӣ, PostgreSQL 12 як ё ду хусусияти инқилобиро дар бар намегирад (ба монанди тақсимкунӣ ё параллелизми дархост). Боре ман шӯхӣ кардам, ки хусусияти асосии PostgreSQL 12 устувории бештар аст. Вақте ки шумо маълумоти муҳими тиҷорати худро идора мекунед, ин ба шумо лозим нест?

Аммо PostgreSQL 12 бо ин қатъ намешавад: бо хусусиятҳо ва такмилдиҳии нав, барномаҳо беҳтар кор хоҳанд кард, ва танҳо ба шумо лозим аст, ки навсозӣ кунед!

(Хуб, шояд шохисҳоро аз нав созед, аммо дар ин нашр он он қадар даҳшатнок нест, ки мо одат кардаем.)

Навсозии PostgreSQL хеле хуб хоҳад буд ва фавран аз беҳбудиҳои назаррас бидуни сару садоҳои нолозим лаззат баред. Чанд сол пеш ман навсозӣ аз PostgreSQL 9.4 ба PostgreSQL 10-ро дида баромадам ва дидам, ки чӣ тавр барнома ба шарофати параллелизми такмилёфтаи дархост дар PostgreSQL 10 суръат мебахшад. Ва муҳимтар аз ҳама, аз ман қариб ҳеҷ чиз талаб карда намешавад (танҳо як параметри конфигуратсияро таъин кунед. max_parallel_workers).

розӣ шавед, вақте ки барномаҳо фавран пас аз навсозӣ беҳтар кор мекунанд, қулай аст. Ва мо кӯшиш мекунем, ки ба корбарон писанд ояд, зеро PostgreSQL шумораи онҳо торафт бештар дорад.

Пас, чӣ гуна як навсозии оддӣ ба PostgreSQL 12 метавонад шуморо хушбахт кунад? Ман ҳоло ба шумо мегӯям.

Такмилҳои асосии индексатсия

Бе индексатсия, пойгоҳи додаҳо дур намеравад. Боз чӣ гуна шумо метавонед маълумотро зуд пайдо кунед? Системаи асосии индексатсияи PostgreSQL номида мешавад Б-дарахт. Ин навъи индекс барои системаҳои нигоҳдорӣ оптимизатсия карда шудааст.

Мо танҳо операторро истифода мебарем CREATE INDEX ON some_table (some_column), ва PostgreSQL барои навсозӣ кардани индекс корҳои зиёдеро анҷом медиҳад, дар ҳоле ки мо пайваста арзишҳоро ворид, навсозӣ ва нест мекунем. Ҳама чиз худ аз худ кор мекунад, гӯё бо ҷодугарӣ.

Аммо индексҳои PostgreSQL як мушкилот доранд - онҳо пур карда мешаванд ва фазои иловагии дискро ишғол кунед ва иҷрои ҷустуҷӯ ва навсозии маълумотро кам кунед. Бо "блоат" ман бесамар нигоҳ доштани сохтори индексро дар назар дорам. Ин метавонад - ё не - ба лӯлаҳои партовҳое, ки он хориҷ мекунад, алоқаманд бошад VACUUM (ташаккур ба Питер Гаган барои маълумот)Питер Геогеган)). Боварии индекс махсусан дар сарбории корӣ, ки индекс фаъолона тағир меёбад, намоён аст.

PostgreSQL 12 иҷрои индексҳои дарахти B-ро хеле беҳтар мекунад ва таҷрибаҳо бо нишондодҳо ба монанди TPC-C нишон доданд, ки ҳоло ба ҳисоби миёна 40% фазои камтар истифода мешавад. Ҳоло мо на танҳо барои нигоҳ доштани индексҳои дарахти B (яъне барои амалиёти навиштан), балки барои дарёфти маълумот низ вақти камтар сарф мекунем, зеро индексҳо хеле хурдтаранд.

Барномаҳое, ки ҷадвалҳои худро фаъолона навсозӣ мекунанд - маъмулан барномаҳои OLTP (коркарди транзаксия дар вақти воқеӣ) - дискро истифода мебарад ва дархостҳоро хеле самараноктар коркард мекунад. Чӣ қадаре ки фазои диск зиёд бошад, ҳамон қадар фазои махзани маълумот бояд бе навсозии инфрасохтор афзоиш ёбад.

Баъзе стратегияҳои навсозӣ аз нав сохтани шохисҳои дарахти B-ро талаб мекунанд, то аз ин бартариятҳо истифода баранд (масалан. pg_upgrade индексҳоро ба таври худкор аз нав барқарор намекунад). Дар версияҳои қаблии PostgreSQL, барқарорсозии индексҳои калон дар ҷадвалҳо боиси бекористии назаррас гардид, зеро дар айни замон тағирот ворид карда намешавад. Аммо PostgreSQL 12 боз як хусусияти ҷолиб дорад: акнун шумо метавонед индексҳоро дар баробари фармон аз нав барқарор кунед Ҳамзамон REINDEXки ба бекористии пурра рох надиханд.

Дар инфрасохтори индексатсия дар PostgreSQL 12 беҳбудиҳои дигар мавҷуданд. Чизи дигаре, ки ҷодуе буд - сабти пешакӣ навиштан, aka WAL (рӯзи пешнависӣ). Сабти пешакии навиштан ҳар як транзаксияро дар PostgreSQL дар ҳолати нокомӣ ва такрорӣ сабт мекунад. Барномаҳо онро барои бойгонӣ истифода мебаранд ва барқароркунии саривақтӣ. Албатта, сабти пеш аз навиштан ба диск навишта мешавад, ки метавонад ба иҷроиш таъсир расонад.

PostgreSQL 12 хароҷоти сабтҳои WAL-ро, ки аз ҷониби индексҳои GiST, GIN ва SP-GiST ҳангоми сохтани индекс сохта мешаванд, кам кард. Ин як қатор бартариҳои назаррас медиҳад: сабтҳои WAL фазои камтари дискро ишғол мекунанд ва маълумот тезтар такрор мешавад, масалан ҳангоми барқарорсозии офатҳои табиӣ ё барқароркунии вақт. Агар шумо чунин индексҳоро дар замимаҳои худ истифода баред (масалан, замимаҳои геофазоӣ дар асоси PostGIS индекси GiST-ро зиёд истифода мебаранд), ин хусусияти дигарест, ки бе ягон кӯшиши шумо таҷрибаро ба таври назаррас беҳтар мекунад.

Тақсимкунӣ - калонтар, беҳтар, тезтар

PostgreSQL 10 ҷорӣ карда шуд тақсимоти декларативӣ. Дар PostgreSQL 11 истифодаи он хеле осонтар шудааст. Дар PostgreSQL 12 шумо метавонед миқёси бахшҳоро тағир диҳед.

Дар PostgreSQL 12, иҷрои системаи тақсимкунӣ ба таври назаррас беҳтар шуд, хусусан агар дар ҷадвал ҳазорҳо қисмҳо мавҷуд бошанд. Масалан, агар дархост танҳо ба чанд қисмҳои ҷадвал бо ҳазорон қисмҳои онҳо таъсир расонад, он хеле тезтар иҷро мешавад. Фаъолият на танҳо барои ин намуди дархостҳо беҳтар карда мешавад. Шумо инчунин хоҳед дид, ки амалиёти INSERT дар ҷадвалҳои дорои қисмҳои сершумор то чӣ андоза тезтар иҷро мешаванд.

Бо истифода аз сабти маълумот НУСХА — Зимнан, ин роҳи олӣ аст зеркашии маълумоти оммавӣ ва инак як мисол гирифтани JSON — ҷадвалҳои тақсимшуда дар PostgreSQL 12 низ самараноктар шуданд. Бо COPY ҳама чиз аллакай зуд буд, аммо дар PostgreSQL 12 он комилан парвоз мекунад.

Ба шарофати ин бартариҳо, PostgreSQL ба шумо имкон медиҳад, ки маҷмӯаҳои маълумоти боз ҳам калонтарро нигоҳ доред ва гирифтани онҳоро осонтар кунед. Ва ҳеҷ кӯшише аз ҷониби шумо. Агар барнома қисмҳои зиёд дошта бошад, ба монанди сабти маълумоти силсилаи вақт, навсозии оддӣ кори онро ба таври назаррас беҳтар мекунад.

Гарчанде ки ин маҳз як такмили "навсозӣ ва лаззат бурдан" нест, PostgreSQL 12 ба шумо имкон медиҳад, ки калидҳои хориҷиро эҷод кунед, ки ба ҷадвалҳои тақсимшуда истинод мекунанд ва тақсимкуниро барои кор кардан лаззат мебахшанд.

БО дархостҳо танҳо хеле беҳтар шуданд

Ҳангоми ямоқи барои ифодаҳои дарунсохташудаи ҷадвали умумӣ татбиқ карда шуд (aka CTE, aka WITH пурсишҳо), ман интизор шуда наметавонистам, ки дар бораи мақола нависед таҳиягарони барнома бо PostgreSQL чӣ қадар хушбахт буданд. Ин яке аз он хусусиятҳоест, ки суръати барномаро суръат мебахшад. Агар, албатта, шумо CTE-ро истифода набаред.

Ман аксар вақт мефаҳмам, ки навгониҳои SQL истифодаи CTE-ро дӯст медоранд; агар шумо онҳоро бо роҳи муайян нависед, дар ҳақиқат чунин ҳис мекунад, ки шумо як барномаи ҳатмӣ менависед. Шахсан ба ман маъқул буд, ки ин пурсишҳоро дубора нависам, то дар гирду атроф пайдо кунам бе он CTE ва баланд бардоштани ҳосилнокӣ. Акнун ҳама чиз дигар аст.

PostgreSQL 12 ба шумо имкон медиҳад, ки як намуди мушаххаси CTE-ро бидуни таъсири тараф ворид кунед (SELECT), ки танҳо як маротиба дар охири дархост истифода мешавад. Агар ман дархостҳои CTE-ро, ки аз нав навиштаам, пайгирӣ мекардам, аксарияти онҳо ба ин категория дохил мешаванд. Ин ба таҳиягарон кӯмак мекунад, ки рамзи равшан нависанд, ки ҳоло низ зуд кор мекунад.

Гузашта аз ин, PostgreSQL 12 худи иҷрои SQL-ро оптимизатсия мекунад, бидуни он ки шумо коре кунед. Ва гарчанде ки ҳоло ба ман лозим нест, ки ин гуна дархостҳоро оптимизатсия кунам, хуб аст, ки PostgreSQL корашро дар оптимизатсияи дархостҳо идома медиҳад.

Танҳо дар вақташ (JIT) - ҳоло пешфарз

Дар системаҳои PostgreSQL 12 бо дастгирӣ LLVM Тартиби JIT бо нобаёнӣ фаъол аст. Пеш аз ҳама, шумо дастгирӣ мегиред JIT барои баъзе амалиётҳои дохилӣ ва дуюм, дархостҳо бо ифодаҳо (мисоли соддатарин x + y) дар рӯйхатҳои интихобшуда (ки шумо пас аз SELECT доред), агрегатҳо, ифодаҳо бо бандҳои WHERE ва дигарон метавонанд JIT-ро барои беҳтар кардани кор истифода баранд.

Азбаски JIT дар PostgreSQL 12 ба таври нобаёнӣ фаъол аст, иҷроиш худ аз худ беҳтар мешавад, аммо ман тавсия медиҳам, ки барномаро дар PostgreSQL 11, ки JIT-ро ҷорӣ кардааст, санҷед, то иҷрои дархостҳоро чен кунед ва бубинед, ки оё шумо ягон чизро танзим кардан лозим аст.

Дар бораи боқимондаи хусусиятҳои нав дар PostgreSQL 12 чӣ гуфтан мумкин аст?

PostgreSQL 12 дорои як тонна хусусиятҳои нави ҷолиб аст, аз қобилияти тафтиш кардани маълумоти JSON бо истифода аз ифодаҳои масири стандартии SQL/JSON то аутентификатсияи бисёрфакторӣ бо параметр clientcert=verify-full, сутунхои сохташуда ва гайра. Барои як мақолаи алоҳида кофӣ аст.

Мисли PostgreSQL 10, PostgreSQL 12 дарҳол пас аз навсозӣ кори умумиро беҳтар мекунад. Шумо, албатта, метавонед роҳи шахсии худро дошта бошед - пеш аз он ки ман бо PostgreSQL 10 кардаам, барномаро дар шароити шабеҳ дар системаи истеҳсолӣ санҷед. Ҳатто агар PostgreSQL 12 аллакай назар ба интизории ман устувортар бошад ҳам, дар озмоиш танбал нашавед. пеш аз дар истехсо-лот баровардани онхо бодиккат.

Манбаъ: will.com

Илова Эзоҳ