{"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\/et\/blog\/administrirovanie\/monitoring-proizvoditelnosti-zaprosov-postgresql-chast-1-reporting","title":{"rendered":"PostgreSQL p\u00e4ringute tulemuslikkuse j\u00e4lgimine. Osa 1 \u2014 aruandlus","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Insener \u2014 ladina keelest t\u00f5lgituna \u2014 inspireeritud.<br \/>\nInsener suudab k\u00f5ike. (c) R.Dizel.<br \/>\n<i>Epigrammid.<\/i><br \/>\n<img decoding=\"async\" alt=\"PostgreSQL p\u00e4ringute tulemuslikkuse j\u00e4lgimine. Osa 1 \u2014 aruandlus\" src=\"\/wp-content\/uploads\/2019\/04\/9a2640267ea05006b94e03642b864ddc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>V\u00f5i lugu sellest, miks andmebaasi administraator peab meenutama oma programmeerija minevikku. <\/i><\/p>\n<h2>Eess\u00f5na<\/h2>\n<p>\nK\u00f5ik nimed on muudetud. Kokkusattumised on juhuslikud. Materjal esindab autori isiklikku arvamust.<\/p>\n<blockquote><p><b>Garantiiv\u00e4\u00e4rdenyse lahtiseletus:<\/b> <i>planeeritavas artiklite ts\u00fcklis ei ole p\u00f5hjalikku ja t\u00e4pset kirjeldust kasutatud tabelite ja skriptide kohta. Materjale ei saa kohe kasutada \"NII NAGU ON\". <br \/>\nEsiteks, materjali suuruse t\u00f5ttu, <br \/>\nteiseks, kuna see on suunatud reaalse kliendi prodaktsiooni baasi. <br \/>\nSeet\u00f5ttu sisaldavad artiklid vaid ideid ja kirjeldusi \u00fcldiselt. <br \/>\nV\u00f5ib-olla tulevikus s\u00fcsteem kasvab selleni, et see t\u00f5statatakse GitHubi, aga v\u00f5ib-olla ka mitte. Aeg n\u00e4itab.<\/i><\/p><\/blockquote>\n<p>\nLoo algus \u2014 \"<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/icl_services\/blog\/446314\/\">Kas sa m\u00e4letad, kuidas k\u00f5ik algas<\/a><\/noindex>\u00bb.<br \/>\nMis tulemuseks sai, k\u00f5ige \u00fcldisemates joontes \u2014 \"<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444988\/\">S\u00fcntes kui \u00fcks meetod PostgreSQLi j\u00f5udluse parandamiseks<\/a><\/noindex>\u00bb<\/p>\n<h2>Miks mul seda k\u00f5ike vaja on?<\/h2>\n<p>\nNo, esmalt, et ise ei unustaks, meenutades pensionile j\u00e4\u00e4des hiidp\u00e4evi. <br \/>\nTeiseks, et s\u00fcstematiseerida kirjutatut. Sest isegi mina, m\u00f5nikord, hakkan segadusse minema ja unustan eraldi osad. <\/p>\n<p>Ja mis k\u00f5ige t\u00e4htsam \u2014 \u00e4kki on see kellelegi kasulik ja aitab v\u00e4ltida rattaga taass\u00fcnni ja naelu korjamist. Teisis\u00f5nu, parandada oma kar maha (mitte Habr'i oma). Sest k\u00f5ige v\u00e4\u00e4rtuslikum asi selles maailmas on ideed. Peamine on leida idee. Idee teostamine reaalsuses on juba puhtalt tehniline k\u00fcsimus.<\/p>\n<p>Nii et, alustame, tasapisi...<\/p>\n<h2>Probleemi seadmine.<\/h2>\n<p><\/p>\n<h3>On olemas: <\/h3>\n<p>\nAndmebaas PostgreSQL (10.5), segatud koormusega (OLTP+DSS), keskmise-v\u00e4ikese koormusega, mis asub AWS pilves. <br \/>\nAndmebaasi j\u00e4lgimine puudub, infrastruktuuri j\u00e4lgimine on esindatud AWS standardsete vahenditega minimaalsetes seadistustes.<\/p>\n<h3>N\u00f5utav:<\/h3>\n<p>\nJ\u00e4lgida andmebaasi j\u00f5udlust ja seisundit, leida ja omada algandmeid raskete p\u00e4ringute optimeerimiseks andmebaasile.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>L\u00fchike eel\u00f5htu v\u00f5i lahenduste variandid<\/h2>\n<p>\nKuna, proovime k\u00f5igepealt lahenduse v\u00f5imalusi lahata v\u00f5rdleva anal\u00fc\u00fcsi valguses, kasu ja probleemidega insenerile, samas kui kasumi ja kahjude \u00fcle muretsegu need, kellele see kuulub vastavalt ametijuhendile.<\/p>\n<h3>Variant 1 - \u00abT\u00f6\u00f6tame n\u00f5udmisel\u00bb<\/h3>\n<p>\nJ\u00e4tame k\u00f5ik nii nagu on. Kui tellija ei ole rahul andmebaasi v\u00f5i rakenduse t\u00f6\u00f6v\u00f5ime v\u00f5i j\u00f5udlusega, teavitab ta DBA insenere e-posti teel v\u00f5i loob probleemist p\u00e4ringu tiketikaupa. <br \/>\nInsener, olles teate saanud, uurib probleemi, pakub lahendust v\u00f5i l\u00fckkab probleemi edasisse tulevikku, lootes, et see lahendatakse iseenesest ning varsti unustatakse ikkagi.<br \/>\n<b class=\"spoiler_title\">K\u00fcpsised ja pannkoogid, sinikad ja muhkud<\/b><b>K\u00fcpsised ja pannkoogid:<\/b><br \/>\n1. Ei ole vaja midagi liigset teha.<br \/>\n2. Alati on v\u00f5imalus vabandada ja kergek\u00e4eliselt asja k\u00e4sitleda. <br \/>\n3. \u00dcksjagu aega, mida saab kasutada omal soovil.<br \/>\n<b>Sinikad ja muhkud:<\/b><br \/>\n1. Varsti v\u00f5i hiljem hakkab tellija m\u00f5tlema eluteemale ja universumliku \u00f5iguse olemusele ning esitab endale taas k\u00fcsimuse \u2014 milleks ma maksan neile oma raha? Tagaj\u00e4rg on alati sama \u2014 k\u00fcsimus on vaid selles, millal tellija kaotab huvi ja loobub. Ja toiduahela t\u00fchjaks j\u00e4\u00e4b. See on kurb.<br \/>\n2. Inseneri areng \u2014 null.<br \/>\n3. T\u00f6\u00f6 planeerimise ja koormuse keerukused. <\/p>\n<h3>Variant 2 - \u00abTantsime trummide \u00fcmber, m\u00fc\u00fcme ja varustame\u00bb<\/h3>\n<p>\n<b>Punkt 1<\/b>-Miks me vajame seire s\u00fcsteemi? Saame k\u00f5ik p\u00e4ringud. K\u00e4ivitame erinevaid p\u00e4ringuid andmebaasi ja d\u00fcnaamiliste esitusviiside kaudu, aktiveerime mitmesuguseid loendureid, koondame k\u00f5ik tabelitesse ja perioodiliselt anal\u00fc\u00fcsime neid. Tulemuseks on ilusad v\u00f5i v\u00e4hem ilusad graafikud, tabelid ja raportid. Peamine on, et neid oleks palju, palju.<br \/>\n<b>Punkt2<\/b>-K\u00e4ivitame aktiivsuse - teeme kogu selle anal\u00fc\u00fcsi.<br \/>\n<b>Punkt3<\/b>-Valmistame ette mingi dokumendi, kutsume seda lihtsalt - \u00abkuidas korraldada andmebaasi\u00bb.<br \/>\n<b>Punkt4<\/b>-Kliendi n\u00e4hes seda graafikute ja numbrite ilu usub lapseoomes naiivsuses, et n\u00fc\u00fcd k\u00f5ik hakkab t\u00f6\u00f6le, varsti. Ja loobub lihtsalt ja valutult oma rahalistest ressurssidest. Juhtkond on samuti kindel - meie insenerid teevad head t\u00f6\u00f6d. Koormus on maksimaalne. <br \/>\n<b>Punkt5<\/b>-Korrata regulaarselt punkti 1.<br \/>\n<b class=\"spoiler_title\">K\u00fcpsised ja pannkoogid, sinikad ja muhkud<\/b><b>K\u00fcpsised ja pannkoogid: <\/b><br \/>\n1. Juhtide ja inseneride elu on lihtne, ettearvatav ja t\u00e4is aktiivsust. K\u00f5ik sumiseb, k\u00f5ik on h\u00f5ivatud. <br \/>\n2. Klientide elu ei ole samuti halb \u2014 nad on alati kindlad, et tuleb vaid veidi oodata ja k\u00f5ik laabub. Kui see ei toimi, noh, mis siis \u2014 maailm on eba\u00f5iglane, j\u00e4rgmises elus on ehk vedamine.<br \/>\n<b>Sinikad ja muhkud:<\/b><br \/>\n1. Varsti v\u00f5i hiljem leitakse kiirem teenusepakkuja, kes teeb sama asja pisut odavamalt. Ja kui tulemus on sama, miks maksta rohkem? See viib j\u00e4lle toidupauside kadumiseni.<br \/>\n2. See on igav. Nagu igasugune v\u00e4he m\u00f5testatud tegevus.<br \/>\n3. Nagu eelnevas variandis \u2014 arengut ei toimu. Kuid inseneri jaoks on miinus see, et eristavalt esimese variandi puhul tuleb siin pidevalt genereerida andmebaasi. See \u00f5tab aega. Mille v\u00f5iks kulutada enda kasuks. Sest kui sa enda eest ei hoolitse, siis ei hooli keegi sinust.<\/p>\n<h3>Variant 3 \u2014 pole vaja leiutada jalgratast, tuleb see osta ja s\u00f5ita.<\/h3>\n<p>\nTeiste firmade insenerid ei s\u00f6\u00f6 pitsa ja joo \u00f5lut asjata (ah, need head ajad Peterburi 90ndatel). Kasutame juba olemasolevaid monitooringus\u00fcsteeme, mis on v\u00e4lja t\u00f6\u00f6tatud, t\u00f6\u00f6d ja toovad \u00fcldiselt kasu (noh, v\u00e4hemalt nende loojatele).<br \/>\n<b class=\"spoiler_title\">K\u00fcpsised ja pannkoogid, sinikad ja muhkud<\/b><b>K\u00fcpsised ja pannkoogid:<\/b><br \/>\n1. Ei ole vajalik kulutada aega sellele, mis on juba v\u00e4lja m\u00f5eldud. Lihtsalt v\u00f5ta ja kasuta.<br \/>\n2. Monitooringus\u00fcsteemide loomine ei ole lollide teema; nad on kindlasti kasulikud.<br \/>\n3. Tootlikud monitooringus\u00fcsteemid annavad tavaliselt kasulikku filtreeritud teavet. <br \/>\n<b>Sinikad ja muhkud:<\/b><br \/>\n1. Insener ei ole siin insener, vaid lihtsalt kellegi teise toote kasutaja. V\u00f5i kasutaja.<br \/>\n2. Tellijat tuleb veenda, et on vaja osta midagi, millesse ta ei soovi s\u00fcveneda, ning mis tal ei peaks olema ka kohustuseks, ning aastab\u00fcrot on kinnitatud ja ei muutu. Seej\u00e4rel tuleb eraldi ressursid eraldada ja need konkreetse s\u00fcsteemi jaoks seadistada. Ehk siis k\u00f5igepealt tuleb maksta, maksta ja veel kord maksta. Tellija on aga kitsi. See on elu norm.<\/p>\n<h2>Mis siis teha - T\u0161ern\u00f5\u0161evski? Sinu k\u00fcsimus on t\u00e4iesti kohane. (c)<\/h2>\n<p>\nAntud konkreetses olukorras ja olemasolevate asjaolude t\u00f5ttu on v\u00f5imalik tegutseda veidi teisiti \u2014 <b>aga loome omaenda monitooringus\u00fcsteemi. <\/b><br \/>\n<img decoding=\"async\" alt=\"PostgreSQL p\u00e4ringute tulemuslikkuse j\u00e4lgimine. Osa 1 \u2014 aruandlus\" src=\"\/wp-content\/uploads\/2019\/04\/b59a3ad9e16b68c0fbc962a61d571c52.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMuidugi mitte s\u00fcsteemi t\u00e4ielikus m\u00f5ttes, see oleks liiga suurejooneline ja enesekehtestav, kuid v\u00e4hemalt v\u00f5iks endale \u00fclesande lihtsamaks teha ning koguda rohkem teavet j\u00f5udluse probleemide lahendamiseks. Et mitte sattuda olukorda \u2014 \u201emine sinna, ei tea kuhu, leia see, ei tea mida.\u201d<\/p>\n<h4>Millised on selle variandi plussid ja miinused:<\/h4>\n<p><b>Plussid:<\/b><br \/>\n1. See on huvitav. No v\u00e4hemalt huvitavam kui pidevad \u201eshrink datafile, alter tablespace jne.\u201d <br \/>\n2. Need on uued oskused ja uus areng. Mis tulevikus varem v\u00f5i hiljem toob v\u00e4lja teenitud preemiad ja maiustused.<br \/>\n<b>Miinused:<\/b><br \/>\n1. T\u00f6\u00f6 tuleb teha. T\u00f6\u00f6 tuleb palju teha. <br \/>\n2. Tuleb regulaarselt seletada, mis on kogu tegevuse m\u00f5te ja perspektiivid.<br \/>\n3. Millegagi tuleb ohverdada, kuna inseneri ainus saadaval olev ressurss \u2014 aeg \u2014 on Universumi piiratud. <br \/>\n<b>4. K\u00f5ige hullem ja k\u00f5ige ebameeldivam<\/b> \u2014 v\u00f5ib tulemuseks olla midagi, mis on \u201eEi hiirepojake, ei konn, vaid tundmatu loom.\u201d<\/p>\n<p><b>Kes ei riski, see ei joo \u0161ampanjat.<\/b><br \/>\nNii et \u2014 algab k\u00f5ige huvitavam osa.<\/p>\n<h2>\u00dcldine idee \u2014 skeemiliselt<\/h2>\n<p>\n<img decoding=\"async\" alt=\"PostgreSQL p\u00e4ringute tulemuslikkuse j\u00e4lgimine. Osa 1 \u2014 aruandlus\" src=\"\/wp-content\/uploads\/2019\/04\/d1ae2ddc1d4c43353fe93eebdaa8b81a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n(<i>Illustratsioon on v\u00f5etud artiklist<\/i> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444988\/\">S\u00fcntes kui \u00fcks meetod PostgreSQLi j\u00f5udluse parandamiseks<\/a><\/noindex>\u00bb)<\/p>\n<p>Selgitus:<\/p>\n<ul>\n<li> Sihtandmebaasi installitakse PostgreSQLi standaardne laiendus \u2014 \u201epg_stat_statements.\u201d <\/li>\n<li>J\u00e4lgimisandmebaasis loome teenuste tabelite komplekti pg_stat_statements ajaloo salvestamiseks algfaasis ning edaspidiste m\u00f5\u00f5dikute ja j\u00e4lgimise seadistamiseks.<\/li>\n<li> J\u00e4lgimisseadmestikus loome bash-skriptide komplekti, sealhulgas t\u00f5rgete genereerimiseks pileti s\u00fcsteemis. <\/li>\n<\/ul>\n<h2>Teenustabelid<\/h2>\n<p>\nAlustuseks skeemiliselt lihtsustatud ERD, mis me l\u00f5puks saime:<br \/>\n<img decoding=\"async\" alt=\"PostgreSQL p\u00e4ringute tulemuslikkuse j\u00e4lgimine. Osa 1 \u2014 aruandlus\" src=\"\/wp-content\/uploads\/2019\/04\/03d29f4d6932d470d9d88651cbf0c715.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b class=\"spoiler_title\">Tabelite l\u00fchike kirjeldus<\/b><b>endpoint <\/b> \u2014 host, \u00fchenduspunkt instantsiga<br \/>\n<b>database <\/b> \u2014 andmebaasi parameetrid<br \/>\n<b>pg_stat_history <\/b> \u2014 ajaline tabel, mis salvestab ajutised n\u00e4idud pg_stat_statements vaates sihtandmebaasist<br \/>\n<b>metric_glossary <\/b> \u2014 j\u00f5udluse m\u00f5\u00f5dikute s\u00f5nastik<br \/>\n<b>metric_config <\/b> \u2014 konkreetsete m\u00f5\u00f5dikute konfiguratsioon<br \/>\n<b>metric <\/b> \u2014 konkreetne m\u00f5\u00f5dik j\u00e4lgitavale p\u00e4ringule<br \/>\n<b>metric_alert_history <\/b> \u2014 j\u00f5udluse hoiatusite ajalugu<br \/>\n<b>log_query <\/b> \u2014 teenustabel, mis salvestab PostgreSQL logifailist anal\u00fc\u00fcsitud kirjeid, mis laaditakse AWSt<br \/>\n<b>baseline <\/b> \u2014 ajavahemiku parameetrid, mida kasutatakse baasi alusena <br \/>\n<b>checkpoint <\/b> \u2014 andmebaasi olekukontrolli m\u00f5\u00f5dikute konfiguratsioon<br \/>\n<b>checkpoint_alert_history <\/b> \u2014 andmebaasi olekukontrolli m\u00f5\u00f5dikute hoiatusite ajalugu<br \/>\n<b>pg_stat_db_queries <\/b> \u2014 aktiivsete p\u00e4ringute teenustabel <br \/>\n<b>activity_log <\/b> \u2014 aktiivsuse logi teenustabel <br \/>\n<b>trap_oid <\/b> \u2014 trap konfiguratsiooni teenustabel<\/p>\n<p><\/p>\n<h2>Etapp 1 \u2014 kogume j\u00f5udluse statistikat ja saame aruanded<\/h2>\n<p>\nStatistika talletamiseks kasutatakse tabelit <b>pg_stat_history<\/b><br \/>\n<b class=\"spoiler_title\">pg_stat_history tabeli struktuur<\/b><\/p>\n<pre>\n                                          Tabel \"public.pg_stat_history\"\n       Veerg        |            T\u00fc\u00fcp             |                          Muutujad\n---------------------+-----------------------------+-------------------------------------------\n id                  | t\u00e4isarv                     | mitte null vaikimisi nextval('pg_stat_history_id_seq'::regclass)\n snapshot_timestamp  | ajatemperatuur ilma ajav\u00f6\u00f6ndita |\n database_id         | t\u00e4isarv                     |\n dbid                | oid                         |\n userid              | oid                         |\n queryid             | suur arv                   |\n query               | tekst                       |\n calls               | suur arv                   |\n total_time          | kahekordne t\u00e4psus          |\n min_time            | kahekordne t\u00e4psus          |\n max_time            | kahekordne t\u00e4psus          |\n mean_time           | kahekordne t\u00e4psus          |\n stddev_time         | kahekordne t\u00e4psus          |\n rows                | suur arv                   |\n shared_blks_hit     | suur arv                   |\n shared_blks_read    | suur arv                   |\n shared_blks_dirtied | suur arv                   |\n shared_blks_written | suur arv                   |\n local_blks_hit      | suur arv                   |\n local_blks_read     | suur arv                   |\n local_blks_dirtied  | suur arv                   |\n local_blks_written  | suur arv                   |\n temp_blks_read      | suur arv                   |\n temp_blks_written   | suur arv                   |\n blk_read_time       | kahekordne t\u00e4psus          |\n blk_write_time      | kahekordne t\u00e4psus          |\n baseline_id         | t\u00e4isarv                     |\nIndeksid:\n    \"pg_stat_history_pkey\" PRIIMARNE V\u00d5TI, btree (id)\n    \"database_idx\" btree (database_id)\n    \"queryid_idx\" btree (queryid)\n    \"snapshot_timestamp_idx\" btree (snapshot_timestamp)\nV\u00e4lisv\u00f5tmiste piirangud:\n    \"database_id_fk\" V\u00c4LISV\u00d5TI (database_id) VIITAB andmebaas(id) KUSTUTA CASCADE<\/pre>\n<p>\nNagu n\u00e4ha, esitab tabel lihtsalt kumulatiivseid andmeid kuvamisest <b>pg_stat_statements <\/b> sihtandmebaasis.<\/p>\n<h3>Selle tabeli kasutamine on v\u00e4ga lihtne<\/h3>\n<p>\n<b>pg_stat_history<\/b> ja see esindab iga tunni jooksul kogunenud p\u00e4ringute t\u00e4itmise statistikat. Iga tunni alguses, p\u00e4rast tabeli t\u00e4itmist, statistika <b>pg_stat_statements<\/b> nulldatakse abil <b>pg_stat_statements_reset()<\/b>.<br \/>\nM\u00e4rkus: <i>statistika kogutakse p\u00e4ringute jaoks, mille t\u00e4itmise kestus \u00fcletab 1 sekundi.<\/i><br \/>\n<b class=\"spoiler_title\">Tabeli t\u00e4itmine 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 'LOODUS ALLA KASUTATAVAD';\n\t\t\n\t\t--\u00dchenda siht DB-ga\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 % ja dbname % ',endpoint_rec.host,database_rec.name;\n\t\tRAISE NOTICE 'Loodud snapshoot pg_stat_statements andmebaasi %',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 \t\n            local_blks_read,local_blks_dirtied,local_blks_written,temp_blks_read,temp_blks_written, \t\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 'Loodud snapshoot pg_stat_statements kysimustega, mille min_time on suurem kui 1000ms';\n\t\n        FOR pg_stat_snapshot IN\n          --K\u00f5ik kysimused maks_time suurem kui 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 \t\n            local_blks_read,local_blks_dirtied,local_blks_written,temp_blks_read,temp_blks_written, \t\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>Seet\u00f5ttu, p\u00e4rast teatud perioodi tabelis <b>pg_stat_history<\/b> on meil tabeli sisu kogum <b>pg_stat_statements <\/b>sihtandmebaasist. <\/p>\n<h2>Tegelikult raportimine<\/h2>\n<p>\nLihtsate p\u00e4ringute abil on v\u00f5imalik saada \u00fcsna kasulikke ja huvitavaid aruandeid.<\/p>\n<h2>Kogutud andmed m\u00e4\u00e4ratud ajavahemiku jooksul<\/h2>\n<p><b class=\"spoiler_title\">P\u00e4ring<\/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>DB aeg<\/h4>\n<blockquote><p>to_char(interval '1 millisecond' * pg_total_stat_history_rec.total_time, 'HH24:MI:SS.MS')<\/p><\/blockquote>\n<p><\/p>\n<h4>I\/O aeg<\/h4>\n<blockquote><p>to_char(interval '1 millisecond' * (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 koguaegade p\u00f5hjal<\/h3>\n<p><b class=\"spoiler_title\">P\u00e4ring<\/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 KOKKU EXECUTION AEG\n|   #|    queryid|      kutseid|    kutseid %|                kokku_aeg (ms) |  db_time %\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 kokku I\/O aeg<\/h4>\n<p><b class=\"spoiler_title\">P\u00e4ring<\/b><\/p>\n<pre><code class=\"plaintext\">VALI \n  queryid , \n  SUM(kutseid) AS kutseid ,\n  SUM(blk_lugemise_aeg + blk_kirjutamise_aeg)  AS io_aeg\nKUST \n  pg_stat_historia\nKUS \n  queryid EI OLE NULL JA \n  andmebaasi_id = ANDMEBAASI_ID  JA\n  hetk_tempus BETWEEN ALGUS_AEG ja L\u00d5PP_AEG\nR\u00dcHMITA QUERYID \nKORDA 3 DESC \nPIIRANG 10<\/code><\/pre>\n<pre>----------------------------------------------------------------------------------------\n| TOP10 SQL KOGUSE I\/O AEG ASJA\n|   #|    queryid|      kutsed|    kutsed %|                   I\/O aeg (ms)|db I\/O aeg %\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 maksimaalse t\u00e4itmise aja j\u00e4rgi<\/h4>\n<p><b class=\"spoiler_title\">P\u00e4ring<\/b><\/p>\n<pre><code class=\"plaintext\">VALI \n  id NIMETAMISEKS , \n  queryid , \n  snapshot_timestamp ,  \n  max_time \nKUSTUTA \n  pg_stat_history \nKUS \n  queryid EI OLE NULL JA \n  database_id = DATABASE_ID  JA\n  snapshot_timestamp VAHEMAL BEGIN_TIMEPOINT JA END_TIMEPOINT\nKORDA 4 DESC \nPIIRANG 10<\/code><\/pre>\n<p><\/p>\n<pre>-----------------------------------------------------------------------------------------\n| TOP10 SQL MAXIMAALNE SOORDEMI AEG\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 jagatud puhvri lugemine\/kirjutamine<\/h4>\n<p><b class=\"spoiler_title\">P\u00e4ring<\/b><\/p>\n<pre><code class=\"plaintext\">VALI \n  id AS snapshotid , \n  queryid ,\n  snapshot_timestamp , \n  shared_blks_read , \n  shared_blks_written \nKUST \n  pg_stat_history\nKUS \n  queryid EI OLE NULL JA \n  database_id = DATABASE_ID  JA\n  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT JA END_TIMEPOINT JA\n  ( shared_blks_read &gt; 0 V\u00d5I shared_blks_written &gt; 0 )\nKORDA 4 ALLA  , 5 ALLA \nPIIRA 10<\/code><\/pre>\n<pre>--------------------------------------------------------------------------------------------\n| TOP10 SQL \u00d6HIKUDE JAGAMISSE P\u00c4RAST LOETLETUD BLOKKE\n|   #|          hetkepilt| hetkepildi ID|    p\u00e4ringu ID|   jagatud blokeeritud lugemine|  jagatud blokeeritud kirjutamine\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>P\u00e4ringute jaotumise histogramm maksimaalse t\u00e4itmise aja j\u00e4rgi<\/h4>\n<p><b class=\"spoiler_title\">P\u00e4ringud<\/b><\/p>\n<pre><code class=\"plaintext\">VALI  \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\nKUSTA  \n  pg_stat_history \nKUS  \n  queryid EI OLE NULL JA\n  database_id = DATABASE_ID  JA\n  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT JA END_TIMEPOINT ;\n\nVALI  \n  SUM(calls) AS calls\nKUSTA  \n  pg_stat_history \nKUS  \n  queryid EI OLE NULL JA\n  database_id = DATABASE_ID  JA\n  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT JA END_TIMEPOINT JA \n  ( max_time &gt;= hist_current_min JA  max_time &lt; hist_current_max ) ;\n<\/code><\/pre>\n<pre>|-----------------------------------------------------------------------------------------------\n| MAX_TIME HISTOGRAM\n| KOKKU K\u00d5NE : 33851920\n| MIN AEG  : 00:00:01.063\n| MAX AEG  : 00:02:01.869\n---------------------------------------------------------------------------------\n|                      min kestus|                      max kestus|     k\u00f5ned\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 KOHANDUSED P\u00c4EVAK\u00dcSIMUSI<\/h4>\n<p><b class=\"spoiler_title\">P\u00e4ringud<\/b><\/p>\n<pre><code class=\"plaintext\">--pg_qps.sql\n--K\u00fcsimuste arv sekundis\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 'VIGA - pole leidnud pg_stat_history id-ga = %',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 Snapshots tellitud QPS numbrite j\u00e4rgi\n-----------------------------------------------------------------------------------------------------------------------------------------------\n|    #|          snapshot| snapshotID|      calls|                      total dbtime|        QPS|                          I\/O aeg| I\/O aeg %\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>Tunnine t\u00e4itmise ajalugu QueryPerSeconds ja I\/O aja j\u00e4rgi<\/h4>\n<p><b class=\"spoiler_title\">P\u00e4ring<\/b><\/p>\n<pre><code class=\"plaintext\">VALI \n  id , \n  snapshot_timestamp ,\n  calls , \t\n  total_time , \n  ( vali pg_qps( id )) KPS ,\n  blk_read_time ,\n  blk_write_time\nKUST \n  pg_stat_history\nKUS \n  queryid ON NULL JA \n  database_id = DATABASE_ID  JA\n  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT JA END_TIMEPOINT\nKORDA 2\n<\/code><\/pre>\n<pre>|-----------------------------------------------------------------------------------------------\n| TUNNID AJAOTAMISE AJALUGU QueryPerSeconds ja I\/O Aega\n-----------------------------------------------------------------------------------------------------------------------------------------------\n| K\u00dcSIMUS PER SEKUND AJALUGU\n|    #|          hetk| hetkID|      k\u00f5ned|                      koguaeg|        QPS|                          I\/O aeg| I\/O aja %\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>K\u00f5ik SQL-valikute tekst<\/h4>\n<p><b class=\"spoiler_title\">P\u00e4ring<\/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>Kokkuv\u00f5te<\/h2>\n<p>\nNagu n\u00e4ha, on \u00fcsna lihtsate vahenditega v\u00f5imalik saada palju kasulikku teavet andmebaasi koormusest ja olekust. <\/p>\n<p><b>M\u00e4rkus:<\/b>Kui p\u00e4ringutes fikseerida queryid, saame ajaloo iga p\u00e4ringu kohta (ruumi s\u00e4\u00e4stmise eesm\u00e4rgil on eraldi p\u00e4ringu kohta aruanded vahele j\u00e4etud).<\/p>\n<p>Nii et p\u00e4ringu tulemuslikkuse statistika on olemas ja kogutakse.<br \/>\nEsimene etapp 'statistika kogumine' on l\u00f5petatud.<\/p>\n<p>Saame liikuda teise etapi, 'tulemuse m\u00f5\u00f5dikute seadistamise' juurde.<br \/>\n<img decoding=\"async\" alt=\"PostgreSQL p\u00e4ringute tulemuslikkuse j\u00e4lgimine. Osa 1 \u2014 aruandlus\" src=\"\/wp-content\/uploads\/2019\/04\/a893e49280d4cb425e4667a5c51d2397.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Aga see on juba hoopis teine lugu.<\/b><\/p>\n<p><i>J\u00e4tkub\u2026<\/i><br \/>\n<br \/>Allikas: <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.0.1 - 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. \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\" \/>\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\/monitoring-proizvoditelnosti-zaprosov-postgresql-chast-1-reporting\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.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\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/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\udd47PostgreSQL-i p\u00e4ringute j\u00f5udluse j\u00e4lgimine. Osa 1 \u2014 aruandlus | ProHoster","description":"Insener \u2014 ladina keeles t\u00e4hendab see 'inspireeritud'. Insener suudab k\u00f5ike. (c) R.Dizel. Epigrammid. V\u00f5i lugu sellest, miks andmebaasi administraator peab oma programmeerimiskogemust meeles pidama. Eess\u00f5na K\u00f5ik nimed on muudetud. Kokkusattumised on juhuslikud. Materjal on autori isiklik arvamus. Garantii puudub: kavandatud artiklite ts\u00fcklis ei ole detailset ja t\u00e4pset kirjeldust kasutatud tabelitest.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/monitoring-proizvoditelnosti-zaprosov-postgresql-chast-1-reporting","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\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. \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","og:url":"https:\/\/prohoster.info\/et\/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\/et\/wp-json\/wp\/v2\/posts\/32353","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=32353"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32353\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/24168"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=32353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=32353"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=32353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}