
Hyrje filozofike
Siç dihet, ekzistojnë vetëm dy metoda për zgjidhjen e problemeve:
- Metoda e analizës ose metoda e deduksionit, ose nga e përgjithshmja në të veçantën.
- Metoda e sintezës ose metoda e induksionit, ose nga e veçantja 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 ashtu:
Analiza â e analizojmĂ« problemin nĂ« pjesĂ« tĂ« veçanta dhe duke i zgjidhur ato, pĂ«rpiqemi tĂ« pĂ«rmirĂ«sojmĂ« nĂ« fund performancĂ«n e bazĂ«s sĂ« tĂ« dhĂ«nave nĂ« mĂ«nyrĂ« tĂ« pĂ«rgjithshme.
Në praktikë analiza duket kështu:
- Ndodhet problemi (incidenti i performancës)
- Mblidhim informacion statistikor mbi gjendjen e bazës së të dhënave
- Kërkojmë ngushticat (bottlenecks)
- Zgjidhim problemet me ngushticat
Ngushticat e bazĂ«s sĂ« tĂ« dhĂ«nave â infrastruktura (CPU, Memoria, Disku, Rrjeti, OS), cilĂ«simet (postgresql.conf), kĂ«rkesat:
Infrastruktura: mundĂ«sitĂ« pĂ«r ndikuar dhe ndryshuar pĂ«r inxhinierin â pothuajse zero.
Cilësimet e bazës së të dhënave: mundësitë për ndryshime pak më të mëdha sesa në rastin e mëparshëm, por në rregull zakonisht të vështira, veçanërisht në re.
Kërkesat për bazën e të dhënave: zona e vetme për manovra.
Sinteza â pĂ«rmirĂ«sojmĂ« performancĂ«n e pjesĂ«ve individuale, duke pritur qĂ« nĂ« fund performanca e bazĂ«s sĂ« tĂ« dhĂ«nave tĂ« pĂ«rmirĂ«sohet.
Hyrje lirike ose pse e gjithë kjo është e nevojshme
Si ndodh processi i zgjidhjes së incidenteve të performancës, nëse performanca e bazës së të dhënave nuk monitorohet:
Klienti -"na ndodhin gjëra të këqija, është e gjatë, na bëni që të jetë mirë"
Inxhinieri -"çfarë është keq?"
Klienti â"po kĂ«shtu si tani (njĂ« orĂ« mĂ« parĂ«, dje, herĂ«n e kaluar), Ă«shtĂ« ngadalĂ«"
Inxhinieri â "kur ishte mirĂ«?"
Klienti â "njĂ« javĂ« (dy javĂ«) mĂ« parĂ« ishte mjaft mirĂ«." (Kjo ishte njĂ« rast me fat)
Klienti â "dhe nuk e mbaj mend kur ishte mirĂ«, por tani Ă«shtĂ« keq" (PĂ«rgjigja e zakonshme)
Si rezultat del një pamje klasike:

Kush është fajtor dhe çfarë të bëjmë?
PĂ«r pjesĂ«n e parĂ« tĂ« pyetjes Ă«shtĂ« mĂ« e lehtĂ« tĂ« pĂ«rgjigjesh â gjithmonĂ« Ă«shtĂ« faji i inxhinierit DBA.
PĂ«r pjesĂ«n e dytĂ« Ă«shtĂ« gjithashtu e thjeshtĂ« tĂ« pĂ«rgjigjesh â nevojitet tĂ« implementohet njĂ« sistem monitorimi tĂ« performancĂ«s sĂ« bazĂ«s sĂ« tĂ« dhĂ«nave.
Ndodhet pyetja e parĂ« â çfarĂ« tĂ« monitorojmĂ«?
Rruga 1. Do tĂ« monitorojmĂ« GJITHĂKA

