
Filosoofiline sissejuhatus
Nagu teada, on olemas ainult kaks meetodit probleemide lahendamiseks:
- AnalĂŒĂŒsi meetod vĂ”i deduktsioonimeetod, ehk ĂŒldisest spetsiifiliseks.
- SĂŒntesi meetod vĂ”i induktsioonimeetod, ehk spetsiifilisest ĂŒldiseks.
Probleemi "andmebaasi jÔudluse parandamine" lahendamiseks vÔib see vÀlja nÀha jÀrgmiselt.
AnalĂŒĂŒs â lahendame probleemi osadeks ja pĂŒĂŒame neid lahendades parandada andmebaasi jĂ”udlust tervikuna.
Praktikas nĂ€eb analĂŒĂŒs enamasti vĂ€lja jĂ€rgmiselt:
- Tekkib probleem (jÔudlusinsident)
- Kogume statistilist teavet andmebaasi seisundi kohta
- Otsime kitsaskohti
- Lahendame kitsaskohtade probleemid
Andmebaasi kitsaskohad â infrastruktuur (CPU, mĂ€lu, kettad, vĂ”rk, opsĂŒsteem), seaded (postgresql.conf), pĂ€ringud:
Infrastruktuur: inseneril on peaaegu nullvÔimalusi mÔjutada ja muuta.
Andmebaasi seaded: muutmise vĂ”imalused on veidi suuremad kui eelmisel juhul, kuid reeglina siiski ĂŒsna keerukad, eriti pilvteenustes.
PÀringud andmebaasile: ainus manööverdusruum.
SĂŒntes â parandame ĂŒksikute osade jĂ”udlust, oodates, et seetĂ”ttu parandub ka andmebaasi jĂ”udlus.
LĂŒĂŒriline sissejuhatus vĂ”i miks seda kĂ”ike on vaja
Kuidas toimub jÔudlusinsidentide lahendamise protsess, kui andmebaasi jÔudlust ei jÀlgita:
Klient - "meil on kÔik halb, aeglane, tehke meile hÀsti"
Insener - "halb, mis see tÀhendab?"
Klient - "niimoodi nagu praegu (tund tagasi, eile, eelmisel korral oli), aeglaselt"
Insener â "millal oli hea?"
Klient â "nĂ€dal (kaks nĂ€dalat) tagasi oli hĂ€sti." (See oli vedamine)
Klient â "ja ma ei mĂ€leta, millal oli hea, aga praegu on halb" (Tavaline vastus)
Tulemuseks on klassikaline pilt:

Kes on sĂŒĂŒdi ja mida teha?
Esimesele kĂŒsimusele on kergem vastata â sĂŒĂŒdi on alati DBA insener.
Teisele kĂŒsimusele on samuti mitte liiga keeruline vastata â tuleb rakendada andmebaasi jĂ”udluse jĂ€lgimise sĂŒsteem.
Tekkib esimene kĂŒsimus â mida jĂ€lgida?
Tee 1. JĂ€lgime KĂIKE

CPU koormust, diskilugemise/kirjutamise operatsioonide arvu, eraldatud mĂ€lu suurust ja veel megatonni erinevaid loendureid, mida iga natukenegi töötav jĂ€lgimise sĂŒsteem vĂ”ib pakkuda.
Tulemuseks on hulk graafikuid, kokkuvÔtteid ja pidevad teavitused e-posti kaudu, mis samas koormavad inseneri, kes peab lahendama rohkearvulisi sarnaseid tikette, mille sisu on enamasti standardne - "Ajutine probleem. Tegutsemine ei ole vajalik". Kuid kÔik on hÔivatud ja alati on midagi, mida kliendile nÀidata - töö kÀib.
Teine tee. JÀlgida ainult seda, mis on vajalik, ja mitte jÀlgida seda, mis ei ole vajalik.
Saame jĂ€lgida natuke teisiti - ainult isendite ja sĂŒndmuste pĂ”hjal:
- Kus insener DBA saab midagi mÔjutada.
- Kus on olemas tegevusalgoritm, kui sĂŒndmus vĂ”i isendi muudetakse.
VĂ”ttes arvesse seda eeldust ja meenutades "Filosoofiline sissejuhatus" eesmĂ€rgiga vĂ€ltida regulaarset kordamist "LĂŒĂŒriline sissejuhatus vĂ”i miks seda kĂ”ike on vaja" oleks mĂ”istlik jĂ€lgida ĂŒksikute pĂ€ringute jĂ”udlust, et optimeerida ja analĂŒĂŒsida, mis lĂ”puks peaks parandama kogu andmebaasi jĂ”udlust.
Kuid selleks, et parandada raskesti tÀidetavat pÀringut, mis mÔjutab kogu andmebaasi jÔudlust, tuleb see esmalt leida.
Seega tekib kaks omavahel seotud kĂŒsimust:
- kuidas mÀÀratleda, mis on raske pÀring
- kuidas otsida raskesti tÀidetavaid pÀringuid.
Ilmselgelt on raske pĂ€ring see, mis kasutab palju sĂŒsteemiressursse, et tulemust saada.
Liigume teise kĂŒsimuse juurde - kuidas otsida ja seejĂ€rel jĂ€lgida raskesti tĂ€idetavaid pĂ€ringuid?
Millised on pÀringute jÀlgimise vÔimalused PostgreSQL-is?
VÔrreldes Oracle'iga on vÔimalusi vÀhe, kuid siiski on midagi vÔimalik teha.

