{"id":32353,"date":"2019-10-31T21:46:32","date_gmt":"2019-10-31T18:46:32","guid":{"rendered":"https:\/\/prohoster.info\/blog\/monitoring-proizvoditelnosti-zaprosov-postgresql-chast-1-reporting\/"},"modified":"2019-10-31T21:46:32","modified_gmt":"2019-10-31T18:46:32","slug":"monitoring-proizvoditelnosti-zaprosov-postgresql-chast-1-reporting","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/monitoring-proizvoditelnosti-zaprosov-postgresql-chast-1-reporting","title":{"rendered":"Monitorov\u00e1n\u00ed v\u00fdkonu dotaz\u016f PostgreSQL. \u010c\u00e1st 1 \u2014 reportov\u00e1n\u00ed","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>In\u017een\u00fdr \u2014 v p\u0159ekladu z latiny \u2014 inspirov\u00e1n.<br \/>\nIn\u017een\u00fdr dok\u00e1\u017ee v\u0161e. (c) R.Diesel.<br \/>\n<i>Epigrafy.<\/i><br \/>\n<img decoding=\"async\" alt=\"Monitorov\u00e1n\u00ed v\u00fdkonu dotaz\u016f PostgreSQL. \u010c\u00e1st 1 \u2014 reportov\u00e1n\u00ed\" src=\"\/wp-content\/uploads\/2019\/04\/9a2640267ea05006b94e03642b864ddc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nebo p\u0159\u00edb\u011bh o tom, pro\u010d by si administr\u00e1tor datab\u00e1z\u00ed m\u011bl p\u0159ipom\u00ednat svou program\u00e1torskou minulost. <\/i><\/p>\n<h2>\u00davod<\/h2>\n<p>\nV\u0161echna jm\u00e9na byla zm\u011bn\u011bna. Shody jsou n\u00e1hodn\u00e9. Materi\u00e1l p\u0159edstavuje v\u00fdhradn\u011b osobn\u00ed n\u00e1zor autora.<\/p>\n<blockquote><p><b>Z\u0159eknut\u00ed se z\u00e1ruk:<\/b> <i>V pl\u00e1novan\u00e9 s\u00e9rii \u010dl\u00e1nk\u016f nebude podrobn\u00fd a p\u0159esn\u00fd popis pou\u017eit\u00fdch tabulek a skript\u016f. Materi\u00e1ly nelze ihned pou\u017e\u00edt \"AS IS\". <br \/>\nZa prv\u00e9, kv\u016fli velk\u00e9mu objemu materi\u00e1lu, <br \/>\nza druh\u00e9 kv\u016fli zam\u011b\u0159en\u00ed na produk\u010dn\u00ed datab\u00e1zi skute\u010dn\u00e9ho z\u00e1kazn\u00edka. <br \/>\nProto budou v \u010dl\u00e1nc\u00edch uvedeny pouze my\u0161lenky a popisy v nejobecn\u011bj\u0161\u00ed podob\u011b. <br \/>\nMo\u017en\u00e1 v budoucnu syst\u00e9m doroste na \u00farove\u0148 zve\u0159ejn\u011bn\u00ed na GitHubu, ale mo\u017en\u00e1 tak\u00e9 ne. \u010cas uk\u00e1\u017ee.<\/i><\/p><\/blockquote>\n<p>\nZa\u010d\u00e1tek p\u0159\u00edb\u011bhu- \u201e<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/icl_services\/blog\/446314\/\">Pamatuje\u0161 si, jak to v\u0161echno za\u010dalo<\/a><\/noindex>\u00bb.<br \/>\nCo se v d\u016fsledku stalo, v nejobecn\u011bj\u0161\u00edch rysech- \u201e<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444988\/\">Synt\u00e9za jako jedna z metod zlep\u0161en\u00ed v\u00fdkonu PostgreSQL<\/a><\/noindex>\u00bb<\/p>\n<h2>Pro\u010d mi to v\u0161echno?<\/h2>\n<p>\nNu\u017ee, za prv\u00e9, abych s\u00e1m nezapomn\u011bl, kdy\u017e vzpom\u00edn\u00e1m na d\u016fchodov\u00e9 kr\u00e1sn\u00e9 chv\u00edle. <br \/>\nZa druh\u00e9, abych systematizoval napsan\u00e9. Nebo\u0165 u\u017e s\u00e1m, n\u011bkdy za\u010d\u00edn\u00e1m t\u00e1paj\u00edc\u00ed a zapom\u00ednat jednotliv\u00e9 \u010d\u00e1sti. <\/p>\n<p>A to nejd\u016fle\u017eit\u011bj\u0161\u00ed \u2014 najednou se m\u016f\u017ee n\u011bkomu hodit a pomoci mu nevynal\u00e9zat kolo a nesb\u00edrat vidle. Jin\u00fdmi slovy, zlep\u0161it svou karmu (ne habrovskou). Nebo\u0165 to nejcenn\u011bj\u0161\u00ed na tomto sv\u011bt\u011b jsou my\u0161lenky. Hlavn\u00ed je naj\u00edt my\u0161lenku. A realizovat my\u0161lenku do reality, to u\u017e je \u010dist\u011b technick\u00e1 z\u00e1le\u017eitost.<\/p>\n<p>Tak za\u010dn\u011bme, pomalu\u2026<\/p>\n<h2>Stanoven\u00ed \u00fakolu.<\/h2>\n<p><\/p>\n<h3>M\u00e1m: <\/h3>\n<p>\nDatab\u00e1ze PostgreSQL (10.5), sm\u00ed\u0161en\u00e9ho typu z\u00e1t\u011b\u017ee (OLTP+DSS), st\u0159edn\u00ed-mal\u00e9 z\u00e1t\u011b\u017ee, um\u00edst\u011bn\u00e1 v cloudu AWS. <br \/>\nMonitoring datab\u00e1ze chyb\u00ed, monitoring infrastruktury je poskytov\u00e1n ve form\u011b standardn\u00edch prost\u0159edk\u016f AWS v minim\u00e1ln\u00ed konfiguraci.<\/p>\n<h3>Po\u017eadov\u00e1no:<\/h3>\n<p>\nMonitorovat v\u00fdkon a stav datab\u00e1ze, naj\u00edt a m\u00edt z\u00e1kladn\u00ed informace pro optimalizaci n\u00e1ro\u010dn\u00fdch dotaz\u016f na DB.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Kr\u00e1tk\u00fd \u00favod nebo anal\u00fdza mo\u017enost\u00ed \u0159e\u0161en\u00ed.<\/h2>\n<p>\nNejprve se pokus\u00edme prozkoumat mo\u017enosti \u0159e\u0161en\u00ed \u00fakolu z pohledu srovn\u00e1vac\u00ed anal\u00fdzy v\u00fdhod a nep\u0159\u00edjemnost\u00ed pro in\u017een\u00fdra, zat\u00edmco prosp\u011bch a ztr\u00e1ty managementu a\u0165 za\u0159\u00edd\u00ed ti, kdo to maj\u00ed ve slu\u017eebn\u00edm pl\u00e1nu.<\/p>\n<h3>Mo\u017enost 1- \u201ePr\u00e1ce na po\u017e\u00e1d\u00e1n\u00ed\u201c<\/h3>\n<p>\nV\u0161e nech\u00e1me tak, jak to je. Pokud z\u00e1kazn\u00edka n\u011bco v funkcionalit\u011b, v\u00fdkonnosti datab\u00e1ze nebo aplikace neuspokojuje, informuje in\u017een\u00fdry DBA prost\u0159ednictv\u00edm e-mailu nebo vytvo\u0159en\u00edm incidentu v ticketovac\u00ed syst\u00e9m. <br \/>\nIn\u017een\u00fdr, kter\u00fd obdr\u017e\u00ed upozorn\u011bn\u00ed, se na probl\u00e9m pod\u00edv\u00e1, navrhne \u0159e\u0161en\u00ed nebo probl\u00e9m odlo\u017e\u00ed na neur\u010dito, doufaje, \u017ee se to n\u011bjak vy\u0159e\u0161\u00ed, a stejn\u011b to brzy zapadne do zapomn\u011bn\u00ed.<br \/>\n<b class=\"spoiler_title\">Pern\u00ed\u010dky a buchty, mod\u0159iny a boule<\/b><b>Pern\u00ed\u010dky a buchty:<\/b><br \/>\n1. Nen\u00ed pot\u0159eba nic zbyte\u010dn\u011b d\u011blat<br \/>\n2. V\u017edy je mo\u017enost vykroutit se a vyhnout se zodpov\u011bdnosti. <br \/>\n3. Spousta \u010dasu, kter\u00fd lze vyu\u017e\u00edt podle vlastn\u00edho uv\u00e1\u017een\u00ed.<br \/>\n<b>Mod\u0159iny a boule:<\/b><br \/>\n1. D\u0159\u00edve nebo pozd\u011bji se z\u00e1kazn\u00edk zamysl\u00ed nad podstatou existence a univerz\u00e1ln\u00ed spravedlnosti na tomto sv\u011bt\u011b a op\u011bt si polo\u017e\u00ed ot\u00e1zku \u2013 za co vlastn\u011b plat\u00edm? D\u016fsledek je v\u017edy stejn\u00fd \u2013 ot\u00e1zka je jen, kdy se z\u00e1kazn\u00edk nud\u00ed a m\u00e1vne rukou na rozlou\u010denou. A krm\u00edtko se vypr\u00e1zdn\u00ed. To je smutn\u00e9.<br \/>\n2. Rozvoj in\u017een\u00fdra \u2013 nula.<br \/>\n3. Obt\u00ed\u017ee p\u0159i pl\u00e1nov\u00e1n\u00ed pr\u00e1ce a z\u00e1t\u011b\u017ee <\/p>\n<h3>Varianta 2 \u2013 \u201eTancujeme s bubny, prod\u00e1v\u00e1me a obouv\u00e1me\u201c<\/h3>\n<p>\n<b>Bod 1<\/b>-Pro\u010d pot\u0159ebujeme monitorovac\u00ed syst\u00e9m, v\u0161echny informace budeme dost\u00e1vat dotazy. Spust\u00edme spoustu r\u016fzn\u00fdch dotaz\u016f na slovn\u00edk dat a dynamick\u00e1 zobrazen\u00ed, zapneme r\u016fzn\u00e9 po\u010d\u00edtadla, shrom\u00e1\u017ed\u00edme v\u0161e do tabulek, ob\u010das jakoby analyzujeme seznamy a tabulky. V\u00fdsledkem jsou hezk\u00e9 nebo m\u00e9n\u011b hezk\u00e9 grafy, tabulky, zpr\u00e1vy. Hlavn\u011b aby toho bylo co nejv\u00edce.<br \/>\n<b>Bod 2<\/b>-Generujeme aktivitu \u2013 spou\u0161t\u00edme anal\u00fdzu v\u0161eho tohoto.<br \/>\n<b>Bod 3<\/b>-P\u0159iprav\u00edme jak\u00fdsi dokument, nazveme ho jednodu\u0161e \u2013 \u201ejak uspo\u0159\u00e1dat datab\u00e1zi\u201c.<br \/>\n<b>Bod 4<\/b>-Z\u00e1kazn\u00edk, vid\u00edc toto kr\u00e1sn\u00e9 mno\u017estv\u00ed graf\u016f a \u010d\u00edsel, z\u016fst\u00e1v\u00e1 v d\u011btsk\u00e9 naivn\u00ed v\u00ed\u0159e \u2013 te\u010f to kone\u010dn\u011b za\u010dne fungovat, brzy. A bez bolestn\u011b se snadno lou\u010d\u00ed se sv\u00fdmi finan\u010dn\u00edmi prost\u0159edky. Management je tak\u00e9 p\u0159esv\u011bd\u010den \u2013 na\u0161i in\u017een\u00fd\u0159i pracuj\u00ed skv\u011ble. Z\u00e1t\u011b\u017e je na maximu. <br \/>\n<b>Bod 5<\/b>-Pravideln\u011b opakovat Bod 1.<br \/>\n<b class=\"spoiler_title\">Pern\u00ed\u010dky a buchty, mod\u0159iny a boule<\/b><b>Pern\u00ed\u010dky a buchty: <\/b><br \/>\n1. \u017divot mana\u017eer\u016f a in\u017een\u00fdr\u016f \u2013 je jednoduch\u00fd, p\u0159edv\u00eddateln\u00fd a pln\u00fd aktivity. V\u0161echno hu\u010d\u00ed, v\u0161ichni jsou zanepr\u00e1zdn\u011bni. <br \/>\n2. \u017divot z\u00e1kazn\u00edka tak\u00e9 nen\u00ed \u0161patn\u00fd \u2013 v\u017edy v\u011b\u0159\u00ed, \u017ee je pot\u0159eba si trochu po\u010dkat a v\u0161echno se sprav\u00ed. Nen\u00ed to opraveno, no co, to je nespravedliv\u00fd sv\u011bt, v p\u0159\u00ed\u0161t\u00edm \u017eivot\u011b \u2013 m\u00e1 \u0161t\u011bst\u00ed.<br \/>\n<b>Mod\u0159iny a boule:<\/b><br \/>\n1. D\u0159\u00edve \u010di pozd\u011bji se najde pohotov\u011bj\u0161\u00ed poskytovatel podobn\u00e9 slu\u017eby, kter\u00fd ud\u011bl\u00e1 tot\u00e9\u017e, ale o n\u011bco levn\u011bji. A pokud je v\u00fdsledek stejn\u00fd, pro\u010d platit v\u00edc. Co\u017e op\u011bt povede k vymizen\u00ed zdroje ob\u017eivy.<br \/>\n2. Je to nudn\u00e9. Tak nudn\u00e9 jako jak\u00e1koli m\u00e1lo smyslupln\u00e1 \u010dinnost.<br \/>\n3. Stejn\u011b jako v p\u0159edchoz\u00ed variant\u011b \u2014 \u017e\u00e1dn\u00fd rozvoj. Ale pro in\u017een\u00fdra je nev\u00fdhoda v tom, \u017ee na rozd\u00edl od prvn\u00edho variantu je tu pot\u0159eba neust\u00e1le generovat datab\u00e1zi. A to bere \u010das. Kter\u00fd by se dal l\u00e9pe vyu\u017e\u00edt pro sebe. Proto\u017ee o sebe se nikdo nepostar\u00e1, ostatn\u00edm je to jedno.<\/p>\n<h3>Varianta 3 \u2013 Nen\u00ed t\u0159eba vym\u00fd\u0161let kolo, sta\u010d\u00ed si ho koupit a jezdit.<\/h3>\n<p>\nIn\u017een\u00fd\u0159i jin\u00fdch firem se ne nadarmo cpou pizzou zap\u00edjenou pivem (ach, skv\u011bl\u00e9 \u010dasy v devades\u00e1t\u00fdch letech v Petrohradu). Poj\u010fme vyu\u017e\u00edvat monitorovac\u00ed syst\u00e9my, kter\u00e9 jsou vytvo\u0159eny, dolad\u011bny a funguj\u00ed, a p\u0159in\u00e1\u0161ej\u00ed skute\u010dn\u011b u\u017eitek (alespo\u0148 jejich tv\u016frc\u016fm).<br \/>\n<b class=\"spoiler_title\">Pern\u00ed\u010dky a buchty, mod\u0159iny a boule<\/b><b>Pern\u00ed\u010dky a buchty:<\/b><br \/>\n1. Nen\u00ed t\u0159eba ztr\u00e1cet \u010das vym\u00fd\u0161len\u00edm toho, co u\u017e bylo vymy\u0161leno. Vezmi si a pou\u017eij.<br \/>\n2. Monitorovac\u00ed syst\u00e9my nevyv\u00edjej\u00ed bl\u00e1zni a samoz\u0159ejm\u011b jsou u\u017eite\u010dn\u00e9.<br \/>\n3. Funk\u010dn\u00ed monitorovac\u00ed syst\u00e9my obvykle poskytuj\u00ed u\u017eite\u010dn\u00e9 filtrovan\u00e9 informace. <br \/>\n<b>Mod\u0159iny a boule:<\/b><br \/>\n1. In\u017een\u00fdr v tomto p\u0159\u00edpad\u011b nen\u00ed in\u017een\u00fdr, ale pouze u\u017eivatel ciz\u00edho produktu. Nebo u\u017eivatel.<br \/>\n2. Z\u00e1kazn\u00edka je t\u0159eba p\u0159esv\u011bd\u010dit o nutnosti koupit n\u011bco, \u010demu vlastn\u011b nerozum\u00ed, a ani by nem\u011bl, a rozpo\u010det na rok je schv\u00e1len a m\u011bnit se nebude. Potom je t\u0159eba vy\u010dlenit samostatn\u00fd zdroj a nastavit jej pro konkr\u00e9tn\u00ed syst\u00e9m. Tedy nejd\u0159\u00edve je t\u0159eba platit, platit a znovu platit. A z\u00e1kazn\u00edk je lakom\u00fd. To je norm\u00e1ln\u00ed v tomto \u017eivot\u011b.<\/p>\n<h2>Co tedy d\u011blat - \u010cerny\u0161evsk\u00fd? Tv\u00e1 ot\u00e1zka je velmi na m\u00edst\u011b. (c)<\/h2>\n<p>\nV t\u00e9to konkr\u00e9tn\u00ed situaci a nastal\u00e9 situaci je mo\u017en\u00e9 jednat pon\u011bkud jinak \u2014 <b>a co takhle vytvo\u0159it vlastn\u00ed monitorovac\u00ed syst\u00e9m. <\/b><br \/>\n<img decoding=\"async\" alt=\"Monitorov\u00e1n\u00ed v\u00fdkonu dotaz\u016f PostgreSQL. \u010c\u00e1st 1 \u2014 reportov\u00e1n\u00ed\" src=\"\/wp-content\/uploads\/2019\/04\/b59a3ad9e16b68c0fbc962a61d571c52.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNo, nen\u00ed to syst\u00e9m v prav\u00e9m slova smyslu, to by bylo p\u0159\u00edli\u0161 siln\u00e9 a dom\u00fd\u0161liv\u00e9, ale aspo\u0148 si uleh\u010dit \u00fakol a shrom\u00e1\u017edit v\u00edce informac\u00ed pro \u0159e\u0161en\u00ed incident\u016f v\u00fdkonnosti. Abychom se nedostali do situace \u2014 \u201ejdi tam, nev\u00edm kam, najdi to, nev\u00edm co\u201c.<\/p>\n<h4>Jak\u00e9 jsou klady a z\u00e1pory t\u00e9to varianty:<\/h4>\n<p><b>Plusy:<\/b><br \/>\n1. Je to zaj\u00edmav\u00e9. No, minim\u00e1ln\u011b je to zaj\u00edmav\u011bj\u0161\u00ed ne\u017e neust\u00e1l\u00e9 \u201eshrink datafile, alter tablespace, atd.\u201c <br \/>\n2. To jsou nov\u00e9 dovednosti a nov\u00e9 rozvoje. Co v perspektiv\u011b d\u0159\u00edve nebo pozd\u011bji p\u0159inese zaslou\u017een\u00e9 odm\u011bny a bonb\u00f3ny.<br \/>\n<b>Nev\u00fdhody:<\/b><br \/>\n1. Bude t\u0159eba pracovat. Pracovat hodn\u011b. <br \/>\n2. Bude nutn\u00e9 pravideln\u011b vysv\u011btlovat smysl a perspektivy cel\u00e9 \u010dinnosti.<br \/>\n3. N\u011b\u010demu se bude muset ob\u011btovat, proto\u017ee jedin\u00fd dostupn\u00fd zdroj in\u017een\u00fdra \u2013 \u010das \u2013 je omezen\u00fd Vesm\u00edrem. <br \/>\n<b>4. Nejstra\u0161n\u011bj\u0161\u00ed a nejnep\u0159\u00edjemn\u011bj\u0161\u00ed<\/b> \u2013 nakonec to m\u016f\u017ee skon\u010dit jako n\u011bco, co nen\u00ed my\u0161, ani \u017e\u00e1ba, ale nezn\u00e1m\u00e9 stvo\u0159en\u00ed.<\/p>\n<p><b>Kdo neriskuje, ten nepije \u0161ampa\u0148sk\u00e9.<\/b><br \/>\nTak\u017ee \u2013 za\u010d\u00edn\u00e1 to nejzaj\u00edmav\u011bj\u0161\u00ed.<\/p>\n<h2>Celkov\u00e1 my\u0161lenka \u2013 sch\u00e9maticky<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Monitorov\u00e1n\u00ed v\u00fdkonu dotaz\u016f PostgreSQL. \u010c\u00e1st 1 \u2014 reportov\u00e1n\u00ed\" src=\"\/wp-content\/uploads\/2019\/04\/d1ae2ddc1d4c43353fe93eebdaa8b81a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n(<i>Ilustrace poch\u00e1z\u00ed z \u010dl\u00e1nku<\/i> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444988\/\">Synt\u00e9za jako jedna z metod zlep\u0161en\u00ed v\u00fdkonu PostgreSQL<\/a><\/noindex>\u00bb)<\/p>\n<p>Vysv\u011btlen\u00ed:<\/p>\n<ul>\n<li> Ve c\u00edlov\u00e9 datab\u00e1zi se instaluje standardn\u00ed roz\u0161\u00ed\u0159en\u00ed PostgreSQL \u2013 \u201cpg_stat_statements\u201d. <\/li>\n<li>V datab\u00e1zi monitorov\u00e1n\u00ed vytvo\u0159\u00edme sadu servisn\u00edch tabulek pro ukl\u00e1d\u00e1n\u00ed historie pg_stat_statements v po\u010d\u00e1te\u010dn\u00edm st\u00e1diu a pro nastavov\u00e1n\u00ed metrik a monitorov\u00e1n\u00ed v budoucnu.<\/li>\n<li> Na hostiteli monitorov\u00e1n\u00ed vytvo\u0159\u00edme sadu bash skript\u016f, v\u010detn\u011b t\u011bch pro generov\u00e1n\u00ed incident\u016f v ticketov\u00e9m syst\u00e9mu. <\/li>\n<\/ul>\n<h2>Servisn\u00ed tabulky<\/h2>\n<p>\nNa za\u010d\u00e1tek sch\u00e9maticky zjednodu\u0161en\u00e1 ERD, co se nakonec stalo:<br \/>\n<img decoding=\"async\" alt=\"Monitorov\u00e1n\u00ed v\u00fdkonu dotaz\u016f PostgreSQL. \u010c\u00e1st 1 \u2014 reportov\u00e1n\u00ed\" src=\"\/wp-content\/uploads\/2019\/04\/03d29f4d6932d470d9d88651cbf0c715.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b class=\"spoiler_title\">Kr\u00e1tk\u00fd popis tabulek<\/b><b>endpoint <\/b> \u2013 host, bod p\u0159ipojen\u00ed k instanci<br \/>\n<b>database <\/b> \u2013 parametry datab\u00e1ze<br \/>\n<b>pg_stat_history <\/b> \u2013 historick\u00e1 tabulka pro ukl\u00e1d\u00e1n\u00ed \u010dasov\u00fdch sn\u00edmk\u016f zobrazen\u00ed pg_stat_statements c\u00edlov\u00e9 datab\u00e1ze<br \/>\n<b>metric_glossary <\/b> \u2013 slovn\u00edk metrik v\u00fdkonnosti<br \/>\n<b>metric_config <\/b> \u2013 konfigurace jednotliv\u00fdch metrik<br \/>\n<b>metric <\/b> \u2013 konkr\u00e9tn\u00ed metrika pro sledovan\u00fd dotaz<br \/>\n<b>metric_alert_history <\/b> \u2013 historie varov\u00e1n\u00ed v\u00fdkonnosti<br \/>\n<b>log_query <\/b> \u2013 servisn\u00ed tabulka pro uchov\u00e1v\u00e1n\u00ed rozebran\u00fdch z\u00e1znam\u016f z log souboru PostgreSQL na\u010d\u00edtan\u00e9ho z AWS<br \/>\n<b>baseline <\/b> \u2013 parametry \u010dasov\u00e9ho obdob\u00ed pou\u017e\u00edvan\u00e9ho jako z\u00e1kladn\u00ed <br \/>\n<b>checkpoint <\/b> \u2013 konfigurace metrik kontroly stavu datab\u00e1ze<br \/>\n<b>checkpoint_alert_history <\/b> \u2013 historie varov\u00e1n\u00ed metrik kontroly stavu datab\u00e1ze<br \/>\n<b>pg_stat_db_queries <\/b> \u2013 servisn\u00ed tabulka aktivn\u00edch dotaz\u016f <br \/>\n<b>activity_log <\/b> \u2013 servisn\u00ed tabulka den\u00edku aktivity <br \/>\n<b>trap_oid <\/b> \u2013 servisn\u00ed tabulka konfigurace trap<\/p>\n<p><\/p>\n<h2>Krok 1 \u2013 shroma\u017e\u010fujeme statistick\u00e9 informace o v\u00fdkonnosti a z\u00edsk\u00e1v\u00e1me zpr\u00e1vy<\/h2>\n<p>\nPro ukl\u00e1d\u00e1n\u00ed statistick\u00fdch informac\u00ed slou\u017e\u00ed tabulka <b>pg_stat_history<\/b><br \/>\n<b class=\"spoiler_title\">Struktura tabulky pg_stat_history<\/b><\/p>\n<pre>\n                                          Tabulka \"public.pg_stat_history\"\n       Sloupec        |            Typ             |                          Modifik\u00e1tory\n---------------------+-----------------------------+-------------------------------------------\n id                  | cel\u00e9 \u010d\u00edslo                  | nen\u00ed null, v\u00fdchoz\u00ed hodnota nextval('pg_stat_history_id_seq'::regclass)\n snapshot_timestamp  | \u010dasov\u00e1 zna\u010dka bez \u010dasov\u00e9 z\u00f3ny |\n database_id         | cel\u00e9 \u010d\u00edslo                  |\n dbid                | oid                         |\n userid              | oid                         |\n queryid             | velk\u00e9 cel\u00e9 \u010d\u00edslo            |\n query               | text                        |\n calls               | velk\u00e9 cel\u00e9 \u010d\u00edslo            |\n total_time          | dvojit\u00e9 p\u0159esnost             |\n min_time            | dvojit\u00e9 p\u0159esnost             |\n max_time            | dvojit\u00e9 p\u0159esnost             |\n mean_time           | dvojit\u00e9 p\u0159esnost             |\n stddev_time         | dvojit\u00e9 p\u0159esnost             |\n rows                | velk\u00e9 cel\u00e9 \u010d\u00edslo            |\n shared_blks_hit     | velk\u00e9 cel\u00e9 \u010d\u00edslo            |\n shared_blks_read    | velk\u00e9 cel\u00e9 \u010d\u00edslo            |\n shared_blks_dirtied | velk\u00e9 cel\u00e9 \u010d\u00edslo            |\n shared_blks_written | velk\u00e9 cel\u00e9 \u010d\u00edslo            |\n local_blks_hit      | velk\u00e9 cel\u00e9 \u010d\u00edslo            |\n local_blks_read     | velk\u00e9 cel\u00e9 \u010d\u00edslo            |\n local_blks_dirtied  | velk\u00e9 cel\u00e9 \u010d\u00edslo            |\n local_blks_written  | velk\u00e9 cel\u00e9 \u010d\u00edslo            |\n temp_blks_read      | velk\u00e9 cel\u00e9 \u010d\u00edslo            |\n temp_blks_written   | velk\u00e9 cel\u00e9 \u010d\u00edslo            |\n blk_read_time       | dvojit\u00e9 p\u0159esnost             |\n blk_write_time      | dvojit\u00e9 p\u0159esnost             |\n baseline_id         | cel\u00e9 \u010d\u00edslo                  |\nIndexy:\n    \"pg_stat_history_pkey\" PRIM\u00c1RN\u00cd KL\u00cd\u010c, btree (id)\n    \"database_idx\" btree (database_id)\n    \"queryid_idx\" btree (queryid)\n    \"snapshot_timestamp_idx\" btree (snapshot_timestamp)\nCiz\u00ed kl\u00ed\u010dov\u00e9 omezen\u00ed:\n    \"database_id_fk\" CIZ\u00cd KL\u00cd\u010c (database_id) ODKAZUJE na database(id) P\u0158I ODSTRAN\u011aN\u00cd KASK\u00c1DN\u011a<\/pre>\n<p>\nJak je vid\u011bt, tabulka p\u0159edstavuje pouze kumulativn\u00ed \u00fadaje pohledu <b>pg_stat_statements <\/b> v c\u00edlov\u00e9 datab\u00e1zi.<\/p>\n<h3>Pou\u017eit\u00ed t\u00e9to tabulky je velmi jednoduch\u00e9<\/h3>\n<p>\n<b>pg_stat_history<\/b> bude p\u0159edstavovat shrom\u00e1\u017ed\u011bnou statistiku proveden\u00ed dotaz\u016f za ka\u017edou hodinu. Na za\u010d\u00e1tku ka\u017ed\u00e9 hodiny, po napln\u011bn\u00ed tabulky, se statistika <b>pg_stat_statements<\/b> resetuje pomoc\u00ed <b>pg_stat_statements_reset()<\/b>.<br \/>\nPozn\u00e1mka: <i>statistika se shroma\u017e\u010fuje pro dotazy, jejich\u017e doba prov\u00e1d\u011bn\u00ed p\u0159esahuje 1 sekundu.<\/i><br \/>\n<b class=\"spoiler_title\">Napln\u011bn\u00ed tabulky pg_stat_history<\/b><\/p>\n<pre><code class=\"plaintext\">--pg_stat_history.sql\nCREATE OR REPLACE FUNCTION pg_stat_history( ) RETURNS boolean AS $$\nDECLARE\n  endpoint_rec record ;\n  database_rec record ;\n  pg_stat_snapshot record ;\n  current_snapshot_timestamp timestamp without time zone;\nBEGIN\n  current_snapshot_timestamp = date_trunc('minute',now());  \n  \n  FOR endpoint_rec IN SELECT * FROM endpoint \n  LOOP\n    FOR database_rec IN SELECT * FROM database WHERE endpoint_id = endpoint_rec.id \n\t  LOOP\n\t    \n\t\tRAISE NOTICE 'NOV\u00dd SN\u00cdMEK SE VYTV\u00c1\u0158\u00cd';\n\t\t\n\t\t-- P\u0159ipojit se k c\u00edlov\u00e9 DB\t  \n\t    EXECUTE 'SELECT dblink_connect(''LINK1'',''host='||endpoint_rec.host||' dbname='||database_rec.name||' user=USER password=PASSWORD '')';\n \n        RAISE NOTICE 'host % a dbname % ',endpoint_rec.host,database_rec.name;\n\t\tRAISE NOTICE 'Vytv\u00e1\u0159\u00edm sn\u00edmek pg_stat_statements pro datab\u00e1zi %',database_rec.name;\n\t\t\n\t\tSELECT \n\t      *\n\t\tINTO \n\t\t  pg_stat_snapshot\n\t    FROM dblink('LINK1',\n\t      'SELECT \n\t       dbid , SUM(calls),SUM(total_time),SUM(rows) ,SUM(shared_blks_hit) ,SUM(shared_blks_read) ,SUM(shared_blks_dirtied) ,SUM(shared_blks_written) , \n           SUM(local_blks_hit) , SUM(local_blks_read) , SUM(local_blks_dirtied) , SUM(local_blks_written) , SUM(temp_blks_read) , SUM(temp_blks_written) , SUM(blk_read_time) , SUM(blk_write_time)\n\t       FROM pg_stat_statements WHERE dbid=(SELECT oid from pg_database where datname=current_database() ) \n\t\t   GROUP BY dbid\n  \t      '\n\t               )\n\t      AS t\n\t       ( dbid oid , calls bigint , \n  \t         total_time double precision , \n\t         rows bigint , shared_blks_hit bigint , shared_blks_read bigint ,shared_blks_dirtied bigint ,shared_blks_written\t bigint ,\n             local_blks_hit\t bigint ,local_blks_read bigint , local_blks_dirtied bigint ,local_blks_written bigint ,\n             temp_blks_read\t bigint ,temp_blks_written bigint ,\n             blk_read_time double precision , blk_write_time double precision\t  \n\t       );\n\t\t \n\t\tINSERT INTO pg_stat_history\n          ( \n\t\t    snapshot_timestamp  ,database_id  ,\n\t\t\tdbid , calls  ,total_time ,\n            rows ,shared_blks_hit  ,shared_blks_read  ,shared_blks_dirtied  ,shared_blks_written ,local_blks_hit , \t \n            local_blks_read,local_blks_dirtied,local_blks_written,temp_blks_read,temp_blks_written, \n            blk_read_time, blk_write_time \n\t\t  )\t\t  \n\t    VALUES\n\t      (\n\t       current_snapshot_timestamp ,\n\t\t   database_rec.id ,\n\t       pg_stat_snapshot.dbid ,pg_stat_snapshot.calls,\n\t       pg_stat_snapshot.total_time,\n\t       pg_stat_snapshot.rows ,pg_stat_snapshot.shared_blks_hit ,pg_stat_snapshot.shared_blks_read ,pg_stat_snapshot.shared_blks_dirtied ,pg_stat_snapshot.shared_blks_written , \n           pg_stat_snapshot.local_blks_hit , pg_stat_snapshot.local_blks_read , pg_stat_snapshot.local_blks_dirtied , pg_stat_snapshot.local_blks_written , \n\t       pg_stat_snapshot.temp_blks_read , pg_stat_snapshot.temp_blks_written , pg_stat_snapshot.blk_read_time , pg_stat_snapshot.blk_write_time \t   \n\t      );\t\t   \n\t\t  \n        RAISE NOTICE 'Vytv\u00e1\u0159\u00edm sn\u00edmek pg_stat_statements pro dotazy s min_time v\u011bt\u0161\u00edm ne\u017e 1000ms';\n\t\n        FOR pg_stat_snapshot IN\n          -- V\u0161echny dotazy s max_time p\u0159es 1000 ms\n\t      SELECT \n\t        *\n\t      FROM dblink('LINK1',\n\t        'SELECT \n\t         dbid , userid ,queryid,query,calls,total_time,min_time ,max_time,mean_time, stddev_time ,rows ,shared_blks_hit ,\n\t\t\t shared_blks_read ,shared_blks_dirtied ,shared_blks_written , \n             local_blks_hit , local_blks_read , local_blks_dirtied , \n\t\t\t local_blks_written , temp_blks_read , temp_blks_written , blk_read_time , \n\t\t\t blk_write_time\n\t         FROM pg_stat_statements \n\t\t\t WHERE dbid=(SELECT oid from pg_database where datname=current_database() AND min_time &gt;= 1000 ) \n  \t        '\n\n\t                  )\n\t        AS t\n\t         ( dbid oid , userid oid , queryid bigint ,query text , calls bigint , \n  \t           total_time double precision ,min_time double precision\t ,max_time double precision\t , mean_time double precision\t ,  stddev_time double precision\t , \n\t           rows bigint , shared_blks_hit bigint , shared_blks_read bigint ,shared_blks_dirtied bigint ,shared_blks_written\t bigint ,\n               local_blks_hit\t bigint ,local_blks_read bigint , local_blks_dirtied bigint ,local_blks_written bigint ,\n               temp_blks_read\t bigint ,temp_blks_written bigint ,\n               blk_read_time double precision , blk_write_time double precision\t  \n\t         )\n\t    LOOP\n\t\t  INSERT INTO pg_stat_history\n          ( \n\t\t    snapshot_timestamp  ,database_id  ,\n\t\t\tdbid ,userid  , queryid  , query  , calls  ,total_time ,min_time ,max_time ,mean_time ,stddev_time ,\n            rows ,shared_blks_hit  ,shared_blks_read  ,shared_blks_dirtied  ,shared_blks_written ,local_blks_hit , \t \n            local_blks_read,local_blks_dirtied,local_blks_written,temp_blks_read,temp_blks_written, \n            blk_read_time, blk_write_time \n\t\t  )\t\t  \n\t      VALUES\n\t      (\n\t       current_snapshot_timestamp ,\n\t\t   database_rec.id ,\n\t       pg_stat_snapshot.dbid ,pg_stat_snapshot.userid ,pg_stat_snapshot.queryid,pg_stat_snapshot.query,pg_stat_snapshot.calls,\n\t       pg_stat_snapshot.total_time,pg_stat_snapshot.min_time ,pg_stat_snapshot.max_time,pg_stat_snapshot.mean_time, pg_stat_snapshot.stddev_time ,\n\t       pg_stat_snapshot.rows ,pg_stat_snapshot.shared_blks_hit ,pg_stat_snapshot.shared_blks_read ,pg_stat_snapshot.shared_blks_dirtied ,pg_stat_snapshot.shared_blks_written , \n           pg_stat_snapshot.local_blks_hit , pg_stat_snapshot.local_blks_read , pg_stat_snapshot.local_blks_dirtied , pg_stat_snapshot.local_blks_written , \n\t       pg_stat_snapshot.temp_blks_read , pg_stat_snapshot.temp_blks_written , pg_stat_snapshot.blk_read_time , pg_stat_snapshot.blk_write_time \t   \n\t      );\n\t\t  \n        END LOOP;\n\n        PERFORM dblink_disconnect('LINK1');  \n\t\t\t\t\n\t  END LOOP ;--FOR database_rec IN SELECT * FROM database WHERE endpoint_id = endpoint_rec.id \n    \n  END LOOP;\n\nRETURN TRUE;  \nEND\n$$ LANGUAGE plpgsql;<\/code><\/pre>\n<p>V d\u016fsledku toho, po ur\u010dit\u00e9 dob\u011b, bude v tabulce <b>pg_stat_history<\/b> soubor sn\u00edmk\u016f obsahu tabulky <b>pg_stat_statements <\/b>c\u00edlov\u00e9 datab\u00e1ze. <\/p>\n<h2>Samotn\u00e9 reportov\u00e1n\u00ed<\/h2>\n<p>\nPomoc\u00ed jednoduch\u00fdch dotaz\u016f lze z\u00edskat velmi u\u017eite\u010dn\u00e9 a zaj\u00edmav\u00e9 zpr\u00e1vy.<\/p>\n<h2>Agregovan\u00e1 data za zadan\u00e9 \u010dasov\u00e9 obdob\u00ed<\/h2>\n<p><b class=\"spoiler_title\">Dotaz<\/b><\/p>\n<pre><code class=\"plaintext\">SELECT \n  database_id , \n  SUM(calls) AS calls ,SUM(total_time)  AS total_time ,\n  SUM(rows) AS rows , SUM(shared_blks_hit)  AS shared_blks_hit,\n  SUM(shared_blks_read) AS shared_blks_read ,\n  SUM(shared_blks_dirtied) AS shared_blks_dirtied,\n  SUM(shared_blks_written) AS shared_blks_written , \n  SUM(local_blks_hit) AS local_blks_hit , \n  SUM(local_blks_read) AS local_blks_read , \n  SUM(local_blks_dirtied) AS local_blks_dirtied , \n  SUM(local_blks_written)  AS local_blks_written,\n  SUM(temp_blks_read) AS temp_blks_read, \n  SUM(temp_blks_written) temp_blks_written , \n  SUM(blk_read_time) AS blk_read_time , \n  SUM(blk_write_time) AS blk_write_time\nFROM \n  pg_stat_history\nWHERE \n  queryid IS NULL AND\n  database_id = DATABASE_ID  AND\n  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT\nGROUP BY database_id ;<\/code><\/pre>\n<p><\/p>\n<h4>\u010cas DB<\/h4>\n<blockquote><p>to_char(interval '1 millisekunda' * pg_total_stat_history_rec.total_time, 'HH24:MI:SS.MS')<\/p><\/blockquote>\n<p><\/p>\n<h4>\u010cas I\/O<\/h4>\n<blockquote><p>to_char(interval '1 millisekunda' * ( pg_total_stat_history_rec.blk_read_time + pg_total_stat_history_rec.blk_write_time ), 'HH24:MI:SS.MS')<\/p><\/blockquote>\n<h3>TOP10 SQL podle celkov\u00e9ho \u010dasu<\/h3>\n<p><b class=\"spoiler_title\">Dotaz<\/b><\/p>\n<pre><code class=\"plaintext\">SELECT \n  queryid , \n  SUM(calls) AS calls ,\n  SUM(total_time)  AS total_time  \t\nFROM \n  pg_stat_history\nWHERE \n  queryid IS NOT NULL AND \n  database_id = DATABASE_ID AND\n  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT \nGROUP BY queryid \nORDER BY 3 DESC \nLIMIT 10<\/code><\/pre>\n<pre>-------------------------------------------------------------------------------------\n| TOP10 SQL PODLE CELKOV\u00c9 DOBY V\u00ddKONU\n|   #|    queryid|      calls|    procento vol\u00e1n\u00ed|                celkov\u00fd \u010das (ms) |  procento dbtime\n+----+-----------+-----------+-----------+--------------------------------+----------\n|   1|  821760255|          2|     .00001|00:03:23.141(    203141.681 ms.)|      5.42\n|   2| 4152624390|          2|     .00001|00:03:13.929(    193929.215 ms.)|      5.17\n|   3| 1484454471|          4|     .00001|00:02:09.129(    129129.057 ms.)|      3.44\n|   4|  655729273|          1|     .00000|00:02:01.869(    121869.981 ms.)|      3.25\n|   5| 2460318461|          1|     .00000|00:01:33.113(     93113.835 ms.)|      2.48\n|   6| 2194493487|          4|     .00001|00:00:17.377(     17377.868 ms.)|       .46\n|   7| 1053044345|          1|     .00000|00:00:06.156(      6156.352 ms.)|       .16\n|   8| 3644780286|          1|     .00000|00:00:01.063(      1063.830 ms.)|       .03\n<\/pre>\n<h4>TOP10 SQL podle celkov\u00e9ho I\/O \u010dasu<\/h4>\n<p><b class=\"spoiler_title\">Dotaz<\/b><\/p>\n<pre><code class=\"plaintext\">SELECT \n  queryid , \n  SUM(calls) AS calls ,\n  SUM(blk_read_time + blk_write_time)  AS io_time\nFROM \n  pg_stat_history\nWHERE \n  queryid IS NOT NULL AND \n  database_id = DATABASE_ID  AND\n  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT\nGROUP BY  queryid \nORDER BY 3 DESC \nLIMIT 10<\/code><\/pre>\n<pre>----------------------------------------------------------------------------------------\n| TOP10 SQL PODLE CELKOV\u00c9HO \u010cASU I\/O\n|   #|    queryid|      vol\u00e1n\u00ed|    procento vol\u00e1n\u00ed|                   I\/O \u010das (ms)|% \u010dase I\/O db\n+----+-----------+-----------+-----------+--------------------------------+-------------\n|   1| 4152624390|          2|     .00001|00:08:31.616(    511616.592 ms.)|        31.06\n|   2|  821760255|          2|     .00001|00:08:27.099(    507099.036 ms.)|        30.78\n|   3|  655729273|          1|     .00000|00:05:02.209(    302209.137 ms.)|        18.35\n|   4| 2460318461|          1|     .00000|00:04:05.981(    245981.117 ms.)|        14.93\n|   5| 1484454471|          4|     .00001|00:00:39.144(     39144.221 ms.)|         2.38\n|   6| 2194493487|          4|     .00001|00:00:18.182(     18182.816 ms.)|         1.10\n|   7| 1053044345|          1|     .00000|00:00:16.611(     16611.722 ms.)|         1.01\n|   8| 3644780286|          1|     .00000|00:00:00.436(       436.205 ms.)|          .03\n<\/pre>\n<h4>TOP10 SQL podle maxim\u00e1ln\u00ed doby vykon\u00e1n\u00ed<\/h4>\n<p><b class=\"spoiler_title\">Dotaz<\/b><\/p>\n<pre><code class=\"plaintext\">SELECT \n  id AS snapshotid , \n  queryid , \n  snapshot_timestamp ,  \n  max_time \nFROM \n  pg_stat_history \nWHERE \n  queryid IS NOT NULL AND \n  database_id = DATABASE_ID  AND\n  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT\nORDER BY 4 DESC \nLIMIT 10<\/code><\/pre>\n<p><\/p>\n<pre>-----------------------------------------------------------------------------------------\n| TOP10 SQL PODLE MAXIM\u00c1LN\u00cdHO \u010cASU VYKR\u00c1N\u00cd\n|   #|          snapshot| snapshotID|    queryid|                           max_time (ms)\n+----+------------------+-----------+-----------+----------------------------------------\n|   1|  05.04.2019 01:03|       4169|  655729273|        00:02:01.869(    121869.981 ms.)\n|   2|  04.04.2019 17:00|       4153|  821760255|        00:01:41.570(    101570.841 ms.)\n|   3|  04.04.2019 16:00|       4146|  821760255|        00:01:41.570(    101570.841 ms.)\n|   4|  04.04.2019 16:00|       4144| 4152624390|        00:01:36.964(     96964.607 ms.)\n|   5|  04.04.2019 17:00|       4151| 4152624390|        00:01:36.964(     96964.607 ms.)\n|   6|  05.04.2019 10:00|       4188| 1484454471|        00:01:33.452(     93452.150 ms.)\n|   7|  04.04.2019 17:00|       4150| 2460318461|        00:01:33.113(     93113.835 ms.)\n|   8|  04.04.2019 15:00|       4140| 1484454471|        00:00:11.892(     11892.302 ms.)\n|   9|  04.04.2019 16:00|       4145| 1484454471|        00:00:11.892(     11892.302 ms.)\n|  10|  04.04.2019 17:00|       4152| 1484454471|        00:00:11.892(     11892.302 ms.)\n<\/pre>\n<h4>TOP10 SQL podle \u010dten\u00ed\/z\u00e1pisu ve sd\u00edlen\u00fdch bufferech<\/h4>\n<p><b class=\"spoiler_title\">Dotaz<\/b><\/p>\n<pre><code class=\"plaintext\">SELECT \n  id AS snapshotid , \n  queryid ,\n  snapshot_timestamp , \n  shared_blks_read , \n  shared_blks_written \nFROM \n  pg_stat_history\nWHERE \n  queryid IS NOT NULL AND \n  database_id = DATABASE_ID  AND\n  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND\n  ( shared_blks_read &gt; 0 OR shared_blks_written &gt; 0 )\nORDER BY 4 DESC  , 5 DESC \nLIMIT 10<\/code><\/pre>\n<pre>--------------------------------------------------------------------------------------------\n| TOP10 SQL PODLE SD\u00cdLEN\u00c9HO \u010cTEN\u00cd\/Z\u00c1PISU BUFFERU\n|   #|          snapshot| snapshotID|    queryid|   sd\u00edlen\u00e9 bloky \u010dteny|  sd\u00edlen\u00e9 bloky zaps\u00e1ny\n+----+------------------+-----------+-----------+---------------------+---------------------\n|   1|  04.04.2019 17:00|       4153|  821760255|               797308|                    0\n|   2|  04.04.2019 16:00|       4146|  821760255|               797308|                    0\n|   3|  05.04.2019 01:03|       4169|  655729273|               797158|                    0\n|   4|  04.04.2019 16:00|       4144| 4152624390|               756514|                    0\n|   5|  04.04.2019 17:00|       4151| 4152624390|               756514|                    0\n|   6|  04.04.2019 17:00|       4150| 2460318461|               734117|                    0\n|   7|  04.04.2019 17:00|       4155| 3644780286|                52973|                    0\n|   8|  05.04.2019 01:03|       4168| 1053044345|                52818|                    0\n|   9|  04.04.2019 15:00|       4141| 2194493487|                52813|                    0\n|  10|  04.04.2019 16:00|       4147| 2194493487|                52813|                    0\n--------------------------------------------------------------------------------------------\n<\/pre>\n<h4>Histogram rozlo\u017een\u00ed dotaz\u016f podle maxim\u00e1ln\u00ed doby vykon\u00e1v\u00e1n\u00ed<\/h4>\n<p><b class=\"spoiler_title\">Po\u017eadavky<\/b><\/p>\n<pre><code class=\"plaintext\">SELECT  \n  MIN(max_time) AS hist_min  , \n  MAX(max_time) AS hist_max , \n  (( MAX(max_time) - MIN(min_time) ) \/ hist_columns ) as hist_width\nFROM \n  pg_stat_history \nWHERE \n  queryid IS NOT NULL AND\n  database_id = DATABASE_ID  AND\n  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT ;\n\nSELECT \n  SUM(calls) AS calls\nFROM \n  pg_stat_history \nWHERE \n  queryid IS NOT NULL AND\n  database_id =DATABASE_ID  AND\n  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND \n  ( max_time &gt;= hist_current_min AND  max_time &lt; hist_current_max ) ;\n<\/code><\/pre>\n<pre>|-----------------------------------------------------------------------------------------------\n| HISTOGRAM MAX_TIME\n| CELKOV\u00dd PO\u010cET VOL\u00c1N\u00cd : 33851920\n| MIN D\u00c9LKA  : 00:00:01.063\n| MAX D\u00c9LKA  : 00:02:01.869\n---------------------------------------------------------------------------------\n|                      min doba|                      max doba|     vol\u00e1n\u00ed\n+----------------------------------+----------------------------------+----------\n| 00:00:01.063(      1063.830 ms.) | 00:00:13.144(     13144.445 ms.) | 9\n| 00:00:13.144(     13144.445 ms.) | 00:00:25.225(     25225.060 ms.) | 0\n| 00:00:25.225(     25225.060 ms.) | 00:00:37.305(     37305.675 ms.) | 0\n| 00:00:37.305(     37305.675 ms.) | 00:00:49.386(     49386.290 ms.) | 0\n| 00:00:49.386(     49386.290 ms.) | 00:01:01.466(     61466.906 ms.) | 0\n| 00:01:01.466(     61466.906 ms.) | 00:01:13.547(     73547.521 ms.) | 0\n| 00:01:13.547(     73547.521 ms.) | 00:01:25.628(     85628.136 ms.) | 0\n| 00:01:25.628(     85628.136 ms.) | 00:01:37.708(     97708.751 ms.) | 4\n| 00:01:37.708(     97708.751 ms.) | 00:01:49.789(    109789.366 ms.) | 2\n| 00:01:49.789(    109789.366 ms.) | 00:02:01.869(    121869.981 ms.) | 0\n<\/pre>\n<h4>TOP10 Snaps p\u0159i dotazu za sekundu<\/h4>\n<p><b class=\"spoiler_title\">Po\u017eadavky<\/b><\/p>\n<pre><code class=\"plaintext\">--pg_qps.sql\n--Vypo\u010d\u00edtat dotazy za sekundu \nCREATE OR REPLACE FUNCTION pg_qps( pg_stat_history_id integer ) RETURNS double precision AS $$\nDECLARE\n pg_stat_history_rec record ;\n prev_pg_stat_history_id integer ;\n prev_pg_stat_history_rec record;\n total_seconds double precision ;\n result double precision;\nBEGIN \n  result = 0 ;\n  \n  SELECT *\n  INTO pg_stat_history_rec\n  FROM \n    pg_stat_history\n  WHERE id = pg_stat_history_id ;\n\n  IF pg_stat_history_rec.snapshot_timestamp IS NULL \n  THEN\n    RAISE EXCEPTION 'CHYBA - Nenalezen pg_stat_history pro id = %',pg_stat_history_id;\n  END IF ;  \n  \n --RAISE NOTICE 'pg_stat_history_id = % , snapshot_timestamp = %', pg_stat_history_id , \n pg_stat_history_rec.snapshot_timestamp ;\n  \n  SELECT \n    MAX(id)   \n  INTO\n    prev_pg_stat_history_id\n  FROM\n    pg_stat_history\n  WHERE \n    database_id = pg_stat_history_rec.database_id AND\n\tqueryid IS NULL AND\n\tid  0 \n  THEN\n    result = pg_stat_history_rec.calls \/ total_seconds ;\n  ELSE\n   result = 0 ; \n  END IF;\n   \n RETURN result ;\nEND\n$$ LANGUAGE plpgsql;\n\n\nSELECT \n  id , \n  snapshot_timestamp ,\n  calls , \t\n  total_time , \n  ( select pg_qps( id )) AS QPS ,\n  blk_read_time ,\n  blk_write_time\nFROM \n  pg_stat_history\nWHERE \n  queryid IS NULL AND \n  database_id = DATABASE_ID  AND\n  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND\n  ( select pg_qps( id )) IS NOT NULL \nORDER BY 5 DESC \nLIMIT 10\n<\/code><\/pre>\n<pre>|-----------------------------------------------------------------------------------------------\n| TOP10 Snapslety se\u0159azen\u00e9 podle po\u010dtu dotaz\u016f za sekundu\n-----------------------------------------------------------------------------------------------------------------------------------------------\n|    #|          sn\u00edmek| snapshotID|      vol\u00e1n\u00ed|                      celkov\u00fd \u010das db|        QPS|                          I\/O \u010das| I\/O \u010das %\n+-----+------------------+-----------+-----------+----------------------------------+-----------+----------------------------------+-----------\n|    1|  04.04.2019 20:04|       4161|    5758631|  00:06:30.513(    390513.926 ms.)|   1573.396|  00:00:01.470(      1470.110 ms.)|       .376\n|    2|  04.04.2019 17:00|       4149|    3529197|  00:11:48.830(    708830.618 ms.)|    980.332|  00:12:47.834(    767834.052 ms.)|    108.324\n|    3|  04.04.2019 16:00|       4143|    3525360|  00:10:13.492(    613492.351 ms.)|    979.267|  00:08:41.396(    521396.555 ms.)|     84.988\n|    4|  04.04.2019 21:03|       4163|    2781536|  00:03:06.470(    186470.979 ms.)|    785.745|  00:00:00.249(       249.865 ms.)|       .134\n|    5|  04.04.2019 19:03|       4159|    2890362|  00:03:16.784(    196784.755 ms.)|    776.979|  00:00:01.441(      1441.386 ms.)|       .732\n|    6|  04.04.2019 14:00|       4137|    2397326|  00:04:43.033(    283033.854 ms.)|    665.924|  00:00:00.024(        24.505 ms.)|       .009\n|    7|  04.04.2019 15:00|       4139|    2394416|  00:04:51.435(    291435.010 ms.)|    665.116|  00:00:12.025(     12025.895 ms.)|      4.126\n|    8|  04.04.2019 13:00|       4135|    2373043|  00:04:26.791(    266791.988 ms.)|    659.179|  00:00:00.064(        64.261 ms.)|       .024\n|    9|  05.04.2019 01:03|       4167|    4387191|  00:06:51.380(    411380.293 ms.)|    609.332|  00:05:18.847(    318847.407 ms.)|     77.507\n|   10|  04.04.2019 18:01|       4157|    1145596|  00:01:19.217(     79217.372 ms.)|    313.004|  00:00:01.319(      1319.676 ms.)|      1.666\n<\/pre>\n<h4>Historie vykon\u00e1v\u00e1n\u00ed za hodinu s po\u010dtem dotaz\u016f za sekundu a \u010dasem I\/O<\/h4>\n<p><b class=\"spoiler_title\">Dotaz<\/b><\/p>\n<pre><code class=\"plaintext\">SELECT \n  id , \n  timestamp_sn\u00edmku ,\n  vol\u00e1n\u00ed , \t\n  celkov\u00fd \u010das , \n  ( select pg_qps( id )) AS QPS ,\n  blk_read_time ,\n  blk_write_time\nFROM \n  pg_stat_history\nWHERE \n  queryid IS NULL AND \n  database_id = DATABASE_ID  AND\n  timestamp_sn\u00edmku BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT\nORDER BY 2\n<\/code><\/pre>\n<pre>|-----------------------------------------------------------------------------------------------\n| HISTORIE VYKON\u00c1N\u00cd HODINOV\u011a S QueryPerSeconds a I\/O \u010dasem\n-----------------------------------------------------------------------------------------------------------------------------------------------\n| HISTORIE DOTAZ\u016e ZA SEKUNDU\n|    #|          sn\u00edmek| snapshotID|      vol\u00e1n\u00ed|                      celkov\u00fd dbtime|        QPS|                          I\/O \u010das| I\/O \u010das %\n+-----+------------------+-----------+-----------+----------------------------------+-----------+----------------------------------+-----------\n|    1|  04.04.2019 11:00|       4131|       3747|  00:00:00.835(       835.374 ms.)|      1.041|  00:00:00.000(          .000 ms.)|       .000\n|    2|  04.04.2019 12:00|       4133|    1002722|  00:01:52.419(    112419.376 ms.)|    278.534|  00:00:00.149(       149.105 ms.)|       .133\n|    3|  04.04.2019 13:00|       4135|    2373043|  00:04:26.791(    266791.988 ms.)|    659.179|  00:00:00.064(        64.261 ms.)|       .024\n|    4|  04.04.2019 14:00|       4137|    2397326|  00:04:43.033(    283033.854 ms.)|    665.924|  00:00:00.024(        24.505 ms.)|       .009\n|    5|  04.04.2019 15:00|       4139|    2394416|  00:04:51.435(    291435.010 ms.)|    665.116|  00:00:12.025(     12025.895 ms.)|      4.126\n|    6|  04.04.2019 16:00|       4143|    3525360|  00:10:13.492(    613492.351 ms.)|    979.267|  00:08:41.396(    521396.555 ms.)|     84.988\n|    7|  04.04.2019 17:00|       4149|    3529197|  00:11:48.830(    708830.618 ms.)|    980.332|  00:12:47.834(    767834.052 ms.)|    108.324\n|    8|  04.04.2019 18:01|       4157|    1145596|  00:01:19.217(     79217.372 ms.)|    313.004|  00:00:01.319(      1319.676 ms.)|      1.666\n|    9|  04.04.2019 19:03|       4159|    2890362|  00:03:16.784(    196784.755 ms.)|    776.979|  00:00:01.441(      1441.386 ms.)|       .732\n|   10|  04.04.2019 20:04|       4161|    5758631|  00:06:30.513(    390513.926 ms.)|   1573.396|  00:00:01.470(      1470.110 ms.)|       .376\n|   11|  04.04.2019 21:03|       4163|    2781536|  00:03:06.470(    186470.979 ms.)|    785.745|  00:00:00.249(       249.865 ms.)|       .134\n|   12|  04.04.2019 23:03|       4165|    1443155|  00:01:34.467(     94467.539 ms.)|    200.438|  00:00:00.015(        15.287 ms.)|       .016\n|   13|  05.04.2019 01:03|       4167|    4387191|  00:06:51.380(    411380.293 ms.)|    609.332|  00:05:18.847(    318847.407 ms.)|     77.507\n|   14|  05.04.2019 02:03|       4171|     189852|  00:00:10.989(     10989.899 ms.)|     52.737|  00:00:00.539(       539.110 ms.)|      4.906\n|   15|  05.04.2019 03:01|       4173|       3627|  00:00:00.103(       103.000 ms.)|      1.042|  00:00:00.004(         4.131 ms.)|      4.010\n|   16|  05.04.2019 04:00|       4175|       3627|  00:00:00.085(        85.235 ms.)|      1.025|  00:00:00.003(         3.811 ms.)|      4.471\n|   17|  05.04.2019 05:00|       4177|       3747|  00:00:00.849(       849.454 ms.)|      1.041|  00:00:00.006(         6.124 ms.)|       .721\n|   18|  05.04.2019 06:00|       4179|       3747|  00:00:00.849(       849.561 ms.)|      1.041|  00:00:00.000(          .051 ms.)|       .006\n|   19|  05.04.2019 07:00|       4181|       3747|  00:00:00.839(       839.416 ms.)|      1.041|  00:00:00.000(          .062 ms.)|       .007\n|   20|  05.04.2019 08:00|       4183|       3747|  00:00:00.846(       846.382 ms.)|      1.041|  00:00:00.000(          .007 ms.)|       .001\n|   21|  05.04.2019 09:00|       4185|       3747|  00:00:00.855(       855.426 ms.)|      1.041|  00:00:00.000(          .065 ms.)|       .008\n|   22|  05.04.2019 10:00|       4187|       3797|  00:01:40.150(    100150.165 ms.)|      1.055|  00:00:21.845(     21845.217 ms.)|     21.812\n<\/pre>\n<h4>Text v\u0161ech SQL-select\u016f<\/h4>\n<p><b class=\"spoiler_title\">Dotaz<\/b><\/p>\n<pre><code class=\"plaintext\">SELECT \n  queryid , \n  query \nFROM \n  pg_stat_history\nWHERE \n  queryid IS NOT NULL AND \n  database_id = DATABASE_ID  AND\n  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT\nGROUP BY queryid , query\n<\/code><\/pre>\n<h2>V\u00fdsledek<\/h2>\n<p>\nJak je vid\u011bt, pom\u011brn\u011b jednoduch\u00fdmi prost\u0159edky lze z\u00edskat dostatek u\u017eite\u010dn\u00fdch informac\u00ed o zat\u00ed\u017een\u00ed a stavu datab\u00e1ze. <\/p>\n<p><b>Pozn\u00e1mka:<\/b>Pokud v dotazech zaznamen\u00e1me queryid, z\u00edsk\u00e1me historii pro jednotliv\u00fd dotaz (kv\u016fli \u00faspo\u0159e m\u00edsta jsou zpr\u00e1vy pro jednotliv\u00e9 dotazy vynech\u00e1ny).<\/p>\n<p>Tak\u017ee statistick\u00e9 \u00fadaje o v\u00fdkonnosti dotaz\u016f jsou k dispozici a shroma\u017e\u010fuj\u00ed se.<br \/>\nPrvn\u00ed f\u00e1ze \u201esb\u00edr\u00e1n\u00ed statistick\u00fdch \u00fadaj\u016f\u201c \u2013 byla dokon\u010dena.<\/p>\n<p>M\u016f\u017eeme p\u0159ej\u00edt ke druh\u00e9 f\u00e1zi \u2013 \u201enastaven\u00ed metrik v\u00fdkonnosti\u201c.<br \/>\n<img decoding=\"async\" alt=\"Monitorov\u00e1n\u00ed v\u00fdkonu dotaz\u016f PostgreSQL. \u010c\u00e1st 1 \u2014 reportov\u00e1n\u00ed\" src=\"\/wp-content\/uploads\/2019\/04\/a893e49280d4cb425e4667a5c51d2397.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Ale to u\u017e je \u00fapln\u011b jin\u00fd p\u0159\u00edb\u011bh.<\/b><\/p>\n<p><i>Pokra\u010dov\u00e1n\u00ed p\u0159\u00ed\u0161t\u011b\u2026<\/i><br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/icl_services\/blog\/446734\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0418\u043d\u0436\u0435\u043d\u0435\u0440 \u2014 \u0432 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u0441 \u043b\u0430\u0442\u044b\u043d\u0438 \u2014 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0439. \u0418\u043d\u0436\u0435\u043d\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0451. (\u0441) \u0420.\u0414\u0438\u0437\u0435\u043b\u044c. \u042d\u043f\u0438\u0433\u0440\u0430\u0444\u044b. \u0418\u043b\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u0437\u0430\u0447\u0435\u043c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u0441\u0432\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0441\u043a\u043e\u0435 \u043f\u0440\u043e\u0448\u043b\u043e\u0435. \u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435 \u0412\u0441\u0435 \u0438\u043c\u0435\u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b. \u0421\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b. \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438\u0447\u043d\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0430. Disclaimer of warranties: \u0432 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0441\u0442\u0430\u0442\u0435\u0439 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24168,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32353","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0418\u043d\u0436\u0435\u043d\u0435\u0440 \u2014 \u0432 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u0441 \u043b\u0430\u0442\u044b\u043d\u0438 \u2014 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0439. \u0418\u043d\u0436\u0435\u043d\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0451. (\u0441) \u0420.\u0414\u0438\u0437\u0435\u043b\u044c. \u042d\u043f\u0438\u0433\u0440\u0430\u0444\u044b.\" \/>\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\/cs\/blog\/administrirovanie\/monitoring-proizvoditelnosti-zaprosov-postgresql-chast-1-reporting\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 PostgreSQL. \u0427\u0430\u0441\u0442\u044c 1 \u2014 \u0440\u0435\u043f\u043e\u0440\u0442\u0438\u043d\u0433 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0418\u043d\u0436\u0435\u043d\u0435\u0440 \u2014 \u0432 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u0441 \u043b\u0430\u0442\u044b\u043d\u0438 \u2014 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0439. \u0418\u043d\u0436\u0435\u043d\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0451. (\u0441) \u0420.\u0414\u0438\u0437\u0435\u043b\u044c. \u042d\u043f\u0438\u0433\u0440\u0430\u0444\u044b.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/monitoring-proizvoditelnosti-zaprosov-postgresql-chast-1-reporting\" \/>\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=\"2019-10-31T18:46:32+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:46:32+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\udd47Monitorov\u00e1n\u00ed v\u00fdkonnosti dotaz\u016f PostgreSQL. \u010c\u00e1st 1 \u2013 reporting | ProHoster","description":"In\u017een\u00fdr \u2013 v p\u0159ekladu z latiny \u2013 inspirovan\u00fd. In\u017een\u00fdr m\u016f\u017ee v\u0161e. (c) R.Diesel. Epigrafy.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/monitoring-proizvoditelnosti-zaprosov-postgresql-chast-1-reporting","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 PostgreSQL. \u0427\u0430\u0441\u0442\u044c 1 \u2014 \u0440\u0435\u043f\u043e\u0440\u0442\u0438\u043d\u0433 | ProHoster","og:description":"\u0418\u043d\u0436\u0435\u043d\u0435\u0440 \u2014 \u0432 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u0441 \u043b\u0430\u0442\u044b\u043d\u0438 \u2014 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0439. \u0418\u043d\u0436\u0435\u043d\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0451. (\u0441) \u0420.\u0414\u0438\u0437\u0435\u043b\u044c. \u042d\u043f\u0438\u0433\u0440\u0430\u0444\u044b.","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/monitoring-proizvoditelnosti-zaprosov-postgresql-chast-1-reporting","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":"2019-10-31T18:46:32+00:00","article:modified_time":"2019-10-31T18:46:32+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32353","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":"2026-01-21 10:28:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:13:42","updated":"2026-01-21 10:28:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/32353","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=32353"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/32353\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/24168"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=32353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=32353"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=32353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}