Ngarkesën e CPU, numrin e operacioneve të leximit/shkruajtjes së disqeve, madhësinë e memories të dedikuar, dhe një ton e ndryshme matësish që çdo sistem monitorimi më shumë ose më pak funksional mund të ofrojë.
Rezultati janĂ« njĂ« grumbull grafikĂ«sh, tabelash pĂ«rmbledhĂ«se dhe njoftime tĂ« vazhdueshme nĂ« email, duke shkaktuar 100% angazhim tĂ« inxhinierit me zgjidhjen e shumĂ« biletave tĂ« ngjashĂ«m, tĂ« cilĂ«t zakonisht kanĂ« formulimin standard - âProblem pĂ«rkohĂ«sor. Nuk kĂ«rkohet veprim.â Por, tĂ« gjithĂ« janĂ« tĂ« zĂ«nĂ« dhe gjithmonĂ« ka diçka pĂ«r tĂ« treguar klientit â puna Ă«shtĂ« nĂ« zhvillim.
Rruga 2. Monitoroni vetëm atë që është e nevojshme, ndërsa ajo që nuk është e nevojshme, nuk duhet monitoruar.
Mund të monitoroni, disi ndryshe - vetëm entitetet dhe ngjarjet:
- Të cilat inxhinieri DBA mund të ndikojë.
- Për të cilat ekziston një algoritëm veprimi në rast të ndodhjes së një ngjarjeje ose ndryshimit të entitetit.
Duke u bazuar nĂ« kĂ«tĂ« supozim dhe duke kujtuar âHyrje filozofikeâ me qĂ«llim qĂ« tĂ« shmangen pĂ«rsĂ«ritjet e rregullta tĂ« âHyrje lirike ose pse e gjithĂ« kjo Ă«shtĂ« e nevojshmeâ do tĂ« ishte e arsyeshme tĂ« monitoroni performancĂ«n e kĂ«rkesave individuale, pĂ«r optimizim dhe analizĂ«, qĂ« nĂ« fund do 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ë, që ndikon në performancën e përgjithshme të bazës së të dhënave, duhet së pari ta gjeni atë.
Kështu, lindin dy pyetje të ndërlidhura:
- cila kërkesë konsiderohet e rëndë
- si të kërkoni kërkesat e rëndë.
Sigurisht, një kërkesë e rëndë është ajo që përdor shumë burime të OS për të marrë rezultatet.
Tani kalojmĂ« te pyetja e dytĂ« â si tĂ« kĂ«rkoni dhe mĂ« pas tĂ« monitoroni kĂ«rkesat e rĂ«ndĂ«?
ĂfarĂ« mundĂ«sish pĂ«r monitorimin e kĂ«rkesave ka nĂ« PostgreSQL?
Në krahasim me Oracle, mundësitë janë pak, por prapë disa gjëra mund të bëhen.

PG_STAT_STATEMENTS
Për të gjetur dhe monitoruar kërkesat e rënda në PostgreSQL, është dizajnuar zgjerimi standard pg_stat_statements.
Pasi të instalohet zgjerimi, në bazën e të dhënave të synuara do të shfaqet një pamje me të njëjtin emër, e cila duhet të përdoret për qëllime monitorimi.
Kolonat e synuara të pg_stat_statements për ndërtimin e një sistemi monitorimi:
- queryid Kodi i brendshëm hash, i llogaritur sipas pemës së analizës së shprehjes.
- max_time Koha maksimale e shpenzuar për operatorin, në milisekonda.
Duke akumuluar dhe duke përdorur statistikat për këto dy kolona, mund të ndërtohet një sistem monitorimi.
Si përdoret pg_stat_statements për monitorimin e performancës së PostgreSQL?