PG_STAT_STATEMENTS
Raskete pÀringute leidmiseks ja jÀlgimiseks PostgreSQL-is on mÔeldud standardne laiendus pg_stat_statements.
PÀrast laienduse installimist ilmub sihtandmebaasis samanimeline vaade, mida tuleb kasutada jÀlgimise eesmÀrkidel.
Sihtveergude pg_stat_statements mÀÀramine jĂ€lgimissĂŒsteemi ĂŒlesehitamiseks:
- queryid Sisemine hash-kood, mis on arvutatud kĂ€su analĂŒĂŒsi puu pĂ”hjal.
- max_time Maksimaalne aeg, mis on kulunud kÀsule, millisekundites.
Kogudes ja kasutades statistikat nende kahe veeru pĂ”hjal, saab luua jĂ€lgimissĂŒsteemi.
Kuidas kasutada pg_stat_statements PostgreSQL-i jÔudluse jÀlgimiseks

PÀringute jÔudluse jÀlgimiseks kasutatakse:
Sihtandmebaasis - vaade pg_stat_statements.
Poolt serverilt ja jÀlgimisandmebaasi - bash-skriptide kogumit ja teenindustabeleid.
1. etapp â statistiliste andmete kogumine
Monitooringuhostil kÀivitatakse regulaarselt skript, mis kopeerib pg_stat_statements vaate sisu sihtandmebaasist monitooringu andmebaasi pg_stat_history tabelisse.
Nii moodustatakse individuaalsete pÀringute tÀitmise ajalugu, mida saab kasutada tulemuslikkuse aruannete koostamiseks ja mÔÔdikute seadmiseks.
2. etapp â tulemuslikkuse mÔÔdikute seadmine
Kogutud andmete pÔhjal valime pÀringud, mille tÀitmine on kliendi (rakenduse) jaoks kÔige kriitilisem/olulisem. KooskÔlastades tellijaga, seame tulemuslikkuse mÔÔdikute vÀÀrtused, kasutades queryid ja max_time vÀljade vÀÀrtusi.
Tulemus â tulemuslikkuse monitooringu alustamine
- Monitooringu skript kÀivitamisel kontrollib konfigureeritud tulemuslikkuse mÔÔdikuid, vÔrreldes mÔÔdiku max_time vÀÀrtust sihtandmebaasi pg_stat_statements vaate vÀÀrtustega.
- Kui sihtandmebaasi vÀÀrtus ĂŒletab mÔÔdiku vÀÀrtuse â genereeritakse hoiatus (insident piletisĂŒsteemis).
LisavÔimalus 1
PÀringute tÀidete plaanide ajalugu
Tulemuslikkuse probleemide lahendamiseks on vÀga kasulik omada pÀringute tÀidete plaanide muutumise ajalugu.
Ajaloo sĂ€ilitamiseks kasutatakse teenindustabelit log_query. Tabelit tĂ€idetakse PostgreSQL-i laaditud logifaili analĂŒĂŒsi kĂ€igus. Kuna logifaili erinevalt pg_stat_statements vaatest sisaldab see tĂ€isteksti koos tĂ€itmise parameetrite vÀÀrtustega, mitte normaliseeritud teksti, on vĂ”imalik salvestada mitte ainult pĂ€ringute aega ja kestust, vaid ka hetkeseisuga tĂ€idete plaane.
LisavÔimalus 2
Pideva tulemuslikkuse parandamise protsess
Eristatud pĂ€ringute monitooring ei ole ĂŒldiselt mĂ”eldud andmebaasi tervikliku tulemuslikkuse pidevaks parandamiseks, kuna see kontrollib ja lahendab tulemuslikkuse probleeme ainult individuaalsete pĂ€ringute jaoks. Siiski on vĂ”imalik metoodikat laiendada ja seada pĂ€ringute monitooring kĂ”igi andmebaaside jaoks.
Selleks tuleb lisada tÀiendavad tulemuslikkuse mÔÔdikud:
- Viimase nÀdala jooksul
- Aluse perioodi jooksul
Skript valib pÀringud pg_stat_statements vaate pÔhjal sihtandmebaasis ja vÔrreldab max_time vÀÀrtust keskmise max_time-ga, esimese puhul viimase pÀevade vÔi valitud ajavahemiku (baseline) osas, teise puhul.
Seega, kui igasuguste pĂ€ringute jĂ”udlus halveneb, siis teade genereeritakse automaatselt, ilma kĂ€sitsi aruannete analĂŒĂŒsita.
Mis asja on sĂŒnteesi juures?
Nagu kirjeldatud lĂ€henemises, parendame sĂŒsteemi ĂŒldiselt, parandades selle erinevaid osi, nagu sĂŒnteesimismeetod seda ette nĂ€eb.
- Andmebaasi poolt tĂ€idetav pĂ€ring â tees
- Muudetud pĂ€ring â antitees
- SĂŒsteemi staatuse muutmine â sĂŒntees

SĂŒsteemi areng
- Statistika tĂ€iendamine, lisades ajaloo pg_stat_activity sĂŒsteemivaatesse
- Statistika tÀiendamine, lisades ajaloo eraldi tabelite statistikale, mis osalevad pÀringutes
- Integreerimine AWS pilve monitoreerimissĂŒsteemiga
- Ja veel, midagi vĂ”iks vĂ€lja mĂ”eldaâŠ
Allikas: habr.com
