{"id":78742,"date":"2020-04-21T19:42:46","date_gmt":"2020-04-21T17:42:46","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov"},"modified":"2020-04-21T19:42:46","modified_gmt":"2020-04-21T17:42:46","slug":"promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov","title":{"rendered":"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-tuunimisele: katsetused andmebaaside \u00fcle. Nikolai Samokhvalov","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Tutvustan teile Nikolai Samohvalovi ettekande \"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL tuunimisele: eksperimendid andmebaasidega\" kokkuv\u00f5tet.<\/strong><\/p>\n<p><\/p>\n<p>Shared_buffers = 25% \u2013 kas see on palju v\u00f5i v\u00e4he? V\u00f5i just paras? Kuidas m\u00f5ista, kas see \u2013 pigem vananenud \u2013 soovitus sobib teie konkreetsesse olukorda?<\/p>\n<p><\/p>\n<p>On aeg l\u00e4heneda postgresql.conf parameetrite seadistamise k\u00fcsimusele \"t\u00f5siselt\". Mitte pimedate \"autotuunerite\" v\u00f5i vananenud n\u00f5uannete abil artiklitest ja blogidest, vaid l\u00e4htudes:<\/p>\n<p><\/p>\n<ol>\n<li>t\u00e4pselt l\u00e4bi viidud eksperimendi tulemustest andmebaasides, mis toimuvad automaatselt, suure m\u00f5juga ning tingimustes, mis on v\u00f5imalikult sarnased \"realsituatsioonidele\".<\/li>\n<li>s\u00fcgavale arusaamale andmebaasis\u00fcsteemi ja operatsioonis\u00fcsteemi t\u00f6\u00f6 erip\u00e4radest.<\/li>\n<\/ol>\n<p><\/p>\n<p>Kasutades Nancy CLI (<noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/postgres.ai\/nancy\">https:\/\/gitlab.com\/postgres.ai\/nancy<\/a><\/noindex>), vaatleme konkreetset n\u00e4idet \u2013 s\u00f5davargad shared_buffers \u2013 erinevates olukordades, erinevates projektides ja p\u00fc\u00fcame v\u00e4lja selgitada, kuidas leida meie infrastruktuuri, andmebaasi ja koormuse jaoks optimaalne seadistus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/a15b93734b6563abaec4a713c975732a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>R\u00e4\u00e4gime katsetustest andmebaasidega. See on lugu, mis on kestnud \u00fcle kuue kuu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/e77255c4abaa2a01ae37fe888fe67db7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Natuke minust. Kogemus postgresega on juba \u00fcle 14 aasta. Olen loonud mitmeid sotsiaalv\u00f5rgustikku kuuluvaid ettev\u00f5tteid. Igas neist on kasutatud ja kasutatakse postgressi.<\/p>\n<p><\/p>\n<p>Samuti on RuPostgres grupp Meetup'is, saavutades 2. koha maailmas. J\u00f5uame aeglaselt 2000 inimeseni. RuPostgres.org.<\/p>\n<p><\/p>\n<p>Ja erinevate konverentside \u041f\u041a, sealhulgas Highload, vastutan andmebaaside eest, eelk\u00f5ige Postgresi eest alates selle loomisest.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/fa009b50f1c0293eee80fc03fd2c05f0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Viimastel aastatel olen taas alustanud oma Postgresi konsultatsiooni praktikat 11 ajav\u00f6\u00f6ndis siit.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/550c3ddcd516adca14d2b3de9c34b7ff.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja kui ma seda paar aastat tagasi tegin, olin ma teinud natuke pausi aktiivsest k\u00e4sitsi t\u00f6\u00f6 tegemisest Postgresiga, ilmselt alates 2010. aastast. Olin \u00fcllatunud, kui v\u00e4he on DBA t\u00f6\u00f6de igap\u00e4evaselt muutunud, kui palju k\u00e4sitsi \u00fctlemist on endiselt vajalik. Ja ma m\u00f5tlesin kohe, et siit on midagi valesti, vajame rohkem automatiseerimist.<\/p>\n<p><\/p>\n<p>Kuna k\u00f5ik toimus eemal, olid enamik kliente pilvemaailmas. Ja palju on juba silmaga n\u00e4htavalt automatiseeritud. Sellest r\u00e4\u00e4gin veidi hiljem. T. e. k\u00f5ik see t\u00f5i mind ideeni, et peaks olema rida t\u00f6\u00f6riistu, st mitte mingi platvorm, mis automatiseerib praktiliselt k\u00f5ik DBA tegevused, et saaks hallata suurt hulka andmebaase.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/b02097f0bb23fa9d7c30e38ab9f3de7b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Selles ettekandes ei tule olema:<\/p>\n<p><\/p>\n<ul>\n<li>\u201eH\u00f5bedasi kuulikesi\u201c ja v\u00e4iteid nagu \u2013 seadke 8 GB v\u00f5i 25 % shared_buffers, ja k\u00f5ik on h\u00e4sti. Shared_buffersist ei tule palju juttu. <\/li>\n<li>Hulku \"s\u00fcgavamaid kihte\". <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/ccea359ec78a967c150ddcedc3e50a88.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mis juhtub?<\/p>\n<p><\/p>\n<ul>\n<li>On olemas optimeerimisprintsiibid, mida me rakendame ja arendame. Olemas on ideed, mis meie teel tekkivad, ja erinevad t\u00f6\u00f6riistad, mille me enamikul juhtudel loome avatud allika (Open Source) p\u00f5him\u00f5tetel. Lisaks sellele on meie pileti s\u00fcsteem ja praktiliselt kogu suhtlus avatud allikas. Saate j\u00e4lgida, mida me praegu teeme, milline on j\u00e4rgmine versioon jne. <\/li>\n<li>Samuti jagame kogemusi nende printsiipide ja t\u00f6\u00f6riistade kasutamisest erinevates ettev\u00f5tetes: alates v\u00e4ikestest idufirmadest kuni suurte organisatsioonideni. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/86e6f379726dec814aca616a30d36a2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas see k\u00f5ik areneb?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c1422d9f2945e717c6ebb31f5fef6329.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Esiteks, DBA peamine \u00fclesanne, peale instantside loomise ja varukoopiate haldamise, on kitsaskohade otsimine ja j\u00f5udluse optimeerimine.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/8e682ca8666e94d6688348ebe4540327.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Praegu n\u00e4eb see v\u00e4lja nii. Me j\u00e4lgime statistikat, n\u00e4eme teatud asju, kuid meil puuduvad m\u00f5ned detailid. Alustame s\u00fcvitsi uurimist, tavaliselt k\u00e4sitsi, ja m\u00f5istame, mida sellega edasi teha.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/04599422ea6b6d57c79a4e48ba2db8b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja on kaks l\u00e4henemist. Pg_stat_statements \u2013 standardlahendus aeglaste p\u00e4ringute tuvastamiseks. Ja Postgresse logide anal\u00fc\u00fcs pgBadgeri abil.<\/p>\n<p><\/p>\n<p>Igal l\u00e4henemisel on t\u00f5sised puudused. Esimese l\u00e4henemisega viskame v\u00e4lja k\u00f5ik parameetrid. Ja kui me n\u00e4eme gruppe SELECT * FROM table where veerg on v\u00f5rdne m\u00e4rgiga \u00ab?\u00bb v\u00f5i \u00ab$\u00bb alates Postgres 10 versioonist. Me ei tea, kas tegemist on index scan'i v\u00f5i seq scan'iga. See s\u00f5ltub suuresti parameetrist. Kui sisestataks harva esinev v\u00e4\u00e4rtus, toimub index scan. Kui sisestataks v\u00e4\u00e4rtus, mis h\u00f5lmab 90% tabelist, toimub ilmselt seq scan, sest Postgres teab statistikat. See on suur puudus pg_stat_statements, kuigi mingid t\u00f6\u00f6d on k\u00e4imas.<\/p>\n<p><\/p>\n<p>Logianal\u00fc\u00fcsides on peamine puudus see, et te ei saa endale lubada \u00ablog_min_duration_statement = 0\u00bb, nagu tavaliselt. Ja sellest r\u00e4\u00e4gime ka. Seega ei n\u00e4e te kogu pilti. Ja mingi p\u00e4ring, mis on v\u00e4ga kiire, v\u00f5ib tarbida tohutult ressursse, kuid te ei n\u00e4e seda, sest see j\u00e4\u00e4b teie l\u00e4vendist madalamale.<\/p>\n<p><\/p>\n<p><strong>Kuidas DBA-d lahendavad leitud probleeme?<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/5e57fefdec6256f82045aaac037b516c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e4iteks leidsime mingi probleemi. Mida tavaliselt tehakse? Kui olete arendaja, siis teete midagi m\u00f5nes instance'is, mis ei ole sellise suurusega. Kui olete DBA, siis on teil staging. Ja see v\u00f5ib olla ainult \u00fcks. Ja see on olnud pool aastat maas. Ja te m\u00f5tleksite, et l\u00e4hete productioni. Ja isegi kogenud DBA-d kontrollivad hiljem productionis, koopia peal. Ja juhtuvad juhtumid, kus luuakse ajutine indeks, veendutakse, et see aitab, kustutatakse see ja antakse arendajatele, et nad saaksid selle migreerimisfailidesse lisada. Nii et selline jama toimub praegu. Ja see on probleem.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/402e80c7e5fbca6a054c0c9ec61e5fe3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Konfigureerimist timmida.<\/li>\n<li>Indeksite kogumit optimeerida. <\/li>\n<li>Muutke SQL-p\u00e4ringut (see on k\u00f5ige keerulisem meetod).<\/li>\n<li>Lisage ressursse (keb k\u00f5ige lihtsam meetod enamikul juhtudel).<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/8a6b3cd56e0df5c7908714926ba1eb05.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nende asjadega on palju. Postgresis on palju nuppe. Tuleb palju teada. Postgresis on palju indekseid, t\u00e4nu ka sellele konverentsi korraldajatele. Ja k\u00f5ike seda tuleb teada, ja just see tekitab mitte DBA-de seas tunde, et DBA-d tegelevad musta maagia ja asjadega. See t\u00e4hendab, et tuleb umbes 10 aastat tegeleda, et hakata seda t\u00f5eliselt m\u00f5istma.<\/p>\n<p><\/p>\n<p>Ja olen selle musta maagia vastu. Soovin, et k\u00f5ik oleks tehnoloogial, mitte intuitsioonil.<\/p>\n<p><\/p>\n<p><strong>Elulised n\u00e4ited<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/70b11c3df9c41c66570635d5f309ed24.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Olen seda n\u00e4inud v\u00e4hemalt kahes projektis, sealhulgas oma omas. J\u00e4rjekordne blogipostitus \u00fctleb meile, et v\u00e4\u00e4rtus 1 000 default_statistict_target jaoks on hea. Hea, proovime seda tootmises.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/0b4c2bd6f73df06967c94d5d78b07279.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja n\u00fc\u00fcd, kasutades oma t\u00f6\u00f6riista kaks aastat hiljem ning tehes katseid andmebaasidega, millest t\u00e4na r\u00e4\u00e4gime, saame v\u00f5rrelda, mis oli ja mis on muutunud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/3564eade6532003d2279c2736ab6d733.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja selleks peame looma eksperimendi. See koosneb neljast osast. <\/p>\n<p><\/p>\n<ul>\n<li>Esimene on keskkond. Meil on vaja riistvara. Ja kui ma tulen m\u00f5nda ettev\u00f5ttesse ja s\u00f5lmime lepingu, siis \u00fctlen, et nad annaksid mulle sama riistvara nagu tootmises. Iga teie Meister jaoks vajame v\u00e4hemalt \u00fchte sellist riistvara. Olgu see virtuaalne masin Amazonis v\u00f5i Google\u2019is, v\u00f5i mul on just selline riistvara vajalik. T\u00f5epoolest, soovin keskkonda taastada. Keskkonna m\u00f5istesse kuulub ka Postgressi p\u00f5hiversioon. <\/li>\n<li>Teine osa on meie teadusuuringute objekt. See on andmebaas. Selle saab luua mitmel viisil. N\u00e4itan, kuidas. <\/li>\n<li>Kolmas osa on koormus. See on k\u00f5ige keerulisem hetk. <\/li>\n<li>Ja neljas osa on see, mida me kontrollime, st millega me v\u00f5rreldes t\u00f6\u00f6tame. Oletame, et saame konfiguratsioonis muuta \u00fchte v\u00f5i mitut parameetrit, v\u00f5i saame luua indeksi jne. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/8ccd09ac4cdd336618413375617c10a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Me alustame eksperimenti. Siin on pg_stat_statements. Vasakul on see, mis oli. Paremal on see, mis on n\u00fc\u00fcd.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/6f82d7e25a77b700f2ddb01f42a861a2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vasakul default_statistics_target = 100, paremal = 1 000. Me n\u00e4eme, et see aitas meid. \u00dcldiselt on k\u00f5ik 8 % paremaks muutunud.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/52dda8fb5fbcb9beecaa1eda8443a374.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuid kui me scrollime allapoole, siis seal on pgBadger v\u00f5i pg_stat_statements-i p\u00e4ringugrupid. Siin on kaks varianti. Me n\u00e4eme, et m\u00f5ni p\u00e4ring on langenud 88 %. Ja siin tuleb inseneri l\u00e4henemine. Saame s\u00fcgavamale kaevuda, sest on huvitav, miks see langes. Tuleb m\u00f5ista, mis statistika oli. Miks suuremad buketid statistikas toovad halvemad tulemused.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/4e6dfc04af4b3fc2b626dd46c08bdf66.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V\u00f5i me ei kaevu, vaid teeme 'ALTER TABLE \u2026 ALTER COLUMN' ja toome tagasi 100 buketti selle veeru statistikas. Ja edasi saame veel eksperimendi k\u00e4igus veenduda, et see lahendus aitas. K\u00f5ik. See on inseneri l\u00e4henemine, mis aitab meil n\u00e4ha pilti ja teha otsuseid andmete, mitte intuitsiooni p\u00f5hjal.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c87df172b994a4523478beebaf4a0275.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/9e766aa4348bd1a77b697e3179d84bbd.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00f5ned n\u00e4ited teistest valdkondadest. Testides on CI-testid olnud juba aastaid. \u00dckski projekt ei suuda enam m\u00f5istlikult eksisteerida ilma automaatsete testideta.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/b6c21981dc8b2b285973ae42199e2b4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teistes t\u00f6\u00f6stusharudes: lennunduses, autot\u00f6\u00f6stuses, kui testime aerod\u00fcnaamikat, on meil ka v\u00f5imalus eksperimente teha. Me ei hakka kohe jooniste j\u00e4rgi midagi kosmosesse saatma ega tooma autot kohe teele. N\u00e4iteks on olemas aerod\u00fcnaamiline tunnel. <\/p>\n<p><\/p>\n<p>Teiste valdkondade vaatluste p\u00f5hjal saame teha j\u00e4reldusi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/cef02ea9280e5795d1e593c600f0541b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Esiteks, meil on spetsiaalne keskkond. See on tootmisprotsessile l\u00e4hedane, kuid mitte t\u00e4iesti sama. Selle peamine omadus on, et see peaks olema odav, korduv ja v\u00f5imalikult automatiseeritud. Lisaks peavad olema erivahendid detailseks anal\u00fc\u00fcsiks.<\/p>\n<p><\/p>\n<p>T\u00f5en\u00e4oliselt, kui me lennuki k\u00e4ivitame ja lendame, on meil v\u00e4hem v\u00f5imalusi uurida iga millimeetrit tiiva pinnast kui aerod\u00fcnaamilises tunnelis. Meil on rohkem vahendeid diagnostikaks. Saame endale lubada rohkem k\u00f5ike rasket, mida me ei saa lennuki \u00f5hus olles kaasas kanda. Sama kehtib ka Postgresi puhul. Me saame m\u00f5nes olukorras katsetuse k\u00e4igus aktiveerida otsese p\u00e4ringute logimise. Ja me ei soovi seda tootmises teha. V\u00f5ib-olla aktiveerime selle plaanide puhul auto_explaini kaudu.<\/p>\n<p><\/p>\n<p>Ja nagu ma juba \u00fctlesin, k\u00f5rge automatiseerituse tase t\u00e4hendab, et me vajutasime nuppu ja kordasime. Nii peab see olema, et katsetusi oleks palju ja et see oleks pidev protsess.<\/p>\n<p><\/p>\n<p>Nancy CLI \u2013 andmebaasikatsetuste alussamm.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/f8303df21f309fb209929acec260b757.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja nii me sellise asja tegime. T. e. ma r\u00e4\u00e4kisin nendest ideedest juunis, peaaegu aasta tagasi. Ja meil on juba Open Source'is nii nimetatud Nancy CLI. See on alus andmebaasalaste laborite ehitamiseks.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/0ed3c72461123745be4fa9e58455baa0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/postgres-ai\/nancy\">Nancy<\/a><\/noindex> - See on Open Source'is, Gitlabis. V\u00f5ite vaadata, v\u00f5ite proovida. Olen slaidides lingi j\u00e4tnud. Saate sellele klikkida ja seal ongi. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/postgres-ai\/nancy\/-\/blob\/master\/help\/nancy_run.md\">help<\/a><\/noindex> k\u00f5igi parameetrite kohta.<\/p>\n<p><\/p>\n<p>Muidugi, seal on veel palju arendust\u00f6\u00f6d. Ideid on palju. Kuid see, mida me juba praktiliselt igap\u00e4evaselt kasutame, on juba olemas. Ja kui meil tekib m\u00f5te \u2013 mis juhtub, kui kustutame 40 000 000 rida, kui k\u00f5ik takerdub IO-sse, siis saame katsetada ja vaadata l\u00e4hemalt, et m\u00f5ista, mis toimub, ning seej\u00e4rel proovida seda jooksvalt parandada. Ehk teeme katse. N\u00e4iteks kohandame midagi ja vaatame, mis l\u00f5pptulemus on. Ja seda me teeme mitte produktsioonis. See on idee sisu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c22d332de4b45d604dfb9c5a95404fd6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kus see v\u00f5iks t\u00f6\u00f6tada? See v\u00f5ib t\u00f6\u00f6tada kohalikult, st seda saab teha kuskil, isegi MacBookil. Vajalik on Docker, l\u00e4hme. Ja k\u00f5ik. Saame k\u00e4ivitada mingisuguses instance'is riistvara peal v\u00f5i virtuaalkeskkonnas, kus iganes.<\/p>\n<p><\/p>\n<p>Ja on ka v\u00f5imalus kaugjuhtida Amazonis EC2 instantsul, spottides. See on v\u00e4ga hea v\u00f5imalus. N\u00e4iteks tegime eile rohkem kui 500 katset i3 instantsil, alustades k\u00f5ige v\u00e4iksemast ja l\u00f5petades i3-16-xlarge'iga. Ja need 500 katset maksid meile 64 dollarit. Iga\u00fche kestus oli 15 minutit. Seega, t\u00e4nu sellele, et kasutatakse spotte, on see v\u00e4ga odav \u2013 70% allahindlus, Amazon peab tasu sekundite kaupa. Saate teha palju. Saate teha t\u00f5elist uurimist\u00f6\u00f6d.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/64c61cc9dd7181296b2ef5b815a17493.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja kolm peamist Postgresi versiooni on toetatud. Pole nii keeruline viia ellu m\u00f5nda vana ja ka uut 12. versiooni.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/ee147c91014ab698cbd3c60e193bef23.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Objekti saame m\u00e4\u00e4rata kolme viisi. Need on:<\/p>\n<p><\/p>\n<ul>\n<li>Dump\/sql-fail. <\/li>\n<li>Peamine viis on PGDATA katalooge kloonida. \u00dcldjuhul v\u00f5etakse see varundusserverist. Kui teil on normaalsed binaarsed varukoopiad, saate sealt kloone teha. Kui teil on pilveteenused, siis hoolitseb selle eest teie eest pilveteenus nagu Amazon ja Google. See on k\u00f5ige olulisem viis t\u00f5elise tootmisprotsessi kloonide jaoks. Me just selle meetodi kaudu k\u00e4ivitame. <\/li>\n<li>Ja viimane meetod sobib teaduslikeks uuringuteks, kui on soov aru saada, kuidas Postgres mingit funktsiooni t\u00f6\u00f6tab. See on pgbench. Sa saad genereerida pgbenchiga. See on lihtsalt \u00fcks valik \u00abdb-pgbench\u00bb. Sa \u00fctled, milline on skaala. Ja k\u00f5ik genereeritakse pilves, nagu on \u00f6eldud.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/2bc3e30cb31a19f66c6b55480447126f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja koormus:<\/p>\n<p><\/p>\n<ul>\n<li>Koormust saame t\u00e4ita \u00fches SQL voos. See on k\u00f5ige primitiivsem meetod. <\/li>\n<li>V\u00f5i v\u00f5ime koormust emuleerida. Ja me saame emuleerida seda eelk\u00f5ige j\u00e4rgmiselt. Me peame koguma k\u00f5ik logid. Ja see on valus. Ma n\u00e4itan, miks. Ja pgreplay abil, mis on integreeritud Nancy'sse, esitame need. <\/li>\n<li>V\u00f5i teine variant. Nii \u00f6eldud k\u00e4sit\u00f6\u00f6koormus, mida me teeme teatud pingutusega. Anal\u00fc\u00fcsides meie praegust koormust tootmiss\u00fcsteemis, t\u00f5mbame v\u00e4lja k\u00f5ige olulisemad p\u00e4ringugrupid. Ja pgbench abil saame emuleerida seda koormust laboris. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/4adba12881faf9ad9d4f9e9f42c0f5c1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>V\u00f5i peame t\u00e4itma m\u00f5ne SQL p\u00e4ringu, st kontrollime mingit migratsiooni, loome indeksi, teeme ANALYZE. Ja vaatame, mis oli enne ja p\u00e4rast vaakumit. \u00dches\u00f5naga, \u00fcksk\u00f5ik milline SQL.<\/li>\n<li>V\u00f5i muudame konfiguratsioonis \u00fchte v\u00f5i mitut parameetrit. Saame paluda, et kontrollitaks n\u00e4iteks 100 v\u00e4\u00e4rtust Amazonis meie terabaidi andmebaasi jaoks. Ja m\u00f5ne tunni p\u00e4rast on teil tulemus. T\u00fc\u00fcpiliselt kulub terabaidi andmebaasi k\u00e4ivitamiseks mitmeid tunde. Kuid arenduses on meil patch, mille kaudu on v\u00f5imalik seeria, st saate j\u00e4rjestikuselt samal serveril sama pgdata kasutada ja testida. Postgres restardib, vahem\u00e4lu t\u00fchjendatakse. Ja saate koormust testida. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/02985b47bf0ab62e8f1c4cc3ea003f26.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Saabub kataloog, kus on palju erinevaid faile, alustades pg snapshottidest.<em>stat<\/em>***. Ja seal on k\u00f5ige huvitavam \u2013 pg_stat_statements ja pg_stat_kcacke. Need on kaks laiendust, mis anal\u00fc\u00fcsivad p\u00e4ringute tegemist. Ja pg_stat_bgwriter sisaldab mitte ainult pgwriteri statistikat, vaid ka checkpoint'i statistikat ja teavet selle kohta, kuidas taustprotsessid puhtaid puhvrisid nimetavad. Seda k\u00f5ike on huvitav uurida. N\u00e4iteks, kui seadistame shared_buffers, siis on v\u00e4ga huvitav vaadata, kui palju seal kedagi v\u00e4lja t\u00f5rjutakse.<\/li>\n<li>Saabuvad ka Postgresi logid. Kaks logi \u2013 ettevalmistuslogi ja koormuse m\u00e4ngimise logi. <\/li>\n<li>Suhteliselt uus funktsioon \u2013 FlameGraphs.<\/li>\n<li>Kui olete kasutanud pgreplay v\u00f5i pgbench koormuse simuleerimise valikuid, siis on see nende loomulik v\u00e4ljund. N\u00e4ete latency ja TPS-i. Saate aru, kuidas nad seda n\u00e4gid. <\/li>\n<li>S\u00fcsteemi teave. <\/li>\n<li>P\u00f5hij\u00f5udluse ja IO kontrollid. See on rohkem m\u00f5eldud EC2 instantside jaoks Amazoni teenuses, kui soovite voolus k\u00e4ivitada 100 identset instantsi ja seal l\u00e4bi viia 100 erinevat testimist, siis on teil 10 000 eksperimenti. Peate veenduma, et te ei saa vigast instantsi, keda keegi teine juba piirab. Sellel riistvaral tegutsevad teised kasutajad ning teile j\u00e4\u00e4b v\u00e4he ressursse. Sellised tulemused oleks parem k\u00f5rvaldada. Ja just Alexey Kopytovi sysbenchi abil teeme m\u00f5ned l\u00fchikesed kontrollid, mida saab hiljem v\u00f5rrelda teistega, st saate aru, kuidas CPU ja IO end k\u00e4itavad. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c4ddf5283c3c79e3d4c2c061e7dd9e7d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Millised on tehnilised raskused erinevate ettev\u00f5tete n\u00e4itel?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/959690b464a01a4a3cb67ec497becff1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Oletame, et soovime reaalset koormust logide abil korrata. Suurep\u00e4rane idee, kui see on kirjutatud Open Source pgreplay'i abil. Kasutame seda. Kuid et see korralikult t\u00f6\u00f6taks, peate lubama t\u00e4ieliku p\u00e4ringute logimise koos parameetrite ja ajastusega.<\/p>\n<p><\/p>\n<p>Seal on m\u00f5ned raskused seoses duration ja timestampiga. Me j\u00e4tame selle teema k\u00f5rvale. Peamine k\u00fcsimus on \u2013 kas te saate endale seda lubada v\u00f5i mitte? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/5d08fadbaf67b8a137212302b6adf48a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/gist.github.com\/NikolayS\/08d9b7b4845371d03e195a8d8df43408\">https:\/\/gist.github.com\/NikolayS\/08d9b7b4845371d03e195a8d8df43408<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Probleem on selles, et see v\u00f5ib olla kergesti k\u00e4ttesaamatu. Te peate enne k\u00f5ike m\u00f5istma, milline voog logisse kirjutatakse. Kui teil on pg_stat_statements, saate sellise p\u00e4ringuga (link on slaididel olemas) aru saada, kui palju baite kirjutatakse sekundis.<\/p>\n<p><\/p>\n<p>Me vaatame p\u00e4ringu pikkust. Me ignoreerime, et seal ei ole parameetreid, kuid me teame p\u00e4ringu pikkust ja teame, mitu korda sekundis see t\u00e4idetakse. Nii saame hinnata, kui palju baite sekundis kirjutatakse. Me v\u00f5ime eksida kahes kahekordse v\u00f5rra, kuid m\u00e4\u00e4rame t\u00e4pselt selle j\u00e4rjekorra.<\/p>\n<p><\/p>\n<p>Me n\u00e4eme, et 802 korda sekundis seda p\u00e4ringut t\u00e4idetakse. Ja me n\u00e4eme, et bytes_per sec \u2013 300 kB\/s kirjutatakse pluss miinus. Ja tavaliselt suudame sellist voogu endale lubada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/218f905073a8519115adf5c65825b74d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aga! Asi on selles, et on erinevaid logimiss\u00fcsteeme. Ja vaikimisi on inimestel tavaliselt \"syslog\".<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/66054682083ba2ada174afb5e7ee3973.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja kui teil on syslog, siis v\u00f5ib teil olla selline pilt. Me v\u00f5tame pgbench'i, l\u00fclitame sisse p\u00e4ringute logimise ja vaatame, mis juhtub.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/a05723dcf10a7733f054ba108bb0f107.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ilma logimiseta on see vasakul k\u00fclg. Me saavutasime 161 000 TPS. Syslogiga \u2013 Ubuntu 16.04 Amazonis saavutasime 37 000 TPS. Ja kui me muudame kahel muul moel logimist, on olukord oluliselt parem. Ehkki me ootasime, et see v\u00e4heneb, ei olnuks see siiski nii drastiline.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/a7d90af9d29761d3b80eb09bf050760f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja CentOS 7 puhul, kus osaleb ka journald, muutes logid binaarsesse formaati mugavaks otsimiseks jne, on olukord isegi hullem, TPS kukub 44 korda.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/86d2af18a0e6364f297a62378b6ede56.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja see on see, millega inimesed elavad. Ja sageli on ettev\u00f5tetes, eriti suurtes, seda v\u00e4ga raske muuta. Kui saate syslogist lahkuda, siis lahkuge sellest kindlasti.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/a167a6fac7f28c7541515f7eff30bdb4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Hinnake IOPS-i ja kirjutusvoogu. <\/li>\n<li>Kontrollige oma s\u00fcsteemi logimist. <\/li>\n<li>Kui prognoositav koormus on liiga suur, kaaluge proovide v\u00f5tmise v\u00f5imalust. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/127fa1296578ba0ba6eac2b44c5c5398.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Meil on pg_stat_statements. Nagu ma \u00fctlesin, peab see kindlasti olemas olema. Ja me saame iga p\u00e4ringugrupi spetsiaalselt failis kirjeldada. Seej\u00e4rel saame kasutada pgbenchis v\u00e4ga mugavat funktsiooni \u2013 v\u00f5imalust sisestada mitu faili valiku \u201e-f\u201d kaudu.<\/p>\n<p><\/p>\n<p>Ta m\u00f5istab palju \u00ab-f\u00bb. Ja saab \u00f6elda \u00ab@\u00bb l\u00f5pus, milline osa igast failist peaks olema. St me saame \u00f6elda, et n\u00fc\u00fcd teosta seda 10% juhtudest, ja seda 20%. Ja see tuletab meid l\u00e4hemale sellele, mida me n\u00e4eme tootmises.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/b91d18a9861abdc36bfda54cd72a142f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas me saame aru, mis meil tootmises on? Milline osa ja mis? Siin on natuke k\u00f5rvalekaldumine. Meil on veel \u00fcks toode. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/postgres-ai\/postgres-checkup\">postgres-checkup<\/a><\/noindex>. Samuti on see p\u00f5hineb Open Source'il. Ja me arendame seda aktiivselt praegu.<\/p>\n<p><\/p>\n<p>See s\u00fcndis veidi muudel p\u00f5hjustel. P\u00f5hjustel, et j\u00e4lgimine on ebapiisav. St sa tuled, vaatad baasi, vaatad probleeme, mis on. Ja tavaliselt teed health_check\u2019i. Kui oled kogenud DBA, siis teed health_check\u2019i. Vaatasid indeksite kasutust jne. Kui sul on OKmeter, siis on k\u00f5ik suurep\u00e4rane. See on suurep\u00e4rane j\u00e4lgimine Postgres\u2019i jaoks. OKmeter.io \u2013 palun installige see, seal on k\u00f5ik v\u00e4ga h\u00e4sti tehtud. See on tasuline.<\/p>\n<p><\/p>\n<p>Kui sul seda ei ole, siis tavaliselt sul pole palju, mida on. J\u00e4lgimises on tavaliselt olemas CPU, IO ja seda ka tingimustega, ja k\u00f5ik. Aga meil on vaja rohkem. Me peame n\u00e4gema, kuidas t\u00f6\u00f6tab automaatne vakuum, kuidas t\u00f6\u00f6tab kontrollpunkt, IO-s peame eraldama kontrollpunkti bgwriter\u2019ist ja taustprotsessidest jne.<\/p>\n<p><\/p>\n<p>Probleem on see, et kui sa aitad m\u00f5nda suurt ettev\u00f5tet, ei saa nad midagi kiiresti rakendada. Nad ei saa kiiresti osta OKmeteri. V\u00f5ib-olla ostavad nad selle kuue kuu p\u00e4rast. Nad ei saa kiiresti installida mingisuguseid pakette. <\/p>\n<p><\/p>\n<p>Ja meil tekkis m\u00f5te, et vajame sellist spetsiaalset t\u00f6\u00f6riista, mis ei n\u00f5ua mingit installimist, st te ei pea tootmisse midagi paigaldama. Installige see oma s\u00fclearvutisse v\u00f5i j\u00e4lgimisserverisse, kust selle k\u00e4ivitada. Ja see anal\u00fc\u00fcsib palju asju: operatsioonis\u00fcsteemi, failis\u00fcsteemi ja ise Postgres'i, tehes kergeid p\u00e4ringuid, mida saab otse tootmises kasutada ja mis ei too kaasa purunemist.<\/p>\n<p><\/p>\n<p>Me nimetame seda Postgres-checkup'iks. Kui meditsiiniliselt, siis see on regulaarne heaolu kontroll. Kui autotemaatika kontekstis, siis \u2013 see on nagu hooldus. Sa teed autole hooldust iga kuue kuu v\u00f5i aasta tagant, s\u00f5ltuvalt markist. Kas sa teed oma andmebaasile hooldust? St kas sa teed regulaarselt s\u00fcvitsi minevat uurimist? Seda on vaja teha. Kui sa teed varukoopiaid, siis tee ka checkup, see on sama oluline.<\/p>\n<p><\/p>\n<p>Ja meil on selline t\u00f6\u00f6riist. See hakkas aktiivselt arenema alles kolm kuud tagasi. See on veel noor, kuid seal on palju kasulikku.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/514d00b5cb710a7997af0a5dde55b5a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Koondame k\u00f5ige \"m\u00f5jukamad\" p\u00e4ringugrupid \u2013 raport K003 Postgres-checkup-is<\/p>\n<p><\/p>\n<p>Ja seal on raportite grupp K. Praegu on kolm raportit. Ja seal on ka raport K003. Seal on pg_stat_statements-i tipp, sorteeritud total_time j\u00e4rgi.<\/p>\n<p><\/p>\n<p>Kui sorteerime p\u00e4ringugruppe total_time j\u00e4rgi, n\u00e4eme tipus gruppi, mis koormab meie s\u00fcsteemi k\u00f5ige rohkem, st tarbib rohkem ressursse. Miks ma r\u00e4\u00e4gin p\u00e4ringugruppidest? Kuna me eemaldame parameetrid. Need ei ole enam p\u00e4ringud, vaid p\u00e4ringugrupid, st need on abstraktsed.<\/p>\n<p><\/p>\n<p>Ja kui optimeerime \u00fclevalt alla, kergendame oma ressursse ja l\u00fckkame edasi aega, millal peame uuendama. See on v\u00e4ga hea viis raha s\u00e4\u00e4sta.<\/p>\n<p><\/p>\n<p>V\u00f5ib-olla ei ole see v\u00e4ga hea viis kasutajakogemuse osas, kuna me ei pruugi n\u00e4ha haruldasi, kuid v\u00e4ga ebameeldivaid juhtumeid, kus inimene ootas 15 sekundit. Kokkuv\u00f5ttes on need nii haruldased, et me ei n\u00e4e neid, kuid samas tegeleme ressurssidega.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/d16abc423573e4d923b0c03683c2efee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mis toimus selles tabelis? Me tegime kaks l\u00f5ikesalvestust. Postgres_checkup arvutab iga m\u00f5\u00f5tme, nagu total-time, calls, rows, shared_blks_read jne, erinevuse. K\u00f5ik on arvutatud. Pg_stat_statementsil on suur probleem, et ta ei m\u00e4leta, millal seda l\u00e4htestati. Kui pg_stat_database m\u00e4letab, siis pg_stat_statements ei m\u00e4leta. Te n\u00e4ete seal 1 000 000 numbrit, aga kust me selle saime, pole teada.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c370bf1237675e03c0a3d362c025ac24.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Siin me teame, et meil on kaks l\u00f5ikesalvestust. Me teame, et selles olukorras oli erinevus 56 sekundit. V\u00e4ga v\u00e4ike aeg. Total_time\u2019i j\u00e4rgi sorteeritud. Edasi saame me diferentseerida, st jagame k\u00f5ik m\u00f5\u00f5tmed durationiga. Kui me iga m\u00f5\u00f5tme jagame durationiga, saame kutsungite arvu sekundis.<\/p>\n<p><\/p>\n<p>Edasi on total_time per second \u2013 see on minu lemmik m\u00f5\u00f5de. See m\u00f5\u00f5detakse sekundites, st kui palju sekundeid kulus meie s\u00fcsteemil selle p\u00e4ringugrupi t\u00e4itmiseks sekundis. Kui te n\u00e4ete seal rohkem kui \u00fcks sekund sekundis, t\u00e4hendab see, et vajadusi on rohkem kui \u00fcks tuum. See on v\u00e4ga hea m\u00f5\u00f5de. Te saate aru, et sellele isikule on n\u00e4iteks vajalik v\u00e4hemalt kolm tuuma.<\/p>\n<p><\/p>\n<p>See, this is our know-how; I haven't seen anything like it before. Notice \u2013 it's very simple \u2013 second by second. Sometimes, when your CPU is at 100%, it's half an hour per second, meaning you've spent half an hour on just this request. <\/p>\n<p><\/p>\n<p>Next, we see rows per second. We know how many rows were returned per second.<\/p>\n<p><\/p>\n<p>And another interesting aspect. How many shared_buffers we read per second from the shared_buffers itself. The hits were already there, while the rows we took from the operating system's cache or from the disk. The first option is fast, while the second might be fast or might not, depending on the situation. <\/p>\n<p><\/p>\n<p>The second method of differentiation \u2013 we divide the number of requests in this group. In the second column, you will always have one request divided by the request. And then it gets interesting \u2013 how many milliseconds it took for this request. We know the average behavior of this request. It required 101 milliseconds for each request. This is a traditional metric we need for understanding.<\/p>\n<p><\/p>\n<p>Kui palju ridu iga p\u00e4ring keskmiselt tagastas. N\u00e4eme, et see grupp tagastab 8. Kui palju keskmiselt vahem\u00e4lust tuli ja loeti. N\u00e4eme, et k\u00f5ik on suurep\u00e4raselt vahem\u00e4lus. Ainult hitid esimese grupi jaoks. <\/p>\n<p><\/p>\n<p>Ja iga rea neljas alamrida \u2013 see on protsent kogu koguarvust. Meil on calls. \u00dctleme, et 1 000 000. Ja me saame aru, kui suur on selle grupi panus. N\u00e4eme, et antud juhul on esimese grupi panus v\u00e4iksem kui 0,01%. See t\u00e4hendab, et see on nii aeglane, et me ei n\u00e4e seda \u00fcldpildis. Teine grupp aga \u2013 5% k\u00f5igist kutsumistest. See t\u00e4hendab, et 5% k\u00f5igist kutsumistest on teine grupp. <\/p>\n<p><\/p>\n<p>Ka total_time on huvitav. Esimese grupi p\u00e4ringutele kulutasime 14% kogu t\u00f6\u00f6ajast. Teisele grupile \u2013 11% jne. <\/p>\n<p><\/p>\n<p>Ma ei hakka detailidesse s\u00fcvenema, kuid seal on n\u00fcansse. Me n\u00e4itame \u00fclal viga, sest kui me v\u00f5rdleme, v\u00f5ivad snapshotid muutuda, st m\u00f5ned p\u00e4ringud v\u00f5ivad kaduda ja teises ei pruugi neid enam olla, aga m\u00f5ned v\u00f5ivad uued ilmuda. Ja me seal arvutame vea. Kui n\u00e4ete 0, siis on see hea. Vigu ei ole. Kui veaprotsent on kuni 20%, on see OK. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/327bbf167bc21d37a3e1597b52528e6d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Edasi liikudes, naaseme meie teema juurde. Peame koostama t\u00f6\u00f6koormuse. Alustame \u00fclevalt alla, kuni j\u00f5uame 80% v\u00f5i 90% -ni. T\u00fc\u00fcpiliselt on see 10-20 gruppi. Ja teeme failid pgbench'i jaoks. Seal kasutame juhuslikku (random) l\u00e4henemist. Kahjuks ei toimi see alati. Postgres 12-s on selle l\u00e4henemise rakendamiseks rohkem v\u00f5imalusi. <\/p>\n<p><\/p>\n<p>Nii kogume 80-90% kokku total_time-st. Mis j\u00e4rgmiseks panna \u00ab@\u00bb-le? Vaatame k\u00f5nesid, j\u00e4lgime protsente ja saame aru, et siin peaks olema teatud protsent. Nendest protsentidest saame aru, kuidas igat faili tasakaalustada. P\u00e4rast seda kasutame pgbench'i ja alustame t\u00f6\u00f6d. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/53edf787f49dcabb5e4731510839332d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Meil on veel K001 ja K002. <\/p>\n<p><\/p>\n<p>K001 \u2013 see on \u00fcks suur rida koos nelja alar\u00fchmaga. See iseloomustab kogu meie koormust. Vaadake teist veergu ja teist alar\u00fchma. N\u00e4eme, et see on umbes 1,5 sekundit sekundis, st kui on kaks tuuma, siis on see hea. Koormus on umbes 75%. Ja see t\u00f6\u00f6tab nii. Kui meil on 10 tuuma, siis oleme t\u00e4iesti rahulikud. Nii saame ressursse hinnata.<\/p>\n<p><\/p>\n<p>K002 \u2013 seda nimetame p\u00e4ringute klassideks, st SELECT, INSERT, UPDATE, DELETE. Ja eraldi SELECT FOR UPDATE, kuna see lukustab. <\/p>\n<p><\/p>\n<p>Siit v\u00f5ime j\u00e4reldada, et SELECT'i tavalised lugemised moodustavad 82% k\u00f5igist kutsumistest, kuid tarbivad ainult 74% total_time'ist. See t\u00e4hendab, et neid kutsutakse palju, kuid nad tarbivad v\u00e4hem ressursse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/0e0234e696ffe1c80f8b5acccc602dbd.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja naaseme k\u00fcsimuse juurde: \u00abKuidas valida \u00f5igesti shared_buffers?\u00bb. Olen m\u00e4rganud, et enamikki benchmark'e ehitatakse idee p\u00f5hjal \u2013 vaatame, milline on l\u00e4bilaskev\u00f5ime. Seda m\u00f5\u00f5detakse tavaliselt TPS v\u00f5i QPS'iga.<\/p>\n<p><\/p>\n<p>Ja me p\u00fc\u00fcame, kasutades seadistusi, autolt pigistada v\u00f5imalikult palju tehinguid sekundis. Siin on just 311 sekundis SELECT'i jaoks.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/d5e73f2672d94bb92eed921ef3dfe0b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuid keegi ei s\u00f5ida t\u00f6\u00f6le ja tagasi koju autoga t\u00e4is speeds. See on rumal. Nii on ka andmebaasidega. Me ei tohiks s\u00f5ita maksimaalsel kiirusel, keegi ei tee seda. Keegi ei ela tootmises, kus CPU on 100%. Kuigi v\u00f5ib-olla on keegi, kes elab, kuid see ei ole hea. <\/p>\n<p><\/p>\n<p>Idee on selline, et tavaliselt kasutame me umbes 20% oma v\u00f5imalustest, soovitatavalt mitte \u00fcle 50%. P\u00fc\u00fcame optimeerida reageerimisaega meie kasutajate jaoks eelk\u00f5ige. St. me peame oma k\u00e4si keerama nii, et 20% kiirusel oleks minimaalne latentsus, tinglikult. See on idee, mida p\u00fc\u00fcame ka oma katsetes rakendada.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c32c2cfb76dce0ce6b50e929bbf914ac.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja l\u00f5petuseks soovitused: <\/p>\n<p><\/p>\n<ul>\n<li>Kohustuslikult tehke Database Lab.<\/li>\n<li>V\u00f5imaluse korral tehke see n\u00f5udmise alusel, et see t\u00f6\u00f6le vajutada teatud ajaks - proovige ja siis visake minema. Kui teil on pilved, siis see on iseenesest m\u00f5istetav, s.t. omage palju seismist. <\/li>\n<li>Olge uudishimulikud. Ja kui midagi ei klapi, kontrollige katsetega, kuidas see k\u00e4itub. Nancy't saab kasutada, et end harida ja kontrollida, kuidas andmebaas t\u00f6\u00f6tab.<\/li>\n<li>Ja sihtige minimaalset reageerimisaega. <\/li>\n<li>\u00c4rge kartke Postgresi l\u00e4htekoodide ees. Kui t\u00f6\u00f6tate l\u00e4htekoodidega, peate oskama inglise keelt. Seal on palju kommentaare, k\u00f5ik on selgitatud. <\/li>\n<li>Ja kontrollige andmebaasi tervist regulaarselt, v\u00e4hemalt kord kolme kuu jooksul k\u00e4sitsi v\u00f5i Postgres-checkupiga. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/8d2ac05f44bd245b879799862ce9e233.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00fcsimused<\/p>\n<p><\/p>\n<p><em>Ait\u00e4h v\u00e4ga palju! V\u00e4ga huvitav asi.<\/em> <\/p>\n<p><\/p>\n<p>Kaks asja.<\/p>\n<p><\/p>\n<p><em>Jah, kaks t\u00fckki. Ainult et ma ei saanud t\u00e4ielikult aru. Kui me Nancy'ga t\u00f6\u00f6tame, saame me reguleerida ainult \u00fchte parameetrit v\u00f5i terve grupi korraga?<\/em><\/p>\n<p><\/p>\n<p>Meil on delta-konfiguratsiooniparameeter. Sinna saad keerata nii palju kui soovid. Kuid tuleb m\u00f5ista, et kui muudatusi on palju, v\u00f5id teha valeid j\u00e4reldusi. <\/p>\n<p><\/p>\n<p><em>Jah. Miks ma k\u00fcsisin? Sest eksperimente on keeruline teha, kui sul on ainult \u00fcks parameeter. Sa reguleerid seda, vaatad, kuidas see t\u00f6\u00f6tab. H\u00e4\u00e4lestad selle. Siis hakkad j\u00e4rgmist muutma.<\/em><\/p>\n<p><\/p>\n<p>Samas saab korraga reguleerida, kuid see s\u00f5ltub olukorrast, muidugi. Siiski on parem testida \u00fchte idee. Meil tekkis eile idee. Olime v\u00e4ga sarnases olukorras. Kaks konfiguratsiooni. Ja me ei saanud aru, miks oli suur erinevus. Ja tekkis idee, et peaksime kasutama dikotoomiat, et j\u00e4rjestikku m\u00f5ista ja leida, mis vahe on. Saame kohe poole parameetritest muuta sama sarnaseks, siis veerandi jne. K\u00f5ik on paindlik.<\/p>\n<p><\/p>\n<p><em>Ja on veel k\u00fcsimus. Projekt on noor, areneb. Dokumentatsioon on juba valmis, kas on olemas detailne kirjeldus?<\/em><\/p>\n<p><\/p>\n<p>Ma tegin sinna spetsiaalselt lingi parameetrite kirjeldusele. See on olemas. Kuid palju on veel puudu. Otsin kaasam\u00f5tlejaid. Ja ma leian neid, kui esindan. See on v\u00e4ga \u00e4ge. Keegi t\u00f6\u00f6tab juba minuga, keegi aitas ja tegi midagi. Ja kui see teema teid huvitab, andke mulle kindlasti tagasisidet \u2013 mida on puudu. <\/p>\n<p><\/p>\n<p><em>Kui labori \u00e4ra teeme, v\u00f5ib-olla tuleb tagasiside. N\u00e4eme. Ait\u00e4h!<\/em><\/p>\n<p><\/p>\n<p><em>Tere! Ait\u00e4h ettekande eest! M\u00e4rkasin, et Amazoni tugi on olemas. Kas plaanitakse ka GSP tuge?<\/em><\/p>\n<p><\/p>\n<p>Hea k\u00fcsimus. Oleme alustanud. Ja oleme hetkeks peatunud, sest soovime raha s\u00e4\u00e4sta. Toetust pakutakse localhost'is t\u00f6\u00f6tamise kaudu. Saate ise luua instantsi ja t\u00f6\u00f6tada kohalikult. Muide, just nii me teeme. Getlabs jagan, seal GSP peal. Kuid me ei n\u00e4e praegu m\u00f5tet sellise orkestreerimise tegemiseks, kuna Google'il ei ole odavaid spot'ide pakkumisi. Seal on ??? instantsid, kuid nendele kehtivad piirangud. Esiteks on alati ainult 70% allahindlus ja seal ei saa hinna osas m\u00e4ngida. Spot'ide puhul t\u00f5stame hinda 5-10% v\u00f5rra, et v\u00e4hendada t\u00f5en\u00e4osust, et teid \u00fcmber l\u00fckatakse. See t\u00e4hendab, et spot'ide puhul s\u00e4\u00e4state raha, kuid need v\u00f5ivad igal ajal \u00e4ra v\u00f5tta. Kui teie hind on veidi k\u00f5rgem kui teistel, surete hiljem. Google'il on t\u00e4ielikult erinev spetsiifika. Ja veel on \u00fcks v\u00e4ga halb piirang \u2013 nad elavad ainult 24 tundi. Ja m\u00f5nikord tahame katset teha 5 p\u00e4eva. Kuid spot'ide puhul on see v\u00f5imalik, m\u00f5nikord elavad need kuude kaupa. <\/p>\n<p><\/p>\n<p><em>Tere! Ait\u00e4h ettekande eest! Te mainisite checkup'i. Kuidas te arvutate vigu stat_statements?<\/em><\/p>\n<p><\/p>\n<p>V\u00e4ga hea k\u00fcsimus. Ma v\u00f5in v\u00e4ga detailselt n\u00e4idata ja r\u00e4\u00e4kida. L\u00fchidalt \u2013 me vaatame, kuidas on muutunud r\u00fchmade p\u00e4ringute kogum: kui palju on kadunud ja kui palju on uusi tekkinud. Ja seej\u00e4rel vaatame kahte m\u00f5\u00f5dikut: total_time ja calls, seega on seal kaks viga. Ja vaatame, milline on kadunud r\u00fchmade panus. Seal on kaks alammoodi: lahkunud ja saabunud. Vaatame, kui suur on nende panus kogu pilti. <\/p>\n<p><\/p>\n<p><em>Kas te ei karda, et see seal p\u00f6\u00f6rleb kaks-kolm korda ajavahemikus snap\u0161ottide vahel?<\/em><\/p>\n<p><\/p>\n<p>St. nad registreerusid uuesti v\u00f5i kuidas?<\/p>\n<p><\/p>\n<p><em>N\u00e4iteks, see p\u00e4ring on juba \u00fcks kord v\u00e4lja t\u00f5rjuda, siis tuli tagasi ja t\u00f5rjuti taas v\u00e4lja, siis tuli veel kord tagasi ja t\u00f5rjuti j\u00e4lle v\u00e4lja. Ja te siin midagi arvutasite, kus see k\u00f5ik on?<\/em><\/p>\n<p><\/p>\n<p>Hea k\u00fcsimus, tuleb vaadata. <\/p>\n<p><\/p>\n<p><em>Ma tegin sarnast asja. Muidugi lihtsamat, ma tegin seda \u00fcksi. Aga mul tuli nullida, teha reset stat_statements ja orienteeruda snap\u0161oti hetkel, et seal oleks v\u00e4hem teatud osa, et see ei oleks ikkagi j\u00f5udnud lakke, kui palju stat_statements-ite v\u00f5ib koguneda. Ja ma l\u00e4htun, et t\u00f5en\u00e4oliselt ei ole midagi v\u00e4lja t\u00f5rjutud.<\/em> <\/p>\n<p><\/p>\n<p>Jah-jah. <\/p>\n<p><\/p>\n<p><em>Aga ma ei m\u00f5ista, kuidas v\u00f5iks midagi muud usaldusv\u00e4\u00e4rselt teha.<\/em><\/p>\n<p><\/p>\n<p>Kahjuks ei m\u00e4leta ma t\u00e4pselt - kas me seal kasutame p\u00e4ringu teksti v\u00f5i queryid pg_stat_statements ja selle j\u00e4rgi juhindume. Kui me juhindume queryid'ist, siis peaksime v\u00f5rreldes sarnaseid asju. <\/p>\n<p><\/p>\n<p><em>Ei, see v\u00f5ib mitme v\u00f5rgu vahel v\u00e4lja juhtida ja uuesti tagasi tulla.<\/em><\/p>\n<p><\/p>\n<p>Kas selle sama id-ga?<\/p>\n<p><\/p>\n<p><em>Jah.<\/em> <\/p>\n<p><\/p>\n<p>Me uurime seda. Hea k\u00fcsimus. Peame uurima. Kuid seni, mida me n\u00e4eme, on meil kas kirjutatud 0...<\/p>\n<p><\/p>\n<p><em>See on muidugi haruldane juhtum, aga olin jahmunud, kui kuulsin, et stat_statements seal v\u00f5ib v\u00e4lja juhtida.<\/em> <\/p>\n<p><\/p>\n<p>Pg_stat_statements'is v\u00f5ib palju olla. Oleme kohtunud sellega, et kui teil track_utility = on, siis j\u00e4lgitakse ka teie setteid. <\/p>\n<p><\/p>\n<p><em>Jah, muidugi.<\/em><\/p>\n<p><\/p>\n<p>Ja kui teil on random java hibernate, siis hakkab seal lukuklahvi tabel lukustuma. Ja niipea, kui te keelate v\u00e4ga koormatud rakenduse, on teil 50-100 gruppi. Ja seal on enam-v\u00e4hem k\u00f5ik stabiilne. \u00dcks viis selle vastu v\u00f5itlemiseks on pg_stat_statements.max suurendada. <\/p>\n<p><\/p>\n<p><em>Jah, aga tuleb teada, kui palju. Ja kuidagi peab selle \u00fcle j\u00e4lgima. Mina teen nii. T. e. mul on pg_stat_statements.max. Ja vaatan, et ma snapshot'i ajal ei ole j\u00f5udnud 70% juurde. H\u00e4sti, see t\u00e4hendab, et me ei ole midagi kaotanud. Teeme reseti. Ja kogume uuesti. Kui j\u00e4rgmises snapshot'is on v\u00e4hem kui 70, siis t\u00e4hendab, et t\u00f5en\u00e4oliselt ei ole me j\u00e4lle midagi kaotanud.<\/em><\/p>\n<p><\/p>\n<p>Jah. Vaikimisi on praegu 5000. Ja paljudele sellest piisab. <\/p>\n<p><\/p>\n<p><em>Tavaliselt \u2013 jah.<\/em> <\/p>\n<p><\/p>\n<p>Video:<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"yvO1jjG-tDI\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/yvO1jjG-tDI\/hqdefault.jpg\" alt=\"Vaata videot\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>P.S. Isiklikult lisan, et kui Postgresis on konfidentsiaalsed andmed ja neid ei tohi testkeskkonda viia, siis v\u00f5ib kasutada <noindex><a rel=\"nofollow\" href=\"https:\/\/labs.dalibo.com\/postgresql_anonymizer\">PostgreSQL Anonymizer<\/a><\/noindex>. Skeem on umbkaudu j\u00e4rgmine:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega&quot;. Nikolai Samohvalov\" src=\"\/wp-content\/uploads\/2020\/04\/cf9a2052364e09a20e68d2347dd0c25b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/498060\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u041d\u0438\u043a\u043e\u043b\u0430\u044f \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432\u0430 &quot;\u041f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0442\u044e\u043d\u0438\u043d\u0433\u0443 PostgreSQL: \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0434 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445&quot; Shared_buffers = 25% \u2013 \u044d\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043c\u0430\u043b\u043e? \u0418\u043b\u0438 \u0432 \u0441\u0430\u043c\u044b\u0439 \u0440\u0430\u0437? \u041a\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u044d\u0442\u0430 \u2013 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f \u2013 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435? \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443 \u043f\u043e\u0434\u0431\u043e\u0440\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 postgresql.conf &quot;\u043f\u043e-\u0432\u0437\u0440\u043e\u0441\u043b\u043e\u043c\u0443&quot;. \u041d\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u043f\u044b\u0445 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":78743,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-78742","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u041d\u0438\u043a\u043e\u043b\u0430\u044f \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432\u0430 &quot;\u041f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0442\u044e\u043d\u0438\u043d\u0433\u0443 PostgreSQL: \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0434 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445&quot; Shared_buffers = 25% \u2013 \u044d\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043c\u0430\u043b\u043e? \u0418\u043b\u0438 \u0432 \u0441\u0430\u043c\u044b\u0439 \u0440\u0430\u0437? \u041a\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u044d\u0442\u0430 \u2013 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f \u2013 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435? \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443 \u043f\u043e\u0434\u0431\u043e\u0440\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 postgresql.conf &quot;\u043f\u043e-\u0432\u0437\u0440\u043e\u0441\u043b\u043e\u043c\u0443&quot;. \u041d\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u043f\u044b\u0445\" \/>\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\/promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\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\u041f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0442\u044e\u043d\u0438\u043d\u0433\u0443 PostgreSQL: \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0434 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\u00bb. \u041d\u0438\u043a\u043e\u043b\u0430\u0439 \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u041d\u0438\u043a\u043e\u043b\u0430\u044f \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432\u0430 &quot;\u041f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0442\u044e\u043d\u0438\u043d\u0433\u0443 PostgreSQL: \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0434 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445&quot; Shared_buffers = 25% \u2013 \u044d\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043c\u0430\u043b\u043e? \u0418\u043b\u0438 \u0432 \u0441\u0430\u043c\u044b\u0439 \u0440\u0430\u0437? \u041a\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u044d\u0442\u0430 \u2013 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f \u2013 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435? \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443 \u043f\u043e\u0434\u0431\u043e\u0440\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 postgresql.conf &quot;\u043f\u043e-\u0432\u0437\u0440\u043e\u0441\u043b\u043e\u043c\u0443&quot;. \u041d\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u043f\u044b\u0445\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-04-21T17:42:46+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-21T17:42:46+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\udd47 T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: katsetused andmebaasidega. Nikolai Samokhvalov | ProHoster","description":"Pakun tutvuda Nikolai Samohvalovi ettekande \"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega\" t\u00f5lgendusega. Shared_buffers = 25% \u2013 kas see on palju v\u00f5i v\u00e4he? V\u00f5i sobib t\u00e4pselt? Kuidas m\u00f5ista, kas see \u2013 juba \u00fcsna vananenud \u2013 soovitus sobib teie konkreetse juhtumi jaoks? On aeg l\u00e4heneda postgresql.conf parameetrite valikule \"t\u00e4iskasvanulikult\". Mitte pimedalt.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov","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\u041f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0442\u044e\u043d\u0438\u043d\u0433\u0443 PostgreSQL: \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0434 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\u00bb. \u041d\u0438\u043a\u043e\u043b\u0430\u0439 \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432 | ProHoster","og:description":"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u041d\u0438\u043a\u043e\u043b\u0430\u044f \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432\u0430 &quot;\u041f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0442\u044e\u043d\u0438\u043d\u0433\u0443 PostgreSQL: \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0434 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445&quot; Shared_buffers = 25% \u2013 \u044d\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043c\u0430\u043b\u043e? \u0418\u043b\u0438 \u0432 \u0441\u0430\u043c\u044b\u0439 \u0440\u0430\u0437? \u041a\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u044d\u0442\u0430 \u2013 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f \u2013 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435? \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443 \u043f\u043e\u0434\u0431\u043e\u0440\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 postgresql.conf &quot;\u043f\u043e-\u0432\u0437\u0440\u043e\u0441\u043b\u043e\u043c\u0443&quot;. \u041d\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u043f\u044b\u0445","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-04-21T17:42:46+00:00","article:modified_time":"2020-04-21T17:42:46+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"78742","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:51:38","updated":"2022-09-28 02:51:26"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/78742","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=78742"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/78742\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/78743"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=78742"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=78742"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=78742"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}