Për monitorimin e performancës së kërkesave përdoret:
NĂ« anĂ«n e bazĂ«s sĂ« tĂ« dhĂ«nave qĂ« synohet â pamja pg_stat_statements.
Nga ana e serverĂ« dhe bazĂ«s sĂ« tĂ« dhĂ«nave tĂ« monitorimit â njĂ« set skriptesh bash dhe tabela shĂ«rbimi.
Hapi 1 â mbledhja e tĂ« dhĂ«nave statistikore
Në hostin e monitorimit, në mënyrë periodike ekzekutohet një skript që kopjon përmbajtjen e paraqitjes pg_stat_statements nga baza e të dhënave për pjesën destinuese në tabelën pg_stat_history në bazën e të dhënave të monitorimit.
Në këtë mënyrë, formohet një histori e ekzekutimeve të kërkesave, e cila mund të përdoret për të krijuar raporte të performancës dhe për të rregulluar metriken.
Hapi 2 â konfigurimi i metrikeve tĂ« performancĂ«s
Duke u bazuar në të dhënat e mbledhura, ne zgjedhim kërkesat që janë më kritike/vendimtare për klientin (aplikacionin). Pas miratimit me klientin, ne vendosim vlerat e metrikeve të performancës duke përdorur fushat queryid dhe max_time.
Rezultati â nĂ« fillim tĂ« monitorimit tĂ« performancĂ«s
- Skripti i monitorimit, kur ekzekutohet, kontrollon metriket e konfigurura të performancës duke krahasuar vlerën max_time të metrikes me vlerën nga paraqitja pg_stat_statements në bazën e të dhënave për pjesën destinuese.
- NĂ«se vlera nĂ« bazĂ«n e tĂ« dhĂ«nave pĂ«r pjesĂ«n destinuese kalon vlerĂ«n e metrikes â krijohet njĂ« paralajmĂ«rim (incident nĂ« sistemin e tiketave)
Mundësia shtesë 1
Historia e planit të ekzekutimit të kërkesave
Për të zgjidhur incidentet e performancës, është shumë mirë të kemi një histori të ndryshimeve të planeve të ekzekutimit të kërkesave.
Për ruajtjen e historisë, përdoret tabela shërbimit log_query. Tabela plotësohet gjatë analizës së skedarit të ngarkuar të logut PostgreSQL. Ndryshe nga paraqitja pg_stat_statements, skedari i logut përmban tekstin e plotë me vlerat e parametrave të ekzekutimit, jo tekstin e normalizuar, duke i dhënë mundësinë të ruajë jo vetëm kohën dhe gjatësi të kërkesave, por edhe të ruajë 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 të veçanta, në përgjithësi, nuk është i destinuar për të zgjidhur problemin e përmirësimit të vazhdueshëm të performancës së bazës së të dhënave si një e tërë, për shkak se kontrollon dhe zgjidh problemet e performancës vetëm për kërkesa të veçanta. Megjithatë, metoda mund të zgjerohet dhe të konfigurohet për të monitoruar kërkesat për të gjitha bazat e të dhënave.
Për këtë, është e nevojshme të introduktohen metrike të reja të performancës:
- Për ditët e fundit
- Për periudhën bazë
Skripti zgjidh kërkesat nga pamja pg_stat_statements në bazën e të dhënave të synuar dhe krahason vlerën e max_time me mesataren e max_time, në rastin e parë për ditët e fundit ose për periudhën e zgjedhur të kohës (baseline), në rastin e dytë.
Kështu, në rast të degradimit të performancës për çdo kërkesë, një paralajmërim do të formohet automatikisht, pa analizë manuale të raporteve.
Po çfarë lidhje ka me sintezën?
NĂ« qasjen e pĂ«rshkruar, siç parashikon metoda e sintezĂ«s â duke pĂ«rmirĂ«suar pjesĂ« tĂ« 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 ndryshuar â antiteza
- Ndryshimi i gjendjes sĂ« sistemit â sinteza

Zhvillimi i sistemit
- Zgjerimi i statistikave të mbledhura duke shtuar historinë për pamjen sistemike pg_stat_activity
- Zgjerimi i statistikave të mbledhura duke shtuar historinë për statistikat e tabelave të veçanta të përfshira në kërkesa
- Integrimi me sistemin e monitorimit nĂ« ĐŸĐ±Đ»Đ°ĐșŃ AWS
- Dhe gjithashtu, mund tĂ« mendoni pĂ«r diçka tjetĂ«râŠ
Burimi: habr.com
