{"id":56075,"date":"2020-02-04T00:00:00","date_gmt":"2020-02-03T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/osnovy-monitoringa-postgresql-aleksej-lesovskij"},"modified":"2020-02-18T14:04:16","modified_gmt":"2020-02-18T11:04:16","slug":"osnovy-monitoringa-postgresql-aleksej-lesovskij","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij","title":{"rendered":"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0438\u0437 Data Egret &quot;\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL&quot;<\/strong><\/p>\n<p><\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442, \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435; \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435, \u043a\u0430\u043a \u0438\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438 \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u043e\u043a\u043b\u0430\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0442\u0440\u0430\u0431\u043b\u0448\u0443\u0442\u0438\u043d\u0433 Postgres&#8217;\u0430.<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"Hbi2AFhd4nY\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/Hbi2AFhd4nY\/hqdefault.jpg\" alt=\"M\u00e4ngi videot\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/07b4739a84eb36c84e0c663c5d721435.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Minu nimi on Alexey Lesovski, esindan ettev\u00f5tet Data Egret. <\/p>\n<p><\/p>\n<p>Veidi enda kohta. Alustasin kunagi ammu s\u00fcsteemiadministraatorina. <\/p>\n<p><\/p>\n<p>Hallates erinevaid Linuxi s\u00fcsteeme, tegelesin erinevate asjadega, mis olid seotud Linuxiga, st virtualiseerimise, monitoorimisega, t\u00f6\u00f6tasin proksidega jne. Kuid mingil hetkel hakkasin rohkem tegelema andmebaasidega, PostgreSQL'iga. See meeldis mulle v\u00e4ga. Ja mingil hetkel hakkasin PostgreSQL'le p\u00fchendama suurema osa oma t\u00f6\u00f6ajast. Nii ma aeglaselt muutusin PostgreSQL DBA-ks.<\/p>\n<p><\/p>\n<p>Ja kogu oma karj\u00e4\u00e4ri jooksul on mind alati huvitanud statistika, monitooringu ja telemeetria teemad. Kui olin s\u00fcsteemiadministraator, tegelesin tihedalt Zabbixiga. Kirjutasin v\u00e4ikese komplekti skripte nagu <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lesovsky\/zabbix-extensions\">zabbix-extensions<\/a><\/noindex>. See oli omal ajal \u00fcsna populaarne. Seal sai monitoorida v\u00e4ga erinevaid olulisi asju, mitte ainult Linuxit, vaid ka teisi komponente.<\/p>\n<p><\/p>\n<p>Praegu tegelema PostgreSQL'iga. Kirjutan teistsugust asja, mis v\u00f5imaldab t\u00f6\u00f6tada PostgreSQL statistika pealt. See kannab nime <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lesovsky\/pgcenter\">pgCenter<\/a><\/noindex> (artikkel Habr's \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/425083\/\">PostgreSQL statistika muredeta ja pingeteta<\/a><\/noindex>). <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/10f619998e38e7dce6c2b042565c6aee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00fchike sissejuhatus. Millised olukorrad meie tellijatel, meie klientidel esinevad? Juhtub m\u00f5ni h\u00e4da, mis on seotud andmebaasiga. Ja kui andmebaas on juba taastatud, tuleb osakonna juht v\u00f5i arenduse juht ning \u00fctleb: \u201eKallis, peaksime andmebaasi j\u00e4lgima, sest juhtus midagi halba ja me peame tagama, et midagi sellist ei juhtuks tulevikus.\u201c Ja siin algab huvitav valikuprotsess j\u00e4lgimiss\u00fcsteemi valimiseks v\u00f5i olemasoleva j\u00e4lgimiss\u00fcsteemi kohandamiseks, et saaksime oma andmebaasi \u2014 PostgreSQL, MySQL v\u00f5i m\u00f5ne muu \u2014 j\u00e4lgida. Ja kolleegid hakkavad ettepanekuid tegema: \u201eMa olen kuulnud, et selline andmebaas on olemas. Kas me ei v\u00f5iks seda kasutada?\u201c Kolleegid hakkavad omavahel vaidlema. Tulemuseks on, et valime m\u00f5ne andmebaasi, kuid PostgreSQL-i j\u00e4lgimine on seal n\u00f5rgalt esindatud ja alati peab midagi seadistama. Peame v\u00f5tma GitHubist mingeid hoidlaid, need kloonima, skripte kohandama, kuidagi t\u00e4iustama. Ja l\u00f5puks muutub see k\u00e4sit\u00f6\u00f6ks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/6a36a566c8c9e155d7b99e2adaf9e70c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Seet\u00f5ttu p\u00fc\u00fcan ma selles ettekandes anda teile teavet, kuidas valida j\u00e4lgimist mitte ainult PostgreSQL-i, vaid ka andmebaasi jaoks. Ja anda teadmised, mis aitavad teil teie j\u00e4lgimist t\u00e4iustada, et saada sellest kasu, et saaksite oma andmebaasi j\u00e4lgida kasulikult ning \u00f5igeaegselt hoiatada v\u00f5imalike probleemide eest, mis v\u00f5ivad tekkida. <\/p>\n<p><\/p>\n<p>Ja need ideed, mis selles ettekandes esitatakse, saab otse kohandada igasuguste andmebaaside jaoks, olgu need siis S\u00dcB v\u00f5i noSQL. Seet\u00f5ttu ei ole siin mitte ainult PostgreSQL, vaid ka palju retsepte, kuidas seda PostgreSQL-is teha. Esitatakse p\u00e4ringute n\u00e4iteid, n\u00e4iteid isenditest, mis on PostgreSQL-is j\u00e4lgimiseks olemas. Ja kui teie S\u00dcB-il on sarnased asjad, mis v\u00f5imaldavad neid j\u00e4lgimisse panna, saate neid samuti kohandada, lisada ja k\u00f5ik on h\u00e4sti.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/412766f755018e76ac04c0e399361f4d.jpg\" style=\"display:block;margin: 0 auto;\" \/>Ettekandes ei r\u00e4\u00e4gi ma<br \/>\nm\u00f5\u00f5dikute edastamisest ja salvestamisest. Ma ei r\u00e4\u00e4gi midagi andmete t\u00f6\u00f6tlemise ja kasutajale esitamise kohta. Ja ma ei r\u00e4\u00e4gi midagi h\u00e4irete seadistamisest.<br \/>\nKuid loo k\u00e4igus hakkan ma n\u00e4itama erinevaid olemasolevaid monitooringute ekraanipilte ja m\u00f5ningaid neist kritiseerima. Pean siiski silmas, et p\u00fc\u00fcan br\u00e4ndide nimesid mitte mainida, et mitte tekitada neile toodetele reklaami v\u00f5i vastureklaami. Seega on k\u00f5ik sarnased juhtumid juhuslikud ja j\u00e4\u00e4vad teie fantaasiasse.<br \/>\n<img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/e1c6ba71914b5c133f37a76484768d5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEsiteks m\u00f5istame, mis on monitooring. Monitooring on v\u00e4ga oluline asi, mida on h\u00e4dasti vaja. Seda m\u00f5istetakse k\u00f5ikjal. Kuid samal ajal ei kuulu monitooring \u00e4ri toote hulka ega m\u00f5juta otseselt ettev\u00f5tte kasumit, seet\u00f5ttu p\u00f6\u00f6ratakse monitooringule alati aega alles siis, kui muud t\u00f6\u00f6d on tehtud. Kui meil on aega, siis tegeleme monitooringuga, kui aega ei ole, siis OK, paneme selle ootele ja tulevikus tuleme nende \u00fclesannete juurde tagasi. <\/p>\n<p><\/p>\n<p>Seet\u00f5ttu meie praktikast, kui me tuleme klientide juurde, on monitooring sageli puudulik ja ei sisalda huvitavaid elemente, mis aitaksid meil andmebaasidega t\u00f6\u00f6d paremini teha. Seet\u00f5ttu on monitooringut alati vaja t\u00e4iendada. <\/p>\n<p><\/p>\n<p>Andmebaasid on keerulised asjad, mida tuleb samuti monitooringu alla v\u00f5tta, sest andmebaasid on teabehoidla. Ja teave on ettev\u00f5tte jaoks v\u00e4ga oluline, seda ei tohi mingil juhul kaotada. Kuid samas on andmebaasid ka v\u00e4ga keerulised tarkvarakomponendid. Need koosnevad paljusid komponente. Ja paljusid neist komponentidest tuleb monitooringu alla v\u00f5tta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/d2293a3d5089c320aa94471039a6023f.jpg\" style=\"display:block;margin: 0 auto;\" \/>Kui r\u00e4\u00e4gime konkreetselt PostgreSQL-ist, siis v\u00f5ib seda esitada kui sellist skeemi, mis koosneb paljusid komponente. Need komponendid suhtlevad \u00fcksteisega. Ja samal ajal on PostgreSQL-is nn Stats Collectori alams\u00fcsteem, mis v\u00f5imaldab koguda statistikat nende alams\u00fcsteemide t\u00f6\u00f6 kohta ja anda administreerijale v\u00f5i kasutajale teatud liidese, et ta saaks seda statistikat vaadata. <\/p>\n<p><\/p>\n<p>See statistika on esitatud teatud funktsioonide ja vaadete (view) kogumina. Neid v\u00f5ib nimetada ka tabeliteks. See t\u00e4hendab, et tavalise psql kliendi abil saate andmebaasiga \u00fchendada, teha nendele funktsioonidele ja vaadetele SELECT-p\u00e4ringu ning saada juba konkreetseid numbreid PostgreSQL alams\u00fcsteemide t\u00f6\u00f6 kohta. <\/p>\n<p><\/p>\n<p>Saate lisada need numbrid oma lemmik monitooringus\u00fcsteemi, koostada graafikuid, lisada funktsioone ja saada pikaajalist anal\u00fc\u00fcsi. <\/p>\n<p><\/p>\n<p>Kuid ma ei kavatse selles raportis arutada k\u00f5iki neid funktsioone, sest see v\u00f5ib v\u00f5tta terve p\u00e4eva. Ma keskendun vaid kahele kuni neljale punktile ja r\u00e4\u00e4gin, kuidas need aitavad j\u00e4lgimist paremaks muuta.<br \/>\n<img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/13e1b9dc97deeb164576818eb6be17fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJa kui r\u00e4\u00e4kida andmebaasi j\u00e4lgimisest, siis mida tuleks j\u00e4lgida? Esiteks tuleb j\u00e4lgida k\u00e4ttesaadavust, kuna andmebaas on teenus, mis pakub klientidele juurdep\u00e4\u00e4su andmetele, ja peame j\u00e4lgima k\u00e4ttesaadavust, samuti m\u00f5ningaid selle kvaliteetseid ja kvantitatiivseid omadusi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/eb54f240bfaf74a356cf87e66ed9f83b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Samuti tuleb j\u00e4lgida kliente, kes meie andmebaasi \u00fchenduvad, sest nad v\u00f5ivad olla nii normaalsed kliendid kui ka kahjulikud kliendid, kes v\u00f5ivad andmebaasile kahju tekitada. Neid tuleb samuti j\u00e4lgida ja nende tegevust j\u00e4lgida.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/4ef57fc16b0b0974f5d66568534fad96.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui kliendid \u00fchenduvad andmebaasi, siis on ilmne, et nad hakkavad t\u00f6\u00f6tama meie andmetega, seega peame j\u00e4lgima ka seda, kuidas kliendid andmetega t\u00f6\u00f6tavad: milliste tabelitega, v\u00e4hemal m\u00e4\u00e4ral milliste indexitega. See t\u00e4hendab, et peame hindama t\u00f6\u00f6koormust, mille meie kliendid tekitavad.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/ef7ee6e5c3b66bb14adc3d8b0c34f4f7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuid t\u00f6\u00f6koormus koosneb muidugi p\u00e4ringutest. Rakendused \u00fchenduvad andmebaasiga, kutsuvad andmeid v\u00e4lja p\u00e4ringute kaudu, seega on oluline hinnata, millised p\u00e4ringud meil andmebaasis on, j\u00e4lgida nende adekvaatsust, et nad ei oleks valesti kirjutatud, ning m\u00f5ningaid valikuid tuleks \u00fcmber kirjutada, et need t\u00f6\u00f6taksid kiiremini ja parema j\u00f5udlusega. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/cf74205ff688659cae41e4b0cbc4525d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja kuna me r\u00e4\u00e4gime andmebaasist, siis andmebaas t\u00e4hendab alati taustprotsesse. Taustprotsessid aitavad s\u00e4ilitada andmebaasi j\u00f5udlust heas seisus, seega vajavad nad teatud hulga ressursse enda jaoks. Samuti v\u00f5ivad nad kattuda klientide p\u00e4ringute ressurssidega, seega v\u00f5ivad taustprotsesside intensiivne t\u00f6\u00f6 otseselt m\u00f5jutada klientide p\u00e4ringute j\u00f5udlust. Seega tuleb neid samuti j\u00e4lgida ja v\u00e4ltida tasakaaluh\u00e4ireid taustprotsesside osas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/50f44ab160e889882210529fa9b7fc57.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja see k\u00f5ik andmebaasi j\u00e4lgimise osas j\u00e4\u00e4b s\u00fcsteemi meetrika. Kuid arvestades, et meie kogu infrastruktuur liigub peamiselt pilve, j\u00e4\u00e4vad eraldi hosti s\u00fcsteemi meetrikad alati tagaplaanile. Kuid andmebaasides on need endiselt olulised ja s\u00fcsteemi meetrikate j\u00e4lgimine on loomulikult samuti vajalik. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/71d119b3ef5d5b9eee5510a43ef0e16d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u00fcsteemi meetrikate osas on enam-v\u00e4hem k\u00f5ik h\u00e4sti, k\u00f5ik kaasaegsed j\u00e4lgimiss\u00fcsteemid toetavad neid meetrikaid, kuid \u00fcldiselt m\u00f5ningaid komponente siiski puudub ja m\u00f5ned asjad on vajalikud lisada. Nendest r\u00e4\u00e4gin ma samuti, paar slaidi on nende kohta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/e38d506da3a168913952a4015ba06e3e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEsimene plaani punkt on k\u00e4ttesaadavus. Mis on k\u00e4ttesaadavus? K\u00e4ttesaadavus minu arusaama kohaselt t\u00e4hendab andmebaasi v\u00f5imet teenindada \u00fchendusi, st andmebaas on aktiivne, see, nagu teenus, aktsepteerib klientide \u00fchendusi. Ja seda k\u00e4ttesaadavust saab hinnata teatud omadustega. Need omadused on v\u00e4ga mugavad paneelidele v\u00e4lja toomiseks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/befa103d55797b6ec9884541ca70c05a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nK\u00f5ik teavad, mis on paneelid. See on siis, kui heidad pilku ekraanile, kus on kokku koondatud vajalik teave. Ja sa saad kohe m\u00e4\u00e4rata - kas andmebaasis on probleem v\u00f5i mitte.<br \/>\nSeega andmebaasi k\u00e4ttesaadavus ja teised olulised omadused on alati vajalikud paneelidele v\u00e4ljatootmiseks, et see teave oleks k\u00e4ep\u00e4rast ja alati sinu l\u00e4hedal. M\u00f5ned lisadetailid, mis aitavad juhtumite uurimise, avariiolukordade uurimise puhul, peaksid minema teisej\u00e4rgulistele paneelidele v\u00f5i olema peidetud drilldown-linkidesse, mis viivad kolmandate osapoolte j\u00e4lgimiss\u00fcsteemidesse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/6c595fdff1d0626b61bc76ad06299fb0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dche tuntud j\u00e4lgimiss\u00fcsteemi n\u00e4ide. See on v\u00e4ga \u00e4ge j\u00e4lgimiss\u00fcsteem. See kogub v\u00e4ga palju andmeid, kuid minu arvates on seal kummaline m\u00f5isted paneelide osas. Seal on link \"loo paneel\". Kuid kui sa lood paneeli, siis lood sa teatud loendi, mis koosneb kahest veerust, mingi graafikute loendi. Ja kui sul on vaja midagi vaadata, siis hakkad hiirega klikkima, kerima, otsima vajalikku graafikut. Ja selleks kulub aega, st t\u00f5elisi paneele ei ole. On vaid graafikute loendid.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/0a82729df59b2e09741bd290e3fb4f29.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mida tuleks nende juhtpaneelide peale lisada? V\u00f5ib alustada sellise n\u00e4itajaga nagu reageerimisaeg. PostgreSQL-is on vaade pg_stat_statements. Vaikimisi on see v\u00e4lja l\u00fclitatud, kuid see on \u00fcks olulisemaid s\u00fcsteemi vaateid, mis tuleks alati sisse l\u00fclitada ja kasutada. See salvestab teavet k\u00f5igi k\u00e4ideldud p\u00e4ringute kohta, mis on andmebaasis teostatud. <\/p>\n<p><\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439. \u041d\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u0441\u0440\u0435\u0434\u043d\u044f\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043f\u043e \u0431\u043e\u043b\u044c\u043d\u0438\u0446\u0435. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u043b\u0435\u0439 \u2013 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0438 \u043c\u0435\u0434\u0438\u0430\u043d\u043d\u043e\u0435. \u0418 \u0434\u0430\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0435\u0440\u0446\u0435\u043d\u0442\u0438\u043b\u0438, \u0432 PostgreSQL \u0435\u0441\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e. \u0418 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0446\u0438\u0444\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0437\u0443\u044e\u0442 \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043a\u043b\u0438\u043a\u0430 \u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u044b \u043f\u043e \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c, \u0442. \u0435. \u043c\u044b \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 &#8216;select 1&#8217;\u00a0\u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043a\u043b\u0438\u043a\u0430, \u0430 \u043c\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043f\u043e \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c \u0438 \u0440\u0438\u0441\u0443\u0435\u043c \u043b\u0438\u0431\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0446\u0438\u0444\u0440\u043e\u0439, \u043b\u0438\u0431\u043e \u0441\u0442\u0440\u043e\u0438\u043c \u043f\u043e \u043d\u0435\u0439 \u0433\u0440\u0430\u0444\u0438\u043a. <\/p>\n<p><\/p>\n<p>Samuti on oluline j\u00e4lgida vigu, mida s\u00fcsteem praegu genereerib. Selleks saame kasutada vaadet pg_stat_database. Me vaatame v\u00e4ljale xact_rollback. See v\u00e4li n\u00e4itab mitte ainult tabeli tagasiv\u00f5tmise arvu, vaid arvestab ka vigade arvu. \u00dctleme nii, et saame selle numbri oma juhtpaneelile v\u00e4lja tuua ja vaadata, kui palju vigu meil praegu on. Kui vigu on palju, on see juba hea p\u00f5hjus vaadata logisid ja n\u00e4ha, millised need vead on ja miks need juhtuvad, ning seej\u00e4rel uurida ja lahendada need.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/3ee7809fd203c03596633479f34dba12.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Saame lisada sellise asja nagu tahhomeeter. See on tehingute arv sekundis ja p\u00e4ringute arv sekundis. \u00dctleme nii, et v\u00f5ite neid numbreid kasutada oma andmebaasi praeguse j\u00f5udluse indikaatorina ja j\u00e4lgida, kas on p\u00e4ringute v\u00f5i tehingute tippe, v\u00f5i vastupidi, et andmebaas on alatalletatud, sest m\u00f5ni backend on kokku kukkunud. Seda numbrit on oluline alati j\u00e4lgida ja meeles pidada, et meie projekti jaoks on selline j\u00f5udlus normaalne, samas kui k\u00f5rgemad ja madalamad v\u00e4\u00e4rtused on probleemsed ja arusaamatud, seega tuleb vaadata, miks sellised numbrid on.<\/p>\n<p><\/p>\n<p>Tehingute arvu hindamiseks v\u00f5ime j\u00e4lle p\u00f6\u00f6rduda pg_stat_database vaate poole. Saame liita commitide ja rollbackide arvu, et saada tehingute arv sekundis. <\/p>\n<p><\/p>\n<p>K\u00f5ik m\u00f5istavad, et \u00fchte tehingusse v\u00f5ib kuuluda mitu p\u00e4ringut? Seet\u00f5ttu on TPS ja QPS veidi erinevad. <\/p>\n<p><\/p>\n<p>P\u00e4ringute arvu sekundis saab saada pg_stat_statements'ist ning lihtsalt arvutada v\u00e4lja k\u00f5ikide t\u00e4idetud p\u00e4ringute summa. On selge, et me v\u00f5rdleme praegust v\u00e4\u00e4rtust varasemaga, lahutame selle, saame delta ja saame arvu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/d2e521bf6360aa5a34f3042281f9f902.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V\u00f5ime soovi korral lisada t\u00e4iendavaid m\u00f5\u00f5dikuid, mis aitavad samuti hinnata meie andmebaasi k\u00e4ttesaadavust ja j\u00e4lgida, kas on olnud mingit katkestust. <\/p>\n<p><\/p>\n<p>\u00dcks neist m\u00f5\u00f5dikest on uptime. Kuid uptime PostgreSQL-is on veidi keeruline asi. R\u00e4\u00e4gin, miks. Kui PostgreSQL k\u00e4ivitub, algab uptime arvestamine. Kuid kui m\u00f5nel hetkel, n\u00e4iteks \u00f6\u00f6sel, t\u00e4ideti m\u00f5ni \u00fclesanne, tuli OOM-killer ja sundis PostgreSQL-lt alamharu protsessi katkestama, siis sel juhul l\u00f5petab PostgreSQL k\u00f5igi klientide \u00fchendused, t\u00fchjendab sharding m\u00e4lu ja alustab taastamist viimase kontrollpunkti juures. Ja kuni see taastamine kestab, ei v\u00f5ta andmebaas \u00fchendusi, seega saab seda olukorda hinnata kui katkestust. Kuid samas uptime m\u00f5\u00f5dik ei nulli ennast, sest see arvestab postmaster'i k\u00e4ivitamise aega alates esimesest hetkes. Seet\u00f5ttu v\u00f5ib selliseid olukordi m\u00f6\u00f6da vaadata.<\/p>\n<p><\/p>\n<p>Samuti tuleb j\u00e4lgida vakumeerimise t\u00f6\u00f6tlusprotsesside arvu. Kas k\u00f5ik tunnevad autovacuum'i PostgreSQL-is? See on huvitav alams\u00fcsteem PostgreSQL-is. Selle kohta on kirjutatud palju artikleid, peetud palju ettekandeid. Palju arutelusid vakumeerimise \u00fcle, kuidas see peaks t\u00f6\u00f6tama. Paljud peavad seda v\u00e4ltimatuks kurjuseks. Ja see on t\u00f5si. See on omamoodi pr\u00fcgikasti koristaja, mis puhastab aegunud ridade versioonid, mis ei ole \u00fchegi tehingu jaoks vajalikud, ja vabastab ruumi tabelites, indeksites uute ridade jaoks. <\/p>\n<p><\/p>\n<p>Miks tuleb seda j\u00e4lgida? Sest vakumeerimine v\u00f5ib vahel olla v\u00e4ga valus. See s\u00f6\u00f6b suure hulga ressursse ja kliendip\u00e4ringud kannatavad selle t\u00f5ttu. <\/p>\n<p><\/p>\n<p>Ja tuleks j\u00e4lgida selle aktiivsust pg_stat_activity vaate kaudu, millest ma r\u00e4\u00e4gin j\u00e4rgmises osas. See vaade n\u00e4itab praegust tegevust andmebaasis. Selle tegevuse kaudu saame j\u00e4lgida, kui palju vaakume on hetkel t\u00f6\u00f6s. Saame j\u00e4lgida vaakume ja n\u00e4ha, et kui meil on \u00fcletatud piirang, siis on see p\u00f5hjus vaadata PostgreSQL seadeid ja kuidas vaakumi t\u00f6\u00f6d optimeerida. <\/p>\n<p><\/p>\n<p><strong>Teine PostgreSQL omadus on see, et PostgreSQL kannatab v\u00e4ga pikkaealiste tehingute all. Eriti tehingute, mis on pikka aega aktiivsed, kuid ei tee midagi. Need on nn stat idle-in-transaction tehingud. Selline tehing hoiab blokeeringuid ja takistab vaakumi t\u00f6\u00f6d. Tagaj\u00e4rjeks on see, et tabelid paisuvad, nende suurus suureneb. Ja p\u00e4ringud, mis t\u00f6\u00f6tavad nende tabelitega, hakkavad t\u00f6\u00f6tama aeglasemalt, sest tuleb vanu ridade versioone m\u00e4lust kettale ja tagasi kaevama.<\/strong> Seet\u00f5ttu on oluline j\u00e4lgida ka pikkade tehingute aega, k\u00f5ige pikemate vaakumip\u00e4ringute aega. <strong>Ja kui me n\u00e4eme mingeid protsesse, mis t\u00f6\u00f6tavad juba v\u00e4ga pikka aega, rohkem kui 10-20-30 minutit OLTP-koormuse jaoks, siis tuleb neile t\u00e4helepanu p\u00f6\u00f6rata ja need kas sulgeda sundkorras v\u00f5i optimeerida rakendust, et need ei kutsuks \u00fcles ja ei seisaks liiga kaua.<\/strong> Ala-analyytika koormuse jaoks on 10-20-30 minutit normaalne, seal v\u00f5ib olla ka veelgi pikemaid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/736035b2ee6106b571ad6f84f2902d41.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJ\u00e4rgmine on variant \u00fchendatud klientidega. Kui oleme juba koostanud juhtpaneeli, ja seni, kuni oleme sellele v\u00e4lja riputanud v\u00f5tmeprotsendid saadavusest, saame sinna lisada ka t\u00e4iendavat teavet \u00fchendatud klientide kohta. <\/p>\n<p><\/p>\n<p>Teave \u00fchendatud klientide kohta on oluline, sest PostgreSQL vaatepunktist on kliendid erinevad. On h\u00e4id kliente ja halbu kliente. <\/p>\n<p><\/p>\n<p>Lihtne n\u00e4ide. Klient, mida ma m\u00f5istan, on rakendus. Rakendus on \u00fchendatud andmebaasi ja saadab sinna kohe oma p\u00e4ringud, andmebaas t\u00f6\u00f6tleb neid ja t\u00e4idab, tulemused tagastatakse kliendile. Need on head ja \u00f5iged kliendid. <\/p>\n<p><\/p>\n<p>M\u00f5nikord juhtub, et klient on \u00fchendatud, hoiab \u00fchendust, kuid ei tee selle samal ajal midagi. Ta on idle olekus. <\/p>\n<p><\/p>\n<p>Kuid on ka halbu kliente. N\u00e4iteks, kui klient \u00fchendub, avab tehingu, teeb midagi andmebaasis ja seej\u00e4rel liigub koodi, et p\u00f6\u00f6rduda v\u00e4lise allika poole v\u00f5i teha seal andmete t\u00f6\u00f6tlemist. Kuid ta ei sule tehingut. Ja tehing j\u00e4\u00e4b andmebaasi rippuma ja hoiab rida lukus. See on halb olukord. Kui rakendus peaks kuskil eksitama (Exception), siis v\u00f5ib tehing j\u00e4\u00e4da avatud v\u00e4ga kauaks. Ja see m\u00f5jutab otseselt PostgreSQLi j\u00f5udlust. PostgreSQL t\u00f6\u00f6tab aeglasemalt. Seet\u00f5ttu on oluline selliseid kliente \u00f5igeaegselt j\u00e4lgida ja nende t\u00f6\u00f6 l\u00f5petada. Samuti on vajalik oma rakendust optimeerida, et sarnaseid olukordi v\u00e4ltida. <\/p>\n<p><\/p>\n<p>Teised halvad kliendid on ootel kliendid. Kuid nad muutuvad halbadeks asjaolude t\u00f5ttu. N\u00e4iteks tavaline seisev tehing: klient v\u00f5ib avada tehingu, v\u00f5tta lukud m\u00f5nele reale, kuid seej\u00e4rel kukub see kuskil koodis ja j\u00e4\u00e4b riputama. Kui teine klient k\u00fcsib samu andmeid, siis ta seisab silmitsi lukustusega, kuna see rippuv tehing juba hoiab lukke m\u00f5nedele vajalikule reale. Ja teine tehing j\u00e4\u00e4b ootama, kuni esimene tehing l\u00f5petatakse v\u00f5i selle administraator sunniviisiliselt suletakse. Seega, ootavad tehingud v\u00f5ivad koguneda ja \u00fcletada andmebaasi \u00fchenduste piiri. Ja kui piir on \u00fcletatud, ei saa rakendus andmebaasi enam kasutada. See on projekti jaoks juba kriitiline olukord. Seet\u00f5ttu tuleb halbu kliente j\u00e4lgida ja neile \u00f5igeaegselt reageerida. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/41eaa8fcb747bf5ca4e0d6d264d1e0ac.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teine n\u00e4ide j\u00e4lgimisest. Ja siin on korralik armatuurlaud. \u00dclemises osas on teave \u00fchenduste kohta. DB connection \u2013 8 t\u00fckki. Ja see on k\u00f5ik. Meil ei ole teavet selle kohta, millised kliendid on aktiivsed, millised kliendid lihtsalt ootavad, ei tee midagi. Ei ole teavet riputatud tehingute ja ootavate \u00fchenduste kohta, st see on lihtsalt number, mis n\u00e4itab \u00fchenduste arvu ja k\u00f5ik. Edasi m\u00f5elge ise.<br \/>\n<img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/553a4b6432c308c0023e49c4a35aa0a1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSeega, et lisada see teave j\u00e4lgimisele, tuleb p\u00f6\u00f6rduda s\u00fcsteemi vaate pg_stat_activity poole. Kui veedate palju aega PostgreSQLis, on see v\u00e4ga hea vaade, mis peaks saama teie s\u00f5braks, kuna see n\u00e4itab hetkeaktiivsust PostgreSQLis, st mis seal toimub. Iga protsessi kohta on eraldi rida, mis n\u00e4itab teavet selle protsessi kohta: milliselt hostilt on \u00fchendus tehtud, kumba kasutajat kasutatakse, millise nimega, millal tehing k\u00e4ivitati, mis p\u00e4ring hetkel k\u00e4ib ja milline p\u00e4ring k\u00e4idi viimati. Seega saame kliendi seisundit hinnata v\u00e4ljaande stat j\u00e4rgi. \u00dctlemisi v\u00f5ib selle v\u00e4ljaande p\u00f5hjal grupeerida ja saada need stat\u2019id, mis andmebaasis on hetkel olemas, ja \u00fchenduste arvu, mis antud stat\u2019iga andmebaasi siseneb. Saadud numbreid saame edastada meie j\u00e4lgimisele ja joonistada neist graafikuid.<br \/>\nSamuti on oluline hinnata tehingu kestvust. Olen juba \u00f6elnud, et on oluline hinnata vakumeid, kuid tehinguid hinnatakse samamoodi. On v\u00e4ljaanded xact_start ja query_start. Need, \u00fctleme nii, n\u00e4itavad tehingu ja p\u00e4ringu k\u00e4ivitamise aega. Me v\u00f5tame funktsiooni now(), mis n\u00e4itab praegust ajam\u00e4rki, ja lahutame tehingu ja p\u00e4ringu timestamp\u2019id. Nii saame tehingu kestvuse ja p\u00e4ringu kestvuse. <\/p>\n<p><\/p>\n<p>Kui n\u00e4eme pikki tehinguid, peame need l\u00f5petama. <strong>OLTP-koormuse korral on pikad tehingud need, mis kestavad \u00fcle 1-2-3 minuti.<\/strong>. <strong>OLAP-koormuse korral on pikad tehingud normaalsed, kuid kui need kestavad \u00fcle kahe tunni, siis on see samuti m\u00e4rk sellest, et kuskil on meil moonutus.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/1f3caea3077c0c5c2bcf60ee2f1be884.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKui kliendid on andmebaasiga \u00fchendatud, hakkavad nad t\u00f6\u00f6tama meie andmetega. Nad p\u00f6\u00f6rduvad tabelite poole, nad p\u00f6\u00f6rduvad indekste poole, et saada andmeid tabelist. On oluline hinnata, kuidas kliendid nende andmetega t\u00f6\u00f6tavad.<\/p>\n<p><\/p>\n<p>See on vajalik meie t\u00f6\u00f6koormuse hindamiseks ja selleks, et m\u00f5ista, millised tabelid on k\u00f5ige \"kuumemad\". N\u00e4iteks on see kasulik olukordades, kus soovime \"kuumad\" tabelid paigutada kiirele SSD salvestusse. Samas v\u00f5ivad vanad arhiivtabelid, mida me enam ei kasuta, minna \u201ek\u00fclmale\u201c arhiivi SATA-diskidele, kus nad v\u00f5ivad j\u00e4\u00e4da ootele, ning nendele juurdep\u00e4\u00e4s toimub vajadusel. <\/p>\n<p><\/p>\n<p>See on samuti kasulik erinevate anomaaliate tuvastamiseks p\u00e4rast uute versioonide ja juurutuste v\u00e4ljatoomist. Oleta, et projekt tutvustas uut funktsiooni. N\u00e4iteks lisati uus funktsionaalsus andmebaasiga t\u00f6\u00f6tamiseks. Kui me koostame tabelite kasutamise graafikud, saame nende graafikute pealt kergesti tuvastada need anomaaliad, n\u00e4iteks uuenduste (update) v\u00f5i kustutuste (delete) t\u00f5usud. See on v\u00e4ga selgelt j\u00e4lgitav.<\/p>\n<p><\/p>\n<p>Samuti saab tuvastada anomaaliaid \"kallistatud\" statistikast. Mida see t\u00e4hendab? PostgreSQL-il on v\u00e4ga tugev ja hea p\u00e4ringute planeerija. Arendajad p\u00fchendavad palju aega selle arendamisele. Kuidas see t\u00f6\u00f6tab? Heade plaanide koostamiseks kogub PostgreSQL teatud ajavahemike j\u00e4rel statistikat tabelite andmete jaotuse kohta. See sisaldab k\u00f5ige sagedasemaid v\u00e4\u00e4rtusi: unikaalsete v\u00e4\u00e4rtuste arv, teave NULL v\u00e4\u00e4rtuste kohta tabelis ja palju muud teavet. <\/p>\n<p><\/p>\n<p>Selle statistika p\u00f5hjal koostab planeerija mitu p\u00e4ringut, valib k\u00f5ige optimaalse v\u00f5i sobivama ning kasutab seda p\u00e4ringute plaani p\u00e4ringu t\u00e4itmiseks ja andmete tagastamiseks. <\/p>\n<p><\/p>\n<p>Kuid v\u00f5ib juhtuda, et statistika \"ujub\". Tabelis on andmete kvaliteet ja hulk muutunud, kuid statistika ei ole selle ajaga uuendatud. Kujundatud plaanid v\u00f5ivad osutuda mitte-optimaalseteks. Ja kui meie plaanid osutuvad mitte-optimaalseteks kogutud j\u00e4lgimise p\u00f5hjal, tabelite osas, saame n\u00e4ha neid anomaaliaid. N\u00e4iteks on kusagil andmed kvaliteetselt muutunud ja koos indeksi kasutamisega kasutatakse j\u00e4rjestikku tabeli l\u00e4bilugemist, st kui p\u00e4ring peab tagastama vaid 100 rida (on seatud piirm\u00e4\u00e4r limit 100), siis selle p\u00e4ringu jaoks teostatakse t\u00e4ielik l\u00e4bilugemine. Ja see m\u00f5jutab alati tulemuslikkust v\u00e4ga negatiivselt. <\/p>\n<p><\/p>\n<p>Ja saame seda j\u00e4lgida monitoorimises. Saame vaadata sellele p\u00e4ringule, teostada explain'i, koguda statistikat, luua uue t\u00e4iendava indeksi ja reageerida sellele probleemile. Seet\u00f5ttu on see oluline. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/a586b45241efc73b5c59b8e21b9c2629.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teine monitoorimise n\u00e4ide. Ma arvan, et paljud tunnevad seda, kuna see on v\u00e4ga populaarne. Kes kasutab seda oma projektides? <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/prometheus\/prometheus\">Prometheus<\/a><\/noindex>? \u0410 \u043a\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 Prometheus? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0435\u0441\u0442\u044c \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 PostgreSQL \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wrouesnel\/postgres_exporter\">postgres_exporter<\/a><\/noindex> Prometheus. Kuid siin on \u00fcks halb pool. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/5a9de42b009c7bb333ee72f01bb46fb9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>On mitmeid graafikuid. Ja m\u00f5\u00f5t\u00fchikuna on n\u00e4idatud baite, st seal on 5 graafikut: Insert data, Update data, Delete data, Fetch data ja Return data. Kuid statistika PostgreSQL-is tagastab andmed tuple'is (rea kujul). Seet\u00f5ttu on need graafikud v\u00e4ga hea viis teie t\u00f6\u00f6koormuse alahindamiseks mitmekordselt, k\u00fcmnetesse kordades, sest tuple ei ole bait, tuple on rida, mis on palju baite ja on alati muutuva pikkusega. Seega, t\u00f6\u00f6koormuse arvutamine baidides kasutades tuplesid on ebarealistlik \u00fclesanne v\u00f5i v\u00e4ga keeruline. Seet\u00f5ttu, kui kasutate armatuurlauda v\u00f5i sisseehitatud monitooringut, on alati oluline m\u00f5ista, et see t\u00f6\u00f6tab \u00f5igesti ja tagastab teile t\u00e4pselt hinnatud andmed. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/697ca274c58466beec45614e9d57bda7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas saada statistikat nende tabelite kohta? Selleks on PostgreSQL-is teatud vaate perede r\u00fchm. Peamine vaade on <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/10\/monitoring-stats.html\">pg_stat_user_tables<\/a><\/noindex>. User_tables \u2013 see t\u00e4hendab, et tabelid on loodud kasutaja nimel. Vastandina on s\u00fcsteemivaatet, mida kasutab PostgreSQL ise. Ja on kokkuv\u00f5tte tabel Alltables, mis h\u00f5lmab nii s\u00fcsteemis kui ka kasutaja tabelit. Saate tugineda \u00fcksk\u00f5ik millisele, mis teile rohkem meeldib.<\/p>\n<p><\/p>\n<p>\u00dclaltoodud v\u00e4ljade p\u00f5hjal on v\u00f5imalik hinnata insertide, update'ide ja delete'ide arvu. See armatuurlaud, mida ma kasutasin, kasutab just neid v\u00e4lju t\u00f6\u00f6koormuse omaduste hindamiseks. Seet\u00f5ttu saame ka neid kasutada. Kuid tuleb meeles pidada, et need on tuples, mitte baidid, seega ei saa me lihtsalt v\u00f5tta ja teha seda baidideks.<\/p>\n<p><\/p>\n<p>Nende andmete p\u00f5hjal saame luua nn TopN-tabeleid. N\u00e4iteks Top-5, Top-10. Ja saab j\u00e4lgida neid kuumaid tabeleid, mida kasutatakse rohkem kui teisi. N\u00e4iteks 5 \"kuuma\" tabelit sisestamise osas. Ja nende TopN-tabelite p\u00f5hjal hindame oma t\u00f6\u00f6koormust ja suudame hinnata t\u00f6\u00f6koormuse piike p\u00e4rast erinevaid v\u00e4ljalaskmisi, uuendusi ja deploy'e. <\/p>\n<p><\/p>\n<p>Samuti on oluline hinnata tabeli suurust, sest m\u00f5nikord arendajad kasutavad uut funktsionaalsust ning meie tabelid hakkavad suurendama oma mahtu, kuna otsustatakse lisada veel andmeid, kuid ei prognoosita, kuidas see m\u00f5jutab andmebaasi suurust. Sellised olukorrad v\u00f5ivad meie jaoks olla \u00fcllatuseks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/9b964b332210c5bef77f99dfa386a2b2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja n\u00fc\u00fcd on teil \u00fcks v\u00e4ike k\u00fcsimus. Milline k\u00fcsimus tekib, kui m\u00e4rkate andmebaasi serveri koormust? Milline j\u00e4rgmine k\u00fcsimus te tahate esitada? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/b72286a22e6e3ad0f1b6c8a478cf65b3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aga tegelikult tekib j\u00e4rgnev k\u00fcsimus. Millised p\u00e4ringud p\u00f5hjustavad koormust? Ehk ei ole huvitav vaadata protsesse, mis koormust tekitavad. On selge, et kui host on andmebaasiga, siis seal t\u00f6\u00f6tab andmebaas ja seal ongi ainult andmebaasid. Kui me avame Top'i, siis n\u00e4eme seal PostgreSQL protsesside nimekirja, mis midagi teevad. Top'ist ei ole selge, mida nad teevad. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/3d8c06dfe22d5fe93427055c39925a2a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Seega tuleb tuvastada need p\u00e4ringud, mis p\u00f5hjustavad k\u00f5rgeima koormuse, kuna p\u00e4ringute h\u00e4\u00e4lestamine toob tavaliselt rohkem kasu kui PostgreSQL v\u00f5i operatsioonis\u00fcsteemi konfigureerimine v\u00f5i isegi riistvara h\u00e4\u00e4lestamine. Minu hinnangul on see umbes 80-85-90%. Ja seda on palju kiiremini teha. Kiirem on parandada p\u00e4ringut kui konfigureerida, planeerida taask\u00e4ivitust, eriti kui andmebaasi ei saa taask\u00e4ivitada, v\u00f5i lisada riistvara. Lihtsam on kuskil p\u00e4ringut \u00fcmber kirjutada v\u00f5i lisada indeks, et saada parem tulemus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/f41c9f7596f527a4403c5a5981f3a0d2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSeega on vajalik j\u00e4lgida p\u00e4ringute adekvaatsust. V\u00f5tame teise n\u00e4ite j\u00e4lgimisest. Ja siin tundub ka imeline j\u00e4lgimine. On teave replikatsiooni, l\u00e4bilaskev\u00f5ime, lukustuste, ressursside kasutamise kohta. K\u00f5ik on suurep\u00e4rane, kuid puudub teave p\u00e4ringute kohta. Ei ole selge, millised p\u00e4ringud meie andmebaasis t\u00e4idetakse, kui kaua nad kestavad ja kui palju neid on. Me peame alati j\u00e4lgimises olema selle teabe olemasolu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/d92327c0486336105fb9a8005b6032ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja selle teabe saamiseks saame kasutada pg_stat_statements moodulit. Selle alusel on v\u00f5imalik koostada erinevaid graafikuid. N\u00e4iteks saame saada teavet k\u00f5ige sagedasemate p\u00e4ringute kohta, st nende p\u00e4ringute kohta, mis t\u00e4idetakse k\u00f5ige rohkem. Jah, p\u00e4rast juurutamisi on samuti v\u00e4ga kasulik sellele pilku heita ja aru saada, kas p\u00e4ringutes on toimunud m\u00f5ni j\u00e4rsk t\u00f5us. <\/p>\n<p><\/p>\n<p>Saame j\u00e4lgida k\u00f5ige pikemaid p\u00e4ringuid, st neid p\u00e4ringuid, mis t\u00e4idetakse k\u00f5ige kauem. Need kasutavad protsessorit ja nad tarbivad sisendi-v\u00e4ljundi ressursse. Saame neid samuti hinnata total_time, mean_time, blk_write_time ja blk_read_time v\u00e4ljade kaudu. <\/p>\n<p><\/p>\n<p>Saame hinnata ja j\u00e4lgida k\u00f5ige ressursimahukamaid p\u00e4ringuid, mis loevad kettalt, kas kasutavad m\u00e4lu v\u00f5i vastupidi, genereerivad kirjutuskoormust.<\/p>\n<p><\/p>\n<p>Saame hinnata ka k\u00f5ige heldemaid p\u00e4ringuid. Need on p\u00e4ringud, mis tagastavad suurt hulka ridu. N\u00e4iteks v\u00f5ib see olla m\u00f5ni p\u00e4ring, millele ei pandud piiri ja see tagastab lihtsalt kogu tabeli sisu v\u00f5i p\u00e4ringute sisu, mis on k\u00fcsitud tabelitest.<\/p>\n<p><\/p>\n<p>Samuti on v\u00f5imalik j\u00e4lgida p\u00e4ringuid, mis kasutavad ajutisi faile v\u00f5i ajutisi tabeleid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/7b33a882f23dc99ae5b6d158eaffdad5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJa meil on j\u00e4\u00e4nud taustaprotsessid. Taustaprotsessid, eelk\u00f5ige kontrollpunktid v\u00f5i neid nimetatakse ka kontrollpunktideks, on autovakuu ja replikatsioon. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/8fb2f921b60bd25053896155c90d7e53.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teine n\u00e4ide j\u00e4lgimisest. Vasakul on hooldushulga vahekaart, l\u00e4heme sinna ja loodame n\u00e4ha midagi kasulikku. Kuid siin on vaid vakkuumi ja statistika kogumise t\u00f6\u00f6aeg, mitte rohkem. See on v\u00e4ga vaene teave, seet\u00f5ttu on alati oluline omada teavet selle kohta, kuidas meie andmebaasi taustaprotsessid toimivad ja kas nende t\u00f6\u00f6 on tekitanud probleeme. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/137acdb66afc49d0a61d74581bf51b39.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui vaatame kontrollpunkte, siis tuleb meeles pidada, et kontrollpunktid kirjutavad \u201er\u00e4pased\u201c lehed killustatud m\u00e4lust kettale ja loovad seej\u00e4rel kontrollpunkti. Ja see kontrollpunkt v\u00f5ib hiljem kasutada punktina taastamiseks, kui PostgreSQL peaks ootamatult sulgema. <\/p>\n<p><\/p>\n<p>Seega, et k\u00f5ik \"r\u00e4past\" lehte kettale kirjutada, on vajalik teatud kirjutamise maht. Ja tavaliselt on s\u00fcsteemides, kus on suur m\u00e4lumaht, see v\u00e4ga suur. Ja kui meil on kontrollpunktid v\u00e4ga sageli l\u00fchikese aja jooksul, siis kettasuuruse tootlikkus langeb oluliselt. Ja kliendi p\u00e4ringud kannatavad ressursside nappuse all. Nad v\u00f5itlevad ressursside nimel ja neil puudub tootlikkus. <\/p>\n<p><\/p>\n<p>Seega, kaudu pg_stat_bgwriter saame nimetatud valdkondade kaudu j\u00e4lgida tekkivate kontrollpunktide arvu. Ja kui meil on teatud ajavahemiku jooksul (10-15-20 minuti jooksul, pool tundi) v\u00e4ga palju kontrollpunkte, n\u00e4iteks 3-4-5, siis see v\u00f5ib juba olla probleem. Ja tuleb vaadata andmebaasi, vaadata konfiguratsiooni, mis p\u00f5hjustab sellist kontrollpunktide hulga. V\u00f5ib-olla toimub mingisugune suur kirjutamine. T\u00f6\u00f6kohustuse p\u00f5hjal saame juba hinnata, kuna meil on t\u00f6\u00f6koormuse graafikud juba lisatud. Me saame juba seadistada kontrollpunktide parameetreid ja teha nii, et need ei m\u00f5juta p\u00e4ringute tootlikkust liiga palju.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/3d86b57d87ec592f307b28ea4efb26ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ma tulen taas autovacuum'i juurde, sest see on asi, nagu ma juba \u00fctlesin, mis v\u00f5ib oluliselt m\u00f5jutada nii k\u00f5vaketaste kui ka p\u00e4ringute tootlikkust, seega on alati oluline hinnata autovacuum'i arvu. <\/p>\n<p><\/p>\n<p>Andmebaasis on autovacuum'i t\u00f6\u00f6meeste arv piiratud. Vaikimisi on neid kolm, seega kui meil on kogu aeg kolm t\u00f6\u00f6meest andmebaasis, t\u00e4hendab see, et meie autovacuum on vale seadistusega, limiidid tuleb t\u00f5sta, autovacuum'i seadeid tuleb \u00fcle vaadata ja minna konfiguratsiooni.<br \/>\nOluline on hinnata, millised autovacuum'i t\u00f6\u00f6tajad meil on. Kas see on k\u00e4ivitatud kasutaja poolt, DBA tuli ja k\u00e4ivitas k\u00e4sitsi mingisuguse autovacuum'i, ja see tekitas koormuse. Meil tekkis m\u00f5ni probleem. V\u00f5i on see autovacuum'i hulk, mis keerab tehingute loendit. M\u00f5nede PostgreSQL versioonide jaoks on need v\u00e4ga rasked autovacuum'id. Ja need v\u00f5ivad kergesti m\u00f5jutada tootlikkust, kuna nad loevad kogu tabeli t\u00e4ielikult, skaneerivad k\u00f5ik plokid selles tabelis. <\/p>\n<p><\/p>\n<p>Ja, ja ja vaak v\u00f5i jooksul. Kui meil on pikad vaakumid, mis t\u00f6\u00f6tavad v\u00e4ga kaua, siis see t\u00e4hendab, et peaksime uuesti vaatama vaakumi konfiguratsiooni ja v\u00f5ib-olla selle seadeid \u00fcle vaatama. Sest v\u00f5ib tekkida olukord, kus vaakum t\u00f6\u00f6tab tabeli kallal kaua (3-4 tundi), kuid selle t\u00f6\u00f6 jooksul on tabelisse kogunenud taas suur hulk surnud ridu. Ja niipea kui vaakum l\u00f5petab, peab see tabelit uuesti vaakumeerima. Ja me saame olukorra \u2013 l\u00f5putu vaakum. Ja sellisel juhul ei suuda vaakum oma t\u00f6\u00f6d t\u00e4ita ning tabelid hakkavad j\u00e4rk-j\u00e4rgult suurenenud m\u00f5\u00f5tmeid omandama, kuigi kasulik andmemaht j\u00e4\u00e4b samaks. Seet\u00f5ttu vaatame pikade vaakumite korral alati konfiguratsiooni ja p\u00fc\u00fcame seda optimeerida, kuid samas mitte kannatada kliendi p\u00e4ringute j\u00f5udluse all. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/bf109b53e0ad70bbb3fba727149e5086.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Praegu ei ole praktiliselt \u00fchtegi PostgreSQL installatsiooni, kus ei oleks voogedastust. Replikatsioon on andmete edastamise protsess meistrilt kopeerimisele.<\/p>\n<p><\/p>\n<p>Replikatsioon PostgreSQL-is on korraldatud l\u00e4bi tehinguajaloos. Meister genereerib tehinguajaloo. Tehinguajalugu edastatakse v\u00f5rgu\u00fchenduse kaudu kopeerimisele, seej\u00e4rel kopeerimisel see taastatakse. K\u00f5ik on lihtne. <\/p>\n<p><\/p>\n<p>Seega kasutatakse replikatsiooni viivituse j\u00e4lgimiseks vaadet pg_stat_replication. Kuid see ei ole nii lihtne. Versioonis 10 on vaade l\u00e4bi teinud mitmeid muudatusi. Esiteks, m\u00f5ned v\u00e4ljad on \u00fcmber nimetatud. Ja m\u00f5ned v\u00e4ljad on lisatud. 10. versioonis on ilmunud v\u00e4ljad, mis v\u00f5imaldavad hinnata replikatsiooni viivitust sekundites. See on v\u00e4ga mugav. Enne versiooni 10 oli v\u00f5imalik hinnata replikatsiooni viivitust baitides. See v\u00f5imalus j\u00e4i alles ka 10. versioonis, st saate valida, mis teile mugavam on \u2013 hinnata viivitust baitides v\u00f5i sekundites. Paljud teevad m\u00f5lemat.<\/p>\n<p><\/p>\n<p>Kuid siiski, et hinnata replikatsiooni viivitust, on vaja teada ajalugu tehingus. Ja need tehinguajaloo positsioonid ongi vaates pg_stat_replication. \u00dctleme, et saame pg_xlog_location_diff() funktsiooni kaudu v\u00f5tta kaks punkti tehinguajaloos. Arvutada nende vahelise erinevuse ja saada replikatsiooni viivitus baitides. See on v\u00e4ga mugav ja lihtne. <\/p>\n<p><\/p>\n<p>10. versioonis nimetati see funktsioon \u00fcmber pg_wal_lsn_diff(). \u00dcldiselt asendati k\u00f5ikides funktsioonides, vaadatud, utiliitides, kus esines s\u00f5na \u00abxlog\u00bb, see s\u00f5naga \u00abwal\u00bb. See kehtib nii vaadatud kui ka funktsioonide puhul. See on selline uuendus. <\/p>\n<p><\/p>\n<p>10. versioonis lisandus ka rida, mis n\u00e4itab konkreetset viivitust. Need on write lag, flush lag, replay lag. Teisis\u00f5nu, neid asju on oluline j\u00e4lgida. Kui n\u00e4eme replikatsiooni viivitust, tuleb uurida, miks see ilmus, kust see tuli ja probleem lahendada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/5b29d7519f28da63446b741024a68bb8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u00fcsteemi m\u00f5\u00f5dikud on enamasti korras. Iga j\u00e4lgimise alguses alustatakse s\u00fcsteemi m\u00f5\u00f5dikutega. Need on protsessorite, m\u00e4lu, swap, v\u00f5rgu ja ketta kasutuse m\u00e4\u00e4r. Siiski ei ole seal palju parameetreid vaikimisi. <\/p>\n<p><\/p>\n<p>Kui protsesside kasutus on korras, siis ketta kasutuses on probleeme. Reeglina lisavad j\u00e4lgimisriistade arendajad teavet l\u00e4bilaskvuse kohta. See v\u00f5ib olla iops v\u00f5i baitides. Kuid nad unustavad latentsuse ja ketta seadmete kasutuse. Need on olulisemad parameetrid, mis v\u00f5imaldavad hinnata, kui palju meie kettad on koormatud ja kui palju nad peatumisi tekitavad. <strong>Kui meil on k\u00f5rge latentsus, t\u00e4hendab see, et kettaga on mingeid probleeme. Kui meil on k\u00f5rge kasutus, t\u00e4hendab see, et kettad ei suuda hakkama saada.<\/strong> Need on kvaliteetsemad omadused kui l\u00e4bilaskvus.<\/p>\n<p><\/p>\n<p>Kuigi seda statistikat saab ka failis\u00fcsteemist \/proc, nagu seda tehakse protsessorite kasutuse puhul. Miks seda teavet ei lisata j\u00e4lgimistesse, ma ei tea. <strong>Siiski on oluline, et see oleks teie j\u00e4lgimises.<\/strong> <\/p>\n<p><\/p>\n<p>Sama kehtib v\u00f5rguinterfeisside kohta. <strong>V\u00f5rgu l\u00e4bilaskvuse kohta on teavet pakettide ja baitide kaupa, kuid siiski puudub teave latentsuse ja kasutuse kohta, kuigi see on samuti kasulik teave.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/3b9b2c300bcc8a30e1b6fae1a55e6f21.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Igal j\u00e4lgimisel on puudused. \u00dcksk\u00f5ik millist j\u00e4lgimist te v\u00f5tate, see ei vasta alati mingitele kriteeriumidele. Siiski arenevad nad, lisatakse uusi funktsioone, uusi asju, seega valige midagi ja t\u00e4iustage seda. <\/p>\n<p><\/p>\n<p>Ja et t\u00e4iustada, tuleb alati teada, mida annab antud statistika ja kuidas selle abil probleeme lahendada. <\/p>\n<p><\/p>\n<p>Ja paar v\u00f5tmehetke:<\/p>\n<p><\/p>\n<ul>\n<li>Alati on oluline j\u00e4lgida saadavust, et teil oleksid juhtpaneelid, kust kiiresti hinnata, kas andmebaas on korras. <\/li>\n<li>Alati on oluline teada, kes kliendid t\u00f6\u00f6tavad teie andmebaasi kallal, et filtreerida v\u00e4lja halvad kliendid ja neist vabaneda. <\/li>\n<li>Oluline on hinnata, kuidas need kliendid andmetega t\u00f6\u00f6tavad. Tuleb omada arusaama oma t\u00f6\u00f6koormusest.<\/li>\n<li>Oluline on hinnata, kuidas see t\u00f6\u00f6koormus tekib, milliste p\u00e4ringute kaudu. Te saate hinnata p\u00e4ringuid, optimeerida neid, refaktoreerida, luua neile indekseid. See on v\u00e4ga oluline.<\/li>\n<li>Taustprotsessid v\u00f5ivad negatiivselt m\u00f5jutada kliendi p\u00e4ringuid, seega on oluline j\u00e4lgida, et need ei kasutaks liiga palju ressursse.<\/li>\n<li>S\u00fcsteemilised m\u00f5\u00f5dud v\u00f5imaldavad teil koostada plaani skaleerimiseks, suurendades oma serverite v\u00f5imsust, seega on oluline ka neid j\u00e4lgida ja hinnata.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL j\u00e4lgimise alused. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/02\/7ece1ec5ffc67d68697c0932a2fbf7db.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui see teema teid huvitab, siis v\u00f5ite tutvuda nende linkidega.<br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/bit.do\/stats_collector\">http:\/\/bit.do\/stats_collector<\/a><\/noindex> \u2013 see on ametlik dokumentatsioon statistika kogumise kohta. Seal on kirjeldus k\u00f5igist statistika vaadetest ja k\u00f5igist v\u00e4ljadest. Te saate neid lugeda, m\u00f5ista ja anal\u00fc\u00fcsida. Ja juba nende p\u00f5hjal koostada oma graafikud, lisada oma j\u00e4lgimisse. <\/p>\n<p><\/p>\n<p>P\u00e4ringute n\u00e4ited:<br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/bit.do\/dataegret_sql\">http:\/\/bit.do\/dataegret_sql<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/bit.do\/lesovsky_sql\">http:\/\/bit.do\/lesovsky_sql<\/a><\/noindex><\/p>\n<p><\/p>\n<p>See on meie ettev\u00f5tte repositoorium ja minu isiklik. Neis on n\u00e4ited p\u00e4ringutest. Seal pole p\u00e4ringuid, nagu select* from midagi. Seal on juba valmis p\u00e4ringud, kus on kasutatud liiteid ja huvitavaid funktsioone, mis v\u00f5imaldavad toorandmetest luua loetavaid ja mugavaid v\u00e4\u00e4rtusi, st need on baitides, ajas. Te saate neid k\u00e4sitsi uurida, vaadata, anal\u00fc\u00fcsida, lisada oma j\u00e4lgimisse, koostada nende p\u00f5hjal oma j\u00e4lgimisse. <\/p>\n<p><\/p>\n<h4 id=\"voprosy\">K\u00fcsimused<\/h4>\n<p><\/p>\n<p>K\u00fcsimus: Te \u00fctlesite, et te ei reklaami kaubam\u00e4rke, aga mind ikkagi huvitab \u2013 milliseid juhtpaneele te oma projektides kasutate?<br \/>\nVastus: Erinevalt. Juhtub, et me tuleme kliendi juurde ja tal on juba oma j\u00e4lgimine olemas. Ja me anname kliendile n\u00f5u, mida oma j\u00e4lgimisele lisada. Halvim on olukord Zabbi\u0445iga. Sest tal pole v\u00f5imalust koostada TopN-graafikuid. Me kasutame ise <noindex><a rel=\"nofollow\" href=\"https:\/\/okmeter.io\/\">Okmeter<\/a><\/noindex>, sest me andsime neile n\u00f5u j\u00e4lgimise osas. Nad koostasid PostgreSQL-i j\u00e4lgimise meie spetsifikatsiooni p\u00f5hjal. Ma kirjutan oma isiklikku projekti, mis kogub andmeid Prometheuse kaudu ja joonistab need v\u00e4lja. <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/\">Grafana<\/a><\/noindex>. Mul on \u00fclesanne luua Prometheus'esse oma eksporter ja hiljem k\u00f5ik joonistada Grafanas.<\/p>\n<p><\/p>\n<p>K\u00fcsimus: Kas on olemas mingeid AWR-aruannete v\u00f5i ... aggregeerimise analooge? Kas olete teadlik millestki sellisest?<br \/>\nVastus: Jah, ma tean, mis on AWR, see on p\u00e4ris \u00e4ge asi. Praegusel hetkel on erinevaid lahendusi, mis rakendavad enam-v\u00e4hem j\u00e4rgmist mudelit. Teatud aja intervallide j\u00e4rel kirjutatakse m\u00f5ned aluseks olevad andmed samasse PostgreSQL-i v\u00f5i eraldi andmehoidlasse. Neid saab internetist otsida, need on olemas. \u00dcks selle asja arendajatest on sql.ru foorumis PostgreSQL teemas, teda v\u00f5ib sealt \u00fcles leida. Jah, selliseid lahendusi on, neid saab kasutada. Peale selle <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lesovsky\/pgcenter\">pgCenter<\/a><\/noindex> ma ka kirjutan asja, mis v\u00f5imaldab teha sama.<\/p>\n<p><\/p>\n<p>P.S.1 Kui kasutate postgres_exporter'it, siis missugust armatuurlauad te kasutate? Need on mitmed. Need on juba vananenud. Kas kogukond v\u00f5iks luua uuendatud malli?<\/p>\n<p><\/p>\n<p>P.S.2 Eemaldasin pganalyze, kuna see on patenteeritud SaaS, mis keskendub tulemuslikkuse j\u00e4lgimisele ja automaatsetele seadistamise soovitustele.<\/p>\n<p class=\"for_users_only_msg\">Ainult registreeritud kasutajad saavad k\u00fcsitluses osaleda. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Logige sisse<\/a><\/noindex>, palun.<\/p>\n<h2 class=\"default-block__polling-title\">Millist self-hosted PostgreSQL'i j\u00e4lgimist (armatuurlauaga) peate parimaks?<\/h2>\n<ul class=\"poll-result\">\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent  poll-result__data-percent_winner\">30,0%<\/strong>Zabbix + Alexei Lesovski t\u00e4iendused v\u00f5i zabbix 4.4 v\u00f5i libzbxpgsql + zabbix libzbxpgsql + zabbix3<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/github.com\/lesovsky\/pgcenter0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/github.com\/pg-monz\/pg_monz0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">20,0%<\/strong>https:\/\/github.com\/cybertec-postgresql\/pgwatch22<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">20,0%<\/strong>https:\/\/github.com\/postgrespro\/mamonsu2<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/www.percona.com\/doc\/percona-monitoring-and-management\/conf-postgres.html0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">10,0%<\/strong>pganalyze on patenteeritud SaaS \u2014 ei saa kustutada.<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">10,0%<\/strong>https:\/\/github.com\/powa-team\/powa1<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/github.com\/darold\/pgbadger0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/github.com\/darold\/pgcluu0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/github.com\/zalando\/PGObserver0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">10,0%<\/strong>https:\/\/github.com\/spotify\/postgresql-metrics1<\/p>\n<\/li>\n<\/ul>\n<p>    H\u00e4\u00e4letas 10 kasutajat. Peatus 26 kasutajat.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/486710\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0438\u0437 Data Egret &quot;\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL&quot; \u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442, \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435; \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435, \u043a\u0430\u043a \u0438\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438 \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u043e\u043a\u043b\u0430\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-56075","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0438\u0437 Data Egret &quot;\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL&quot; \u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u043e\u0439.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL. \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0438\u0437 Data Egret &quot;\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL&quot; \u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u043e\u0439.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-03T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:04:16+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47PostgreSQL j\u00e4lgimise alused. Alexei Lesovski | ProHoster","description":"Soovin tutvuda Alexei Lesovski ettekande \"PostgreSQL j\u00e4lgimise alused\" \u00fclevaatega. Selles ettekandes r\u00e4\u00e4gib Alexei Lesovski PostgreSQLi peamistest punktidest.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL. \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 | ProHoster","og:description":"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0438\u0437 Data Egret &quot;\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL&quot; \u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u043e\u0439.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-03T21:00:00+00:00","article:modified_time":"2020-02-18T11:04:16+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"56075","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:31:43","updated":"2022-09-29 10:21:06","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/56075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=56075"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/56075\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=56075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=56075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=56075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}