Надоградња за лење: како ПостгреСКЛ 12 побољшава перформансе

Надоградња за лење: како ПостгреСКЛ 12 побољшава перформансе

ПостгреСКЛ 12, најновија верзија „најбоље светске релационе базе података отвореног кода“, излази за неколико недеља (ако све буде по плану). Ово прати уобичајени распоред издавања нове верзије са гомилом нових функција једном годишње, и искрено, то је импресивно. Због тога сам постао активан члан ПостгреСКЛ заједнице.

По мом мишљењу, за разлику од претходних издања, ПостгреСКЛ 12 не садржи једну или две револуционарне карактеристике (као што је партиционисање или паралелизам упита). Једном сам се нашалио да је главна карактеристика ПостгреСКЛ 12 већа стабилност. Није ли то оно што вам треба када управљате критичним подацима вашег пословања?

Али ПостгреСКЛ 12 се ту не зауставља: ​​са новим функцијама и побољшањима, апликације ће радити боље, и све што треба да урадите је да надоградите!

(Па, можда поново изградити индексе, али у овом издању то није тако страшно као што смо навикли.)

Биће сјајно надоградити ПостгреСКЛ и одмах уживати у значајним побољшањима без непотребне гужве. Пре неколико година, прегледао сам надоградњу са ПостгреСКЛ 9.4 на ПостгреСКЛ 10 и видео како се апликација убрзала захваљујући побољшаном паралелизму упита у ПостгреСКЛ 10. И, што је најважније, од мене се скоро ништа није захтевало (само подесите конфигурациони параметар max_parallel_workers).

Слажем се, згодно је када апликације боље раде одмах након надоградње. И веома се трудимо да задовољимо кориснике, јер их ПостгреСКЛ има све више.

Па како вас једноставна надоградња на ПостгреСКЛ 12 може учинити срећним? сад ћу ти рећи.

Велика побољшања индексирања

Без индексирања, база података неће ићи далеко. Како другачије можете брзо пронаћи информације? ПостгреСКЛ-ов основни систем индексирања се зове Б-стабло. Овај тип индекса је оптимизован за системе складиштења.

Једноставно користимо оператор CREATE INDEX ON some_table (some_column), а ПостгреСКЛ много ради на одржавању индекса ажурним док ми константно убацујемо, ажурирамо и бришемо вредности. Све функционише само од себе, као магијом.

Али ПостгреСКЛ индекси имају један проблем - они су надувани и заузимају додатни простор на диску и смањују перформансе преузимања и ажурирања података. Под "надувавањем" мислим на неефикасно одржавање структуре индекса. Ово може – или не мора – бити повезано са смећем које уклања ВАЦУУМ (хвала Петеру Гагхан-у на информацијама)Петер Геогхеган)). Надувавање индекса је посебно приметно у радним оптерећењима где се индекс активно мења.

ПостгреСКЛ 12 у великој мери побољшава перформансе индекса Б-стабла, а експерименти са мерилима као што је ТПЦ-Ц показали су да се сада користи у просеку 40% мање простора. Сада трошимо мање времена не само на одржавање индекса Б-стабла (тј. на операције писања), већ и на преузимање података, јер су индекси много мањи.

Апликације које активно ажурирају своје табеле - обично ОЛТП апликације (обрада трансакција у реалном времену) - много ефикасније ће користити диск и обрађивати захтеве. Што је више простора на диску, то ће база података морати да расте без надоградње инфраструктуре.

Неке стратегије надоградње захтевају поновну изградњу индекса Б-стабла да би се искористиле ове предности (нпр. пг_упграде неће аутоматски поново изградити индексе). У претходним верзијама ПостгреСКЛ-а, поновна изградња великих индекса на табелама је резултирала значајним застојима јер промене нису могле да се изврше у међувремену. Али ПостгреСКЛ 12 има још једну сјајну особину: сада можете поново да направите индексе паралелно са командом РЕИНДЕКС ЦОНЦУРРЕНТЛИда у потпуности избегне застоје.

Постоје и друга побољшања инфраструктуре за индексирање у ПостгреСКЛ 12. Још једна ствар у којој је било неке магије - запис унапред, ака ВАЛ (дневник уписивања унапред). Дневник за уписивање унапред бележи сваку трансакцију у ПостгреСКЛ-у у случају неуспеха и репликације. Апликације га користе за архивирање и опоравак у тренутку. Наравно, дневник за уписивање унапред се уписује на диск, што може утицати на перформансе.

ПостгреСКЛ 12 је смањио трошкове ВАЛ записа које креирају ГиСТ, ГИН и СП-ГиСТ индекси током конструкције индекса. Ово пружа неколико опипљивих предности: ВАЛ записи заузимају мање простора на диску, а подаци се брже репродукују, на пример током опоравка од катастрофе или опоравка у тренутку. Ако користите такве индексе у својим апликацијама (на пример, геопросторне апликације засноване на ПостГИС-у доста користе ГиСТ индекс), ово је још једна карактеристика која ће значајно побољшати искуство без икаквог напора са ваше стране.

Партиционисање - веће, боље, брже

Представљен ПостгреСКЛ 10 декларативно партиционисање. У ПостгреСКЛ 11 је постало много лакше за коришћење. У ПостгреСКЛ 12 можете променити размеру секција.

У ПостгреСКЛ 12, перформансе система партиционирања су постале знатно боље, посебно ако постоје хиљаде партиција у табели. На пример, ако упит утиче на само неколико партиција у табели са хиљадама њих, извршиће се много брже. Перформансе нису побољшане само за ове врсте упита. Такође ћете приметити колико су брже ИНСЕРТ операције на табелама са више партиција.

Снимање података помоћу КОПИЈА - успут, ово је одличан начин масовно преузимање података а ево примера прима ЈСОН — партициониране табеле у ПостгреСКЛ 12 су такође постале ефикасније. Са ЦОПИ је све већ било брзо, али у ПостгреСКЛ 12 апсолутно лети.

Захваљујући овим предностима, ПостгреСКЛ вам омогућава да складиштите још веће скупове података и учините их лакшим за преузимање. И без труда са ваше стране. Ако апликација има много партиција, као што је снимање података временских серија, једноставна надоградња ће значајно побољшати њене перформансе.

Иако ово није баш побољшање „надоградите и уживајте“, ПостгреСКЛ 12 вам омогућава да креирате стране кључеве који упућују на партиционисане табеле, чинећи партиционисање задовољством за рад.

СА упитима је постало много боље

Када примењена је закрпа за уграђене изразе заједничке табеле (ака ЦТЕ, ака СА упитима), једва сам чекао да напишем чланак о томе колико су били срећни програмери апликација са ПостгреСКЛ-ом. Ово је једна од оних функција које ће убрзати апликацију. Осим ако, наравно, не користите ЦТЕ.

Често откривам да почетници у СКЛ-у воле да користе ЦТЕ; ако их напишете на одређени начин, заиста се чини да пишете императиван програм. Лично, волео сам да препишем ове упите да бих се заобилазио без ЦТЕ и повећање продуктивности. Сада је све другачије.

ПостгреСКЛ 12 вам омогућава да уградите одређени тип ЦТЕ без нежељених ефеката (SELECT), који се користи само једном при крају захтева. Ако бих пратио ЦТЕ упите које сам преписао, већина њих би спадала у ову категорију. Ово помаже програмерима да напишу јасан код који сада такође брзо ради.

Штавише, ПостгреСКЛ 12 оптимизује само извршавање СКЛ-а, а да ви не морате ништа да радите. И иако сада вероватно нећу морати да оптимизујем такве упите, сјајно је што ПостгреСКЛ наставља да ради на оптимизацији упита.

Јуст-ин-Тиме (ЈИТ) – сада подразумевано

На ПостгреСКЛ 12 системима са подршком ЛЛВМ ЈИТ компилација је подразумевано омогућена. Пре свега, добијате подршку ЈИТ за неке интерне операције, и друго, упити са изразима (најједноставнији пример је к + и) у листама избора (које имате после СЕЛЕЦТ), агрегати, изрази са ВХЕРЕ клаузулама и други могу да користе ЈИТ за побољшање перформанси.

Пошто је ЈИТ подразумевано омогућен у ПостгреСКЛ 12, перформансе ће се побољшати саме од себе, али препоручујем да тестирате апликацију у ПостгреСКЛ 11, који је увео ЈИТ, да бисте измерили перформансе упита и видели да ли треба нешто да подесите.

Шта је са осталим новим функцијама у ПостгреСКЛ 12?

ПостгреСКЛ 12 има гомилу сјајних нових функција, од могућности да прегледа ЈСОН податке користећи стандардне СКЛ/ЈСОН изразе руте до вишефакторске аутентификације са параметром clientcert=verify-full, креиране колоне и још много тога. Довољно за посебан пост.

Као и ПостгреСКЛ 10, ПостгреСКЛ 12 ће побољшати укупне перформансе одмах након надоградње. Ви, наравно, можете имати свој пут – тестирајте апликацију под сличним условима на производном систему пре него што омогућите побољшања, као што сам урадио са ПостгреСКЛ 10. Чак и ако је ПостгреСКЛ 12 већ стабилнији него што сам очекивао, немојте бити лењи у тестирању апликације темељно, пре него што их пусте у производњу.

Извор: ввв.хабр.цом

Додај коментар