Sinteza si një nga metodat për përmirësimin e performancës së PostgreSQL

Sinteza si një nga metodat për përmirësimin e performancës së PostgreSQL

Hyrje filozofike

Siç dihet, ekzistojnë dy metoda për zgjidhjen e problemeve:

  1. Metoda e analizës ose metoda e deduktimit, nga e përgjithshmja në të veçantën.
  2. Metoda e sintezës ose metoda e induksionit, nga të veçantat në të përgjithshmen.

Për të zgjidhur problemin "përmirësimi i performancës së bazës së të dhënave", kjo mund të duket si më poshtë.

Analiza — analizojmĂ« problemin nĂ« pjesĂ« tĂ« veçanta dhe duke i zgjidhur ato, pĂ«rpiqemi tĂ« pĂ«rmirĂ«sojmĂ« performancĂ«n e pĂ«rgjithshme tĂ« bazĂ«s sĂ« tĂ« dhĂ«nave.

Në praktikë, analiza duket përafërsisht kështu:

  • Shfaqet njĂ« problem (incident performancĂ«s)
  • Mblidhemi informacion statistikor mbi gjendjen e bazĂ«s sĂ« tĂ« dhĂ«nave
  • KĂ«rkojmĂ« ngushtica (bottlenecks)
  • Zgjidhim problemet e ngushticave

Ngushticat e bazĂ«s sĂ« tĂ« dhĂ«nave — infrastruktura (CPU, Memorie, Disqe, Rrjeti, OS), konfigurimet (postgresql.conf), pyetjet:

Infrastruktura: mundĂ«sitĂ« pĂ«r ndikim dhe ndryshim pĂ«r inxhinierin — pothuajse zero.

Cilësimet e bazës së të dhënave: mundësitë për ndryshime janë pak më të shumta sesa në rastin e mëparshëm, por zakonisht janë mjaft të vështira, veçanërisht në re.

Kërkesat për bazën e të dhënave: e vetmja zonë për manovra.

SintezĂ« — pĂ«rmirĂ«sojmĂ« performancĂ«n e pjesĂ«ve individuale, duke pritur qĂ« nĂ« pĂ«rfundim performanca e bazĂ«s sĂ« tĂ« dhĂ«nave tĂ« pĂ«rmirĂ«sohet.

Hyrje lirike ose pse na duhen të gjitha këto

Si ndodh procesi i zgjidhjes së incidenteve të performancës, nëse performanca e bazës së të dhënave nuk monitorohet:

Klienti - "gjendja jonë është keq, vonesa, na bëni të mirë"
Inxhinieri - "keq do të thotë si?"
Klienti – "ja si Ă«shtĂ« tani (para njĂ« ore, dje, nĂ« punĂ«n e kaluar), ngadalĂ«"
Inxhinieri – "kur ishte mirĂ«?"
Klienti – "para njĂ« jave (dy javĂ«) ishte mirĂ«." (Ishte fat)
Klienti – "nuk e mbaj mend kur ishte mirĂ«, por tani Ă«shtĂ« keq" (PĂ«rgjigja e zakonshme)

Si rezultat, përfundon një pamje klasike:

Sinteza si një nga metodat për përmirësimin e performancës së PostgreSQL

Kush është fajtor dhe çfarë të bëjmë?

Pjesa e parĂ« e pyetjes Ă«shtĂ« mĂ« e lehtĂ« pĂ«r t'u pĂ«rgjigjur — gjithmonĂ« Ă«shtĂ« inxhinieri DBA qĂ« Ă«shtĂ« fajtor.

Pjesa e dytĂ« gjithashtu nuk Ă«shtĂ« shumĂ« e vĂ«shtirĂ« — duhet tĂ« implementojmĂ« njĂ« sistem monitorimi pĂ«r performancĂ«n e bazĂ«s sĂ« tĂ« dhĂ«nave.

Shfaqet pyetja e parĂ« — ÇfarĂ« tĂ« monitorojmĂ«?

Rruga 1. Do tĂ« monitorojmĂ« TË GJITHA

Sinteza si një nga metodat për përmirësimin e performancës së PostgreSQL

Ngarkesën e CPU, numrin e operacioneve të leximit/shkrimit të diskut, madhësinë e memories së dedikuar, dhe një ton ndryshuesh kërkuesish të ndryshëm që çdo sistem monitorimi disi i funksionueshëm mund të ofrojë.

Si rezultat, merrni njĂ« grumbull grafikĂ«sh, tabelash pĂ«rmbledhĂ«se, dhe njoftime tĂ« vazhdueshme nĂ« email dhe ngarkesĂ« 100% pĂ«r inxhinierin pĂ«r tĂ« zgjidhur njĂ« grumbull biletash tĂ« ngjashme, megjithatĂ«, zakonisht me formulime standarde - "Çështje tĂ« pĂ«rkohshme. AsnjĂ« veprim i nevojshĂ«m". MegjithatĂ«, tĂ« gjithĂ« janĂ« tĂ« angazhuar, dhe gjithmonĂ« ka diçka pĂ«r tĂ« treguar pĂ«r klientin — puna po culminon.

Rruga 2. Monitoroni vetëm atë që është e nevojshme, dhe atë që nuk është e nevojshme, nuk duhet ta monitoroni

Mund të monitoroni, disi ndryshe - vetëm entitetet dhe ngjarjet:

  • PĂ«r tĂ« cilat inxhinieri DBA mund tĂ« ndikojĂ«
  • PĂ«r tĂ« cilat ekziston njĂ« algoritĂ«m veprimi nĂ« rast se ndodhin ngjarje ose ndryshime nĂ« entitet.

Duke e marrë këtë supozim dhe duke kujtuar "Hyrje filozofike" me qëllim që të shmangim përsëritjen e rregullt të "Hyrje lirike ose pse na duhen të gjitha këto", do të ishte e arsyeshme të monitoronim performancën e pyetjeve të veçanta, për optimizim dhe analizë, që në fund do të duhet të çojë në përmirësimin e performancës së të gjithë bazës së të dhënave.

Por për të përmirësuar një kërkesë të rëndë, e cila ndikon në performancën e përgjithshme të bazës së të dhënave, duhet së pari ta gjejmë atë.

Pra, shfaqen dy pyetje të lidhura:

  • Cila kĂ«rkesĂ« konsiderohet e rĂ«ndĂ«
  • Si tĂ« kĂ«rkojmĂ« kĂ«rkesat e rĂ«nda.

Natyrisht, një kërkesë e rëndë është ajo që përdor shumë burime të OS për të marrë rezultatin.

KalojmĂ« nĂ« pyetjen e dytĂ« — si tĂ« kĂ«rkojmĂ« dhe pastaj tĂ« monitorojmĂ« kĂ«rkesat e rĂ«nda?

Cilat janë mundësitë për monitorimin e pyetjeve në PostgreSQL?

Në krahasim me Oracle, mundësitë janë pak, por megjithatë disa gjëra mund të bëhen.

Sinteza si një nga metodat për përmirësimin e performancës së PostgreSQL

PG_STAT_STATEMENTS

Për të gjetur dhe monitoruar kërkesat e rënda në PostgreSQL, është zgjerimi standart pg_stat_statements.

Pas instalimit të zgjerimit në bazën e të dhënave qëllim, shfaqet një pamje e quajtur njësoj, e cila duhet të përdoret për qëllimet e monitorimit.

Kolonat e synuara pg_stat_statements për ndërtimin e një sistemi monitorimi:

  • queryid Hesh kodi internal, i llogaritur mbi pemĂ«n e analizĂ«s sĂ« operatorit
  • max_time Koha maksimale e kaluar pĂ«r operatorin, nĂ« milisekonda

Duke akumuluar dhe përdorur statistikat mbi këto dy kolona, mund të ndërtojmë një sistem monitorimi.

Si përdoret pg_stat_statements për monitorimin e performancës në PostgreSQL

Sinteza si një nga metodat për përmirësimin e performancës së PostgreSQL

Për të monitoruar performancën e pyetjeve, përdoren:
NĂ« anĂ«n e bazĂ«s sĂ« tĂ« dhĂ«nave qĂ«llim — pamja pg_stat_statements
Nga ana e server dhe bazĂ«s sĂ« tĂ« dhĂ«nave tĂ« monitorimit — njĂ« grup skenesh bash dhe tabela shĂ«rbimi.

Faza 1 — mbledhja e tĂ« dhĂ«nave statistikore

Në serverin e monitorimit, një skript ekzekutohet rregullisht përmes cron që kopjon përmbajtjen e shfaqjes pg_stat_statements nga baza e të dhënave objektiv në tabelën pg_stat_history të bazës së të dhënave të monitorimit.

Kështu, formohet një histori e ekzekutimeve të kërkesave individuale, e cila mund të përdoret për të krijuar raporte mbi performancën dhe për të optimizuar metrikat.

Faza 2 — konfigurimi i metrikave tĂ« performancĂ«s

Bazuar në të dhënat e mbledhura, ne zgjedhim kërkesat të cilat janë më kritike/të rëndësishme për klientin (aplikacionin). Në përputhje me atë që është rënë dakord me porositësin, ne vendosim vlerat e metrikave të performancës duke përdorur fushat queryid dhe max_time.

Rezultati — nisja e monitorimit tĂ« performancĂ«s

  1. Skripti i monitorimit, në fillim të ekzekutimit, kontrollon metrikat e performancës të konfiguruara, duke krahasuar vlerën max_time të metrikës me vlerën nga shfaqja pg_stat_statements në bazën e të dhënave objektiv.
  2. NĂ«se vlera nĂ« bazĂ«n e tĂ« dhĂ«nave objektiv mbi kalon vlerĂ«n e metrikĂ«s – formohet njĂ« paralajmĂ«rim (incident nĂ« sistemin e biletave)

Mundësia shtesë 1

Historia e planeve të ekzekutimit të kërkesave

Për zgjidhjen e incidenteve të performancës, është shumë e dobishme të kemi historinë e ndryshimeve të planeve të ekzekutimit të kërkesave.

Për ruajtjen e historisë përdoret tabela ndihmëse log_query. Tabela mbushet gjatë analizës së skedarit të ngarkuar të regjistrave të PostgreSQL. Ndryshe nga shfaqja pg_stat_statements, në skedarin e regjistrit përfshihet teksti i plotë me vlerat e parametrave të ekzekutimit, dhe jo teksti i normalizuar, duke ofruar mundësinë për të regjistruar jo vetëm kohën dhe gjatëshmërinë e kërkesave, por edhe për të mbajtur planet e ekzekutimit në momentin aktual.

Mundësia shtesë 2

Procesi i vazhdueshëm i përmirësimit të performancës

Monitorimi i kërkesave individuale, në përgjithësi, nuk është i krijuar për të zgjidhur problemin e përmirësimit të vazhdueshëm të performancës së bazës së të dhënave në tërësi, pasi ai kontrollon dhe zgjidh problemet e performancës vetëm për kërkesa të veçanta. Megjithatë, metoda mund të zgjerzohet dhe të konfigurohet monitorimi i kërkesave për të gjitha bazat e të dhënave.

Për këtë, është e nevojshme të futen metrika të tjera të performancës:

  • NĂ« ditĂ«t e fundit
  • PĂ«r periudhĂ«n bazĂ«

Skripti zgjedh kërkesat nga shfaqja pg_stat_statements në bazën e të dhënave objektiv dhe krahason vlerën max_time me vlerën mesatare max_time, në rastin e parë për ditët e fundit ose për periudhën e zgjedhur (baseline), dhe në të dytin.

Kështu, në rast se ndodh degradimi i performancës për çdo kërkesë, një paralajmërim do të formohet automatikisht, pa analizë manuale të raporteve.

E çfarë lidhje ka me sintezën?

NĂ« qasjen e pĂ«rshkruar, ashtu siç parashikon metoda e sintezĂ«s — duke pĂ«rmirĂ«suar pjesĂ«t e veçanta tĂ« sistemit, ne pĂ«rmirĂ«sojmĂ« sistemin nĂ« tĂ«rĂ«si.

  • KĂ«rkesa e ekzekutuar nga baza e tĂ« dhĂ«nave — teza
  • KĂ«rkesa e modifikuar — antiteza
  • Ndryshimi i gjendjes sĂ« sistemit — sinteza

Sinteza si një nga metodat për përmirësimin e performancës së PostgreSQL

Zhvillimi i sistemit

  • Zgjerimi i statistikave tĂ« mbledhura duke shtuar historinĂ« pĂ«r shfaqjen sistematike pg_stat_activity
  • Zgjerimi i statistikave tĂ« mbledhura duke shtuar historinĂ« pĂ«r statistikat e tabelave tĂ« veçanta qĂ« marrin pjesĂ« nĂ« kĂ«rkesa
  • Integrimi me sistemin e monitorimit nĂ« AWS
  • Dhe pĂ«r mĂ« tepĂ«r, mund tĂ« mendohet diçka tjetĂ«r...

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster