{"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-i h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega &#187;. Nikolai Samohvalov","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Pakun tutvuda Nikolai Samohvalovi ettekande \"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL h\u00e4\u00e4lestamisele: eksperimentide l\u00e4biviimine andmebaasidega\" transkriptsiooniga.<\/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 \u00fcsna vananenud \u2013 soovitus sobib teie konkreetsele juhtumile?<\/p>\n<p><\/p>\n<p>On aeg asuda postgresql.conf parameetrite valikule t\u00e4iskasvanulikult. Mitte pime \"autotuuning\" v\u00f5i vananenud soovitustega artiklitest ja blogidest, vaid tuginedes:<\/p>\n<p><\/p>\n<ol>\n<li>t\u00e4pselt l\u00e4bi viidud eksperimentidele andmebaasidega, mida teostatakse automatiseeritult, suures koguses ja v\u00f5imalikult \"lahinguolukordadele\" l\u00e4hedastes tingimustes,<\/li>\n<li>s\u00fcvateadmistele DBMS-i ja OS-i toimimistest.<\/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 tuntud shared_buffers \u2013 erinevates olukordades, erinevates projektides ja proovime aru saada, kuidas optimaalselt seadistada meie infrastruktuuri, andmebaasi ja koormust.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 katsetest andmebaasidega. See on lugu, mis kestab veidi \u00fcle kuue kuu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 Postgresiga on \u00fcle 14 aasta. Olen asutanud mitmeid sotsiaalsete v\u00f5rgustike ettev\u00f5tteid. \u00dcksk\u00f5ik kus on kasutatud ja kasutatakse Postgresit.<\/p>\n<p><\/p>\n<p>Samuti on RuPostgres grupil Meetup, 2. koht maailmas. J\u00f5uame j\u00e4rk-j\u00e4rgult 2000 inimese l\u00e4hedale. RuPostgres.org.<\/p>\n<p><\/p>\n<p>Ja erinevate konverentside raames, sealhulgas Highload, vastutan andmebaaside eest, sealhulgas Postgresi eest alates selle asutamisest.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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>Ja viimase paar aastat olen oma Postgresi konsultatsioonipraktikat taaselustanud 11 ajav\u00f6\u00f6ndis.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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, oli mul aktiivse k\u00e4sit\u00f6\u00f6 katkestus Postgresiga, t\u00f5en\u00e4oliselt alates 2010. aastast. \u00dcllatusin, kui v\u00e4he DBA igap\u00e4evaelu on muutunud, kui palju on endiselt vaja palju k\u00e4sit\u00f6\u00f6d. Ja ma m\u00f5tlesin kohe, et siin on midagi valesti, peaksime rohkem automatiseerima.<\/p>\n<p><\/p>\n<p>Kuna see k\u00f5ik toimus kaugjuhtimise teel, olid enamik kliente pilves. Ja palju on juba t\u00f5eliselt automatiseeritud. Umbes sellest natuke hiljem. St. k\u00f5ik see viis m\u00f5ttele, et peaks olema rida t\u00f6\u00f6riistu, st. mingi platvorm, mis automatiseerib praktiliselt k\u00f5ik DBA toimingud, et saaks hallata suurt hulka andmebaase.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 k\u00e4sitleta:<\/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 teil on k\u00f5ik h\u00e4sti. Shared_buffersi osas ei ole palju juttu. <\/li>\n<li>H\u00e4kkimise \"sisut\u00fckkid\". <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 siis saab?<\/p>\n<p><\/p>\n<ul>\n<li>Saavad olema optimeerimise p\u00f5him\u00f5tted, mida me rakendame ja arendame. Saavad olema erinevad ideed, mis meil teel tekivad, ja erinevad t\u00f6\u00f6riistad, mida me peamiselt Open Source'is loome, st aluse teeme Open Source'is. Veel enam, meil on toetustiketid, peaaegu kogu suhtlus toimib Open Source'is. Saate j\u00e4lgida, mida me praegu teeme, mis tuleb j\u00e4rgmise v\u00e4ljaandega jne. <\/li>\n<li>Samuti on olemas teatud kogemus nende p\u00f5him\u00f5tete, nende t\u00f6\u00f6riistade kasutamisest mitmesugustes ettev\u00f5tetes: alates v\u00e4ikestest idufirmadest kuni suurte ettev\u00f5teteni. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 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 tagamise, varukoopiate taastamise jne, on kitsaskohtade leidmine ja j\u00f5udluse optimeerimine.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 on see korraldatud nii. Me vaatame j\u00e4lgimist, n\u00e4eme midagi, m\u00f5ned detailid j\u00e4\u00e4vad puudu. Me hakkame s\u00fcvenema p\u00f5hjalikumalt, tavaliselt k\u00e4sitsi, ja m\u00f5istame, mida sellega teha.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 on vaikimisi lahendus aeglaste p\u00e4ringute tuvastamiseks. Ja Postgresi logide anal\u00fc\u00fcs pgBadgeriga.<\/p>\n<p><\/p>\n<p>Igal l\u00e4henemisel on t\u00f5sised puudused. Esimese l\u00e4henemise puhul on meil k\u00f5ik parameetrid k\u00f5rvale heidetud. Ja kui me n\u00e4eme r\u00fchmi SELECT * FROM table where veerg on \u00ab?\u00bb v\u00f5i \u00ab$\u00bb, algusest peale Postgresi versioonis 10, ei tea me \u2013 kas see on indeksi skaneerimine v\u00f5i j\u00e4rjestikune skaneerimine. See s\u00f5ltub v\u00e4ga palju parameetrist. Kui paned sinna harvaesineva v\u00e4\u00e4rtuse, on see indeksi skaneerimine. Kui paned sinna v\u00e4\u00e4rtuse, mis katab 90% tabelist, on see ilmselgelt j\u00e4rjestikune skaneerimine, sest Postgres tunneb statistikat. Ja see on pg_stat_statements t\u00f5sine puudus, kuigi mingid t\u00f6\u00f6d k\u00e4ivad.<\/p>\n<p><\/p>\n<p>Logide anal\u00fc\u00fcsi k\u00f5ige olulisem puudus on see, et te ei saa endale lubada \"log_min_duration_statement = 0\", tavaliselt. Ja sellest me r\u00e4\u00e4gime ka. Seega, te ei n\u00e4e kogu pilti. Ja mingi p\u00e4ring, mis on v\u00e4ga kiire, v\u00f5ib tarbida tohutult palju ressursse, kuid te ei n\u00e4e seda, kuna see j\u00e4\u00e4b teie k\u00fcnnise alla.<\/p>\n<p><\/p>\n<p><strong>Kuidas DBA lahendavad leitud probleemid?<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 mingis instantsis, mis ei ole nii suures mahus. Kui olete DBA, siis teil on staging. Ja see v\u00f5ib olla ainult \u00fcks. Ja ta on kuue kuu v\u00f5rra maha j\u00e4\u00e4nud. Ja te arvate, et l\u00e4hete tootmisesse. Ja isegi kogenud DBA-d kontrollivad p\u00e4rast tootmises, replikas. Ja juhtub, et luuakse ajutine indeks, veendutakse, et see aitab, eemaldatakse see ja antakse arendajatele, et nad saaksid selle migreerimisfailidesse panna. Just selline jaburus toimub praegu. Ja see on h\u00e4da.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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>Konfiguratsioonide h\u00e4\u00e4lestamine.<\/li>\n<li>Indeksite kogumi optimeerimine. <\/li>\n<li>SQL-p\u00e4ringu muutmine (see on k\u00f5ige keerulisem viis).<\/li>\n<li>Ressursside lisamine (enamiku juhtude puhul k\u00f5ige lihtsam viis).<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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>Sellega on seotud v\u00e4ga palju. Postgresis on palju t\u00f6\u00f6riistu. Tuleb palju teada. Postgresis on palju indekseid, sealhulgas t\u00e4nu sellele konverentsi korraldajatele. Ja seda k\u00f5ike tuleb teada, ja see tekitab DBA-de seas tunnet, et DBA-d tegelevad musta maagia. T. e. tuleb k\u00fcmme aastat tegutseda, et hakata seda normaalselt m\u00f5istma.<\/p>\n<p><\/p>\n<p>Ja mina olen selle musta maagia vastane. Ma tahan, et oleks tehnoloogia, mitte oleks k\u00f5ike intuitiivselt.<\/p>\n<p><\/p>\n<p><strong>Elu n\u00e4ited<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 v\u00e4hemalt kahes projektis j\u00e4lginud, sealhulgas oma omas. J\u00e4rjekordne blogipostitus teatab meile, et v\u00e4\u00e4rtus 1 000 default_statistict_target jaoks on hea. Hea, proovime tootmises.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 siin me, kasutades oma t\u00f6\u00f6riista kaks aastat hiljem, katsetades andmebaasidega, millest t\u00e4na r\u00e4\u00e4gime, saame v\u00f5rrelda, mis oli ja mis on saanud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 \u2013 keskkond. Me vajame riistvara. Ja kui ma tulen m\u00f5nesse ettev\u00f5ttesse ja s\u00f5lmin lepingu, siis \u00fctlen, et nad annaksid mulle sama riistvara, mis on tootmises. Iga teie meistri jaoks on mul vaja v\u00e4hemalt \u00fchte sellist riistvara. Olgu see virtuaalne masin Amasonis v\u00f5i Google'is, v\u00f5i tahan ma just sellist riistvara. T. e. tahan taastada keskkonna. Ja keskkonna m\u00f5isted h\u00f5lmavad Postgressi peaversiooni. <\/li>\n<li>Teine osa \u2013 meie uuringute objekt. See on andmebaas. Seda saab luua mitmel viisil. N\u00e4itan, kuidas. <\/li>\n<li>Kolmas osa \u2013 koormus. See on k\u00f5ige keerulisem hetk. <\/li>\n<li>Ja neljas osa on see, mida me kontrollime, st millega me v\u00f5rreldes hakkama saame. Oletame, et me 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 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 saanud.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 on default_statistics_target = 100, paremal = 1 000. Me n\u00e4eme, et see aitas meid. \u00dcldiselt paranes k\u00f5ik 8% v\u00f5rra.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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>Aga kui me kerime allapoole, siis seal on pgBadgerist v\u00f5i pg_stat_statements'ist p\u00e4rinevad p\u00e4ringute grupid. Siin on kaks varianti. Me n\u00e4eme, et m\u00f5ni p\u00e4ring langes 88%. Ja siin on juba inseneriline l\u00e4henemine. Me saame kaevuda s\u00fcgavamale, sest see on huvitav, miks see langes. Tuleb m\u00f5ista, mis seal statistikaga oli. Miks suurem hulga kaste statistikates viib halvematele tulemustele.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 pea kaevama, vaid saame teha \"ALTER TABLE ... ALTER COLUMN\" ja tuua tagasi 100 kasti selle veeru statistikas. Ja eksperimendi k\u00e4igus saame veenduda, et see lahendus aitas. K\u00f5ik. See on inseneriline l\u00e4henemine, mis aitab meil n\u00e4ha pilti ja langetada otsuseid andmete, mitte intuitsiooni p\u00f5hjal.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 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 juba aastaid. \u00dckski projekt ei tohiks enam m\u00f5istlikus meelest elada ilma automaatsete testideta.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 katsetame aerod\u00fcnaamikat, on meil samuti v\u00f5imalik eksperimente teha. Me ei hakka kohe midagi plaanidest kosmosesse saatma ega viima m\u00f5nda autot kohe maanteele. N\u00e4iteks on olemas aerod\u00fcnaamiline tunnel. <\/p>\n<p><\/p>\n<p>Teiste valdkondade j\u00e4lgimistest saame j\u00e4reldusi teha. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 on meil spetsiaalne keskkond. See on production'ile l\u00e4hedane, kuid mitte liiga l\u00e4hedane. Selle peamine omadus on see, et see peab olema odav, korduv ja maksimaalselt automatiseeritud. Veel peavad olema spetsiaalsed vahendid p\u00f5hjalikuks anal\u00fc\u00fcsiks.<\/p>\n<p><\/p>\n<p>T\u00f5en\u00e4oliselt, kui me lennukit t\u00f5stsime ja lendame, on meil v\u00e4hem v\u00f5imalusi uurida iga millimeetri ulatust tiiva pinnal kui aerod\u00fcnaamilises t\u00fannis. Meil on parem varustus diagnostikaks. Me saame lubada rohkem kaalu, mida me ei saa lennuki \u00f5hus olles lubada. Niisamuti ka Postgresiga. Me saame m\u00f5nel juhul eksperimentide k\u00e4igus lubada t\u00e4ielikku p\u00e4ringulogimist. Ja me ei soovi seda tootmises teha. V\u00f5ib-olla aktiveerime selle plaanide kaudu auto_explain abil.<\/p>\n<p><\/p>\n<p>Ja nagu ma \u00fctlesin, k\u00f5rge automatiseerimise tase t\u00e4hendab, et me vajutame nuppu ja kordame. Nii peaks see olema, et oleks palju eksperimente ja see oleks voogesituses.<\/p>\n<p><\/p>\n<p>Nancy CLI \u2013 andmebaasistuudio alus<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 me tegime sellise asja. Ehk siis r\u00e4\u00e4kisin neist ideedest juunis, peaaegu aasta tagasi. Ja meil on juba avatud l\u00e4htekoodiga Nancy CLI, mis on alus andmebaasi labori ehitamiseks.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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> \u2014 See on avatud l\u00e4htekoodiga, Gitlabis. V\u00f5ite \u00f6elda, et saate proovida. Andsin selle kohta lingi slaidides. Saate sellele kl\u00f5psata ja seal on <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/postgres-ai\/nancy\/-\/blob\/master\/help\/nancy_run.md\">help<\/a><\/noindex> k\u00f5igis parameetrites.<\/p>\n<p><\/p>\n<p>Muidugi on seal veel palju arenduses. Seal on palju ideid. Kuid see on juba see, mida me rakendame praktiliselt igap\u00e4evaselt. Ja kui meil tekib idee \u2013 mis juhtub, kui kustutame 40 000 000 rida, ja k\u00f5ik seisab IO-s, siis saame eksperimendi l\u00e4bi viia ja s\u00fcvitsi uurida, et m\u00f5ista, mis toimub, ning proovida seda jooksvalt parandada. Ehk siis teeme eksperimenti. N\u00e4iteks kohandame midagi ja vaatame, mis l\u00f5puks v\u00e4lja tuleb. Ja me ei tee seda tootmises. See on idee sisu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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\u00f5ib toimida? See v\u00f5ib t\u00f6\u00f6tada kohapeal, st seda saab teha igal pool, isegi MacBookis. Vajalik on docker, saame minna. Ja k\u00f5ik. Saame selle k\u00e4ivitada mingis instantsis riistvaral v\u00f5i virtuaalmasinas, kus iganes.<\/p>\n<p><\/p>\n<p>Ja on ka v\u00f5imalus k\u00e4ivitada kaugelt Amazonis EC2 instantsides, spotides. See on v\u00e4ga tore v\u00f5imalus. N\u00e4iteks eile viisime l\u00e4bi \u00fcle 500 eksperimendi i3 instantsiga, alustades k\u00f5ige nooremast kuni i3-16-xlarge'ni. Ja need 500 eksperimenti maksid meile 64 dollarit. Iga\u00fcks kestis 15 minutit. See t\u00e4hendab, et kuna kasutatakse spote, on see v\u00e4ga odav \u2013 70% allahindlus, Amazonis on sekundip\u00f5hine m\u00f5\u00f5tmine. Te saate teha v\u00e4ga palju. Saate l\u00e4bi viia t\u00f5elist uuringut.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 kolme peamise versiooni Postgres toimetatakse. Pole v\u00e4ga keeruline t\u00e4iendada m\u00f5ningaid vana ja uut 12. versiooni samuti.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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>Me saame objekti m\u00e4\u00e4rata kolmel viisil. Need on:<\/p>\n<p><\/p>\n<ul>\n<li>Dump\/sql-fail. <\/li>\n<li>Peamine viis on PGDATA kausta kloonimine. Reeglina v\u00f5etakse see varunduss serverist. Kui teil on korralikud binaarsed varukoopiad, siis sealt saate kloone teha. Kui teil on pilved, siis teeb teie eest seda pilveteenus, nagu Amazon ja Google. See on peamine meetod reaalse tootmise kloonide jaoks. Me arendame seda viisil. <\/li>\n<li>Viimane meetod sobib uuringuteks, kui on soov uurida, kuidas Postgresis mingi asi t\u00f6\u00f6tab. See on pgbench. Te saate seda genereerida pgbenchiga. See on lihtsalt \u00fcks valik 'db-pgbench'. \u00dctlete, millise skaalaga soovite t\u00f6\u00f6delda. Ja k\u00f5ik genereeritakse pilves, nagu \u00f6eldud.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 \u00fche SQL-voo kaudu. See on k\u00f5ige primitiivsem meetod. <\/li>\n<li>V\u00f5i saame emuleerida koormust. Ja emuleerida saame peamiselt j\u00e4rgmisel viisil. Me peame koguma k\u00f5ik logid. Ja see on valulik. Ma n\u00e4itan, miks. Ja pgreplay abil, mis on sisse ehitatud Nancy'sse, m\u00e4ngime selle tagasi. <\/li>\n<li>V\u00f5i teine variant. Nii nimetatud k\u00e4sitsi koormus, mida me teeme teatud j\u00f5upingutustega. Anal\u00fc\u00fcsides meie praegust koormust tootmiss\u00fcsteemis, v\u00e4lja t\u00f5mmata populaarsed p\u00e4ringugrupid. Ja pgbench abil saame laboratooriumis seda koormust emuleerida. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 mingi SQL, st me kontrollime mingit migratsiooni, loome indeksi, teostame ANALYZE. Ja vaatame, mis oli enne vaakumist ja p\u00e4rast vaakumit. \u00dches\u00f5naga, mis tahes SQL.<\/li>\n<li>V\u00f5i muudame konfiguraatoris \u00fchte v\u00f5i mitut seadet. Saame paluda, et kontrollitaks n\u00e4iteks 100 v\u00e4\u00e4rtust Amazonis meie terabaidi andmebaasi jaoks. Ja m\u00f5ne tunni p\u00e4rast on teil tulemus. \u00dcldiselt kestab terabaidi andmebaasi k\u00e4ivitamine mitu tundi. Kuid arenduses on meil patch, meil on v\u00f5imalik seeria, st saate j\u00e4rjestikku samal serveril kasutada sama pgdata ja kontrollida. Postgres taask\u00e4ivitatakse, vahem\u00e4lu t\u00fchi. Ja saate lasta koormust. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 hulk erinevaid faile, alustades pg-snapshots.<em>stat<\/em>***. Ja seal on k\u00f5ige huvitavamad \u2013 need on pg_stat_statements ja pg_stat_kcacke. Need on kaks laiendust, mis anal\u00fc\u00fcsivad p\u00e4ringuid. Ja pg_stat_bgwriter sisaldab mitte ainult pgwriter statistikat, vaid ka checkpoint'i ja seda, kuidas backend\u2019id ise mustad vahem\u00e4lud v\u00e4lja t\u00f5ukavad. Ja seda k\u00f5ike on huvitav vaadata. N\u00e4iteks kui seadistame shared_buffers'i, siis on v\u00e4ga huvitav vaadata, kui palju keegi seal v\u00e4lja t\u00f5ukab.<\/li>\n<li>Saabuvad ka Postgresi logid. Kaks logi \u2013 ettevalmistuse logi ja koormuse m\u00e4ngimise logi. <\/li>\n<li>Suhteliselt uus funktsioon \u2013 FlameGraphs.<\/li>\n<li>Samuti, kui olete kasutanud pgreplay v\u00f5i pgbench koormuse m\u00e4ngimise variante, siis tuleb nende originaalne v\u00e4ljund. Ja te n\u00e4ete latentsust ja TPS-i. Saate aru, kuidas nad seda n\u00e4gid. <\/li>\n<li>Teave s\u00fcsteemi kohta. <\/li>\n<li>P\u00f5hilised kontrollid CPU ja IO. See on rohkem EC2 eksemplaride jaoks Amazonis, kui soovite voos k\u00e4ivitada 100 \u00fchesugust eksemplari ja seal jooksutada 100 erinevat katset, siis teil on 10 000 katsetust. Ja peate veenduma, et te ei saa defektset eksemplari, mida keegi juba r\u00f5hub. Sellel riistvaral aktiveerivad teised ja teie ressursid j\u00e4\u00e4vad v\u00e4heseks. Sellised tulemused on parem k\u00f5rvaldada. Ja just Aleksei Kopytovi sysbench'i abil teeme m\u00f5ned l\u00fchikesed kontrollid, mis tulevad ja mida saab teistega v\u00f5rrelda, st saate aru, kuidas CPU ja IO k\u00e4ituvad. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 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 tahame reaalset koormust logide abil korrata. Suurep\u00e4rane idee, kui see on avatud l\u00e4htekoodiga pgreplay\u2019i peale kirjutatud. Me kasutame seda. Kuid et see korralikult t\u00f6\u00f6taks, peate lubama t\u00e4ieliku p\u00e4ringute logimise parameetrite ja ajastusega.<\/p>\n<p><\/p>\n<p>Seal on m\u00f5ned keerukused duration ja timestamp'i osas. Me j\u00e4tame selle k\u00f5igi k\u00f6\u00f6gilisest aspektist k\u00f5rvale. Peamine k\u00fcsimus on \u2013 kas saate endale seda lubada v\u00f5i ei saa? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 ei pruugi olla saadaval. Te peate esmalt m\u00f5istma, millist voogu hakata logima. Kui teil on pg_stat_statements, saate sellise p\u00e4ringu abil (link saadaval esitluses) aru saada, kui palju byte'e kirjutatakse sekundis.<\/p>\n<p><\/p>\n<p>Me vaatame p\u00e4ringu pikkust. Me ei p\u00f6\u00f6ra t\u00e4helepanu sellele, et seal ei ole parameetreid, kuid me teame p\u00e4ringu pikkust ja teame, kui mitu korda sekundi jooksul see t\u00e4idetakse. Seega saame umbkaudselt hinnata, kui palju byte'e sekundis. Me v\u00f5ime eksida kaks korda, kuid me saame selle meetodi abil kindlasti umbes arvu teada.<\/p>\n<p><\/p>\n<p>Me n\u00e4eme, et see p\u00e4ring t\u00e4idetakse 802 korda sekundis. Ja me n\u00e4eme, et bytes_per sec \u2013 300 kB\/s kirjutatakse pluss miinus. Ja tavaliselt saame sellise voolu endale lubada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 erinevaid logimise s\u00fcsteeme on palju. Ja vaikimisi kasutavad inimesed tavaliselt 'syslog'.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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, v\u00f5ib teil olla selline pilt. V\u00f5tame pgbench'i, aktiveerime p\u00e4ringute logimise ja vaatame, mis v\u00e4lja tuleb.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 \u2013 see on vasak pool. Me saime 161 000 TPS. Syslog'i kasutades \u2013 see Ubuntu 16.04 Amazonis annab meile 37 000 TPS. Ja kui me muudame spetsiaalsete logimise meetodite kaheks, siis on olukord palju parem. See t\u00e4hendab, et me ootasime langust, kuid mitte nii suurt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 ka journald osaleb, muutes logid binaarfookus koopiate otsimiseks jms, on seal olukord t\u00f5eliselt kohutav \u2013 TPS langeb 44 korda.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 h\u00fcpata syslog'ist eemale, siis tehke seda.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 kirjutamisvoogu. <\/li>\n<li>Kontrollige oma logimise s\u00fcsteemi. <\/li>\n<li>Kui prognoositud koormus on liiga suur, kaaluge sampeldamise varianti. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 olema. Ja me saame v\u00f5tta ja iga p\u00e4ringute r\u00fchma spetsiaalselt kirjeldada failis. Ja edasi saame kasutada pgbench'i v\u00e4ga mugavat funktsiooni \u2013 mitu faili saab edastada valiku '-f' abil.<\/p>\n<p><\/p>\n<p>Ta m\u00f5istab palju \u00ab-f\u00bb. Ja v\u00f5ime \u00f6elda \u00ab@\u00bb abil, kui suur osa igast failist peaks olema. T. e. me saame \u00f6elda, et seda teostame 10 % juhtudest, ja seda 20 %. Ja see l\u00e4heneb meile sellele, mida n\u00e4eme tootmises.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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? Kui suur on ja mida? Siin on see natuke k\u00f5rvale kaldumine. Meil on veel \u00fcks toode. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/postgres-ai\/postgres-checkup\">postgres-checkup<\/a><\/noindex>. Ka see p\u00f5hineb Open Source'is. Ja me arendame seda aktiivselt.<\/p>\n<p><\/p>\n<p>See tekkis pisut teistel p\u00f5hjustel. Sellep\u00e4rast, et monitooring ei ole piisav. T. e. te tulete, vaatate andmebaasi, vaatate olemasolevaid probleeme. Ja tavaliselt teete health_check'i. Kui olete kogenud DBA, siis teete health_check'i. Vaadake indeksite kasutust jne. Kui teil on OKmeter, siis on suurep\u00e4rane. See on suurep\u00e4rane monitooring Postgres'i jaoks. OKmeter.io \u2013 palun, kasutage seda, seal on k\u00f5ik v\u00e4ga h\u00e4sti tehtud. See on tasuline.<\/p>\n<p><\/p>\n<p>Kui seda ei ole, siis tavaliselt on teil v\u00e4he, mis on. Monitooringus on tavaliselt ainult CPU, IO ja see ka ettevaatlikult, ja k\u00f5ik. Aga meil on vaja rohkem. Me peame n\u00e4gema, kuidas avak\u00fcpsetamine t\u00f6\u00f6tab, kuidas kontrollpunkt t\u00f6\u00f6tab, IO-s tuleb eristada kontrollpunkti bgwriter'ist ja tagurpidi jne.<\/p>\n<p><\/p>\n<p>Probleem on see, et kui sa aitad mingi suure ettev\u00f5ttega, siis nad ei saa midagi kiiresti rakendada. Ei saa kiiresti osta OKmeterit. V\u00f5ib-olla ostavad nad selle kuue kuu p\u00e4rast. Ei saa kiiresti paigaldada mingeid pakette. <\/p>\n<p><\/p>\n<p>Ja meil tuli idee, et me vajame sellist spetsiaalset t\u00f6\u00f6riista, mis ei n\u00f5ua midagi installimist, t. e. te ei pea tootmisesse midagi installima. Paigaldage see oma s\u00fclearvutisse v\u00f5i j\u00e4lgimisserverisse, kust te seda k\u00e4ivitama hakkate. Ja see anal\u00fc\u00fcsib palju asju: operatsioonis\u00fcsteemi, failis\u00fcsteemi ja Postgres'i, tehes kergeid p\u00e4ringuid, mida saab tootmises jooksutada ja mis ei p\u00f5hjusta s\u00fcsteemi seiskumist.<\/p>\n<p><\/p>\n<p>Me nimetasime selle Postgres-checkup'iks. Kui r\u00e4\u00e4kida arstiteemal, siis see on regulaarne tervisekontroll. Kui r\u00e4\u00e4kida autode teemal, siis see on nagu tehniline \u00fclevaatus. Teete oma autole tehnilise \u00fclevaatuse iga kuue kuu v\u00f5i aasta tagant, olenevalt margist. Aga kas teete tehnilist \u00fclevaatust oma andmebaasile? T. e. kas teete regulaarselt s\u00fcvaanal\u00fc\u00fcse? Seda tuleb teha. Kui teete varukoopiaid, siis tehke ka kontroll, see ei ole v\u00e4hem 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 head.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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>Kogume k\u00f5ige \u201em\u00f5jukamad\u201d p\u00e4ringute grupid \u2013 K003 aruanne Postgres-checkupis<\/p>\n<p><\/p>\n<p>Ja seal on K gruppide aruanne. Kolm aruannet hetkel. Ja seal on selline aruanne nagu K003. Seal on pg_stat_statements tipp, sorteeritud total_time j\u00e4rgi.<\/p>\n<p><\/p>\n<p>Kui me sorteerime p\u00e4ringute grupid total_time j\u00e4rgi, n\u00e4eme grupi, mis koormab meie s\u00fcsteemi k\u00f5ige enam, st tarbib rohkem ressursse. Miks ma kutsub neid p\u00e4ringute gruppideks? Sest me oleme parameetrid v\u00e4lja visanud. Need pole enam p\u00e4ringud, vaid p\u00e4ringute grupid, st need on abstraktne.<\/p>\n<p><\/p>\n<p>Ja kui me optimeerime \u00fclevalt alla, kergendame oma ressurse ja l\u00fckkame edasi hetke, mil peame tegema uuenduse. 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 kasutajate hoolitsemiseks, sest me ei pruugi n\u00e4ha harvikuid, kuid v\u00e4ga t\u00fc\u00fctu juhtumeid, kui inimene ootas 15 sekundit. Kokkuv\u00f5ttes on need harvad, et me ei n\u00e4e neid, kuid kasutame ressurssi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 juhtus selle tabeliga? Me tegime kaks snapshots. Postgres_checkup teeb teile delta iga m\u00f5\u00f5tme jaoks: total-time, calls, rows, shared_blks_read jne. K\u00f5ik, delta on arvutatud. pg_stat_statements suur probleem on see, et ta ei m\u00e4leta, millal see nulliti. Kui pg_stat_database m\u00e4letab, siis pg_stat_statements ei m\u00e4leta. Sa n\u00e4ed seal 1 000 000 arvu, kuid kust me selle arvutasime, me ei tea.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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>Ja siin me teame, meil on kaks snapshots. Me teame, et delta oli selle juhtumi puhul 56 sekundit. V\u00e4ga v\u00e4ike vahe. Sorteeritud total_time j\u00e4rgi. Edasi saame diferentseerida, st jagame k\u00f5ik m\u00f5\u00f5tmed durationiga. Kui me iga m\u00f5\u00f5tme jagame durationiga, saame k\u00f5nede arvu sekundis.<\/p>\n<p><\/p>\n<p>J\u00e4tkame total_time sekundis \u2013 see on minu lemmik m\u00f5\u00f5de. See on m\u00e4\u00e4ratud sekundites, st kui palju sekundeid kulus meie s\u00fcsteemil selle p\u00e4ringute grupi t\u00e4itmiseks sekundis. Kui sa seal n\u00e4ed rohkem kui sekund sekundis, t\u00e4hendab see, et vajad rohkem kui \u00fche tuuma. See on v\u00e4ga hea m\u00f5\u00f5de. Sa saad aru, et sellele isikule on n\u00e4iteks vajalik minimaalselt kolm tuuma.<\/p>\n<p><\/p>\n<p>See on meie know-how, midagi sellist ma pole kuskil n\u00e4inud. Pange t\u00e4hele \u2013 see on v\u00e4ga lihtne asi \u2013 sekund sekundis. M\u00f5nikord, kui teie CPU on 100%, siis pool tundi sekundis, st te tegelesite ainult nende p\u00e4ringutega pool tundi. <\/p>\n<p><\/p>\n<p>Edasi n\u00e4eme ridade arvu sekundis. Me teame, mitu rida sekundis tagastati.<\/p>\n<p><\/p>\n<p>Ja edasi on veel huvitav asi. Kui palju me shared_buffers-st sekundis lugesime. Hitid olid juba seal, rida saime kas operatsioonis\u00fcsteemi vahem\u00e4lust v\u00f5i kettalt. Esimene variant on kiire, teine v\u00f5ib olla kiire, aga v\u00f5ib ka mitte olla, see s\u00f5ltub olukorrast. <\/p>\n<p><\/p>\n<p>Teine diferentsieerimise viis on, et jagame selle grupi p\u00e4ringute arvu. Teises veerus on teil alati \u00fcks p\u00e4ring, jagatud p\u00e4ringu j\u00e4rgi. Ja siis on huvitav \u2013 kui palju millisekundeid oli selle p\u00e4ringu t\u00e4itmiseks. Me teame, kuidas see p\u00e4ring keskmiselt k\u00e4itub. Iga p\u00e4ringu jaoks kulus 101 millisekundit. See on traditsiooniline m\u00f5\u00f5dik, mis on oluline meie arusaamiseks.<\/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 v\u00f5eti ja loeti. N\u00e4eme, et k\u00f5ik on ideaalne vahem\u00e4lus. Esimese grupi jaoks on puhtad hitid. <\/p>\n<p><\/p>\n<p>Ja iga rea neljas alareal on see, kui protsenti koguarvust. Meil on calls. Oletame, et 1 000 000. Ja me saame aru, millise panuse see grupp annab. N\u00e4eme, et antud juhul paneb esimene grupp v\u00e4hem kui 0,01% panuse. See t\u00e4hendab, et ta on nii aeglane, et me ei n\u00e4e seda \u00fcldpildis. Aga teine grupp \u2013 5% k\u00f5igist kutsetest. See t\u00e4hendab, et 5% k\u00f5igist kutsetest on teine grupp. <\/p>\n<p><\/p>\n<p>Total_time kohta on ka huvitav. Esimese grupi p\u00e4ringute jaoks kulus 14% kogu t\u00f6\u00f6tamisajast. Teise jaoks 11% jne. <\/p>\n<p><\/p>\n<p>Ma ei s\u00fcvene detailidesse, aga seal on n\u00fcansse. Meie pealtn\u00e4ha ilmub viga, kuna kui me v\u00f5rreldes v\u00f5rdleme, v\u00f5ivad snapshotid nihkuda, st m\u00f5ned p\u00e4ringud v\u00f5ivad kaduda ja teises enam mitte esineda, ning m\u00f5ned v\u00f5ivad uued ilmuda. Ja me seal arvutame vea v\u00e4lja. Kui n\u00e4ete 0, siis on k\u00f5ik h\u00e4sti. Vigu pole. Kui veaprotsent on kuni 20%, on see OK. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 naaseme meie teema juurde. Me peame koostama t\u00f6\u00f6koormuse. Me l\u00e4heme \u00fclevalt alla, kuni saavutame 80% v\u00f5i 90%. Tavaliselt on see 10-20 gruppi. Ja teeme failid pgbench jaoks. Seal kasutame random. M\u00f5nikord ei \u00f5nnestu see, kahjuks. Ja Postgres 12-s on rohkem v\u00f5imalusi selle l\u00e4henemisviisi kasutamiseks. <\/p>\n<p><\/p>\n<p>Ja ja oleme selliselt kogunud 80\u201390 % kogu ajast. Mida edaspidi p\u00e4rast \u201e@\u201c sisestada? Vaatame k\u00f5nesid, vaatame, kui palju protsente ja m\u00f5istame, et peaksime olema siin teatud protsendiga. Nendest protsentidest suudame m\u00f5ista, kuidas iga faili tasakaalustada. P\u00e4rast seda kasutame pgbench'i ja hakkame t\u00f6\u00f6le. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 ka K001 ja K002. <\/p>\n<p><\/p>\n<p>K001 on suur string, mis sisaldab nelja alams\u00f5numeid. See iseloomustab meie koormust. Vaadake teist veergu ja teist alams\u00f5numit. N\u00e4eme, et umbes 1,5 sekundit sekundis, st kui on kaks tuuma, on see hea. Laadimine 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 see on minu meelest p\u00e4ringute klassid, st SELECT, INSERT, UPDATE, DELETE. Ja eraldi SELECT FOR UPDATE, kuna see lukustab. <\/p>\n<p><\/p>\n<p>Siit saame j\u00e4reldada, et tavalised SELECT-lugejad moodustavad 82 % k\u00f5igist k\u00f5nedest, kuid samal ajal 74 % kogu ajast. St neid kutsutakse palju, kuid nad tarvitavad v\u00e4hem ressursse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 tuleme tagasi k\u00fcsimuse juurde: \u201eKuidas valida \u00f5igesti shared_buffers?\u201c. Ma olen t\u00e4heldanud, et enamik teste p\u00f5hinevad ideel \u2013 vaatame, kui palju l\u00e4bi l\u00e4heb, st mis on l\u00e4bilaskev\u00f5ime. Seda m\u00f5\u00f5detakse tavaliselt TPS v\u00f5i QPS-iga.<\/p>\n<p><\/p>\n<p>Ja p\u00fc\u00fcame max \u00f5hku v\u00e4lja pigistada kohalt koos seadistuste kaudu, et saada v\u00f5imalikult palju tehinguid sekundis. Siin on t\u00e4pselt 311 sekundi kohta SELECT jaoks.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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>Aga keegi ei s\u00f5ida t\u00f6\u00f6le ja tagasi koju autoga t\u00e4is kiirusel. See on rumal. Nii on ka andmebaasidega. Me ei tohiks s\u00f5ita t\u00e4iskiirusel, ja keegi ei tee seda. Keegi ei ela produtsioonis, kus on 100% CPU. Kuigi v\u00f5ib-olla keegi elab, aga see pole hea. <\/p>\n<p><\/p>\n<p>Idee on selline, et me s\u00f5idame tavaliselt 20% oma v\u00f5imekusest, soovitatavalt mitte rohkem kui 50%. Ja p\u00fc\u00fcame optimeerida reageerimisaega meie kasutajatele. St me peame keerama oma nuppe nii, et latentsus oleks minimaalne 20% kiirusel, tinglikult. See on idee, mida p\u00fc\u00fcame oma katsetes kasutada.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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\u00f5puks soovitused: <\/p>\n<p><\/p>\n<ul>\n<li>Kohustuslik on luua Database Lab.<\/li>\n<li>V\u00f5imaluse korral tehke see v\u00e4ljakutsena, et saaks selle m\u00f5neks ajaks \u00fcles seada \u2013 m\u00e4ngida ja k\u00f5rvaldada. Kui teil on pilved, siis on see loomulik, st omage palju seisvaid. <\/li>\n<li>Olge uudishimulikud. Ja kui midagi on valesti, siis kontrollige katsetega, kuidas see k\u00e4itub. Nancy't saab kasutada, et ise \u00f5petada ja kontrollida, kuidas andmebaas t\u00f6\u00f6tab.<\/li>\n<li>Ja suunake minimaalset reageerimisaega. <\/li>\n<li>Ja \u00e4rge kartke Postgrese l\u00e4htekoodi. Kui t\u00f6\u00f6tate l\u00e4htekoodiga, peate teadma inglise keelt. Seal on v\u00e4ga palju kommentaare, k\u00f5ik on selgelt seletatud. <\/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 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 palju! V\u00e4ga huvitav teema.<\/em> <\/p>\n<p><\/p>\n<p>Kaks asja.<\/p>\n<p><\/p>\n<p><em>Jah, kaks asja. Ainult et ma ei saanud t\u00e4iesti aru. Kui me Nancy'ga t\u00f6\u00f6tame, kas me saame reguleerida vaid \u00fchte parameetrit v\u00f5i terve grupi?<\/em><\/p>\n<p><\/p>\n<p>Meil on delfiini konfiguratsiooni parameeter. Saate sinna samaaegselt palju keerata. Kuid tuleb m\u00f5ista, et kui muudad palju asju, v\u00f5id vale j\u00e4relduse teha. <\/p>\n<p><\/p>\n<p><em>Jah. Miks ma k\u00fcsisin? Sest on keeruline katsetada, kui sul on vaid \u00fcks parameeter. Sa keerad seda, vaatad, kuidas see t\u00f6\u00f6tab. Seadistad selle. Siis alustad j\u00e4rgmisega.<\/em><\/p>\n<p><\/p>\n<p>Samaaegselt saab reguleerida, kuid see s\u00f5ltub olukorrast, muidugi. Kuid parem on testida \u00fche ideed korraga. Eile tuli meil idee. Meil oli v\u00e4ga sarnane olukord. Oli kaks konfiguratsiooni. Ja me ei suutnud aru saada, miks vahe on nii suur. Ja tekkis idee, et on vaja kasutada dikotoomiat, et j\u00e4rjestikku m\u00f5ista ja leida, kus on erinevus. Saame kohe pool parameetritest \u00fcheks muuta, siis veerandi jne. K\u00f5ik on paindlik.<\/p>\n<p><\/p>\n<p><em>Ja on veel k\u00fcsimus. Projekt on noor, areneb. Kas dokumentatsioon on juba valmis, on \u00fcksikasjalik kirjeldus?<\/em><\/p>\n<p><\/p>\n<p>Olen seal spetsiaalselt linki teinud parameetrite kirjeldustele. See on olemas. Kuid palju asju pole veel valmis. Otsin kaasosalisi. Ja ma leian neid, kui esinen. See on v\u00e4ga lahe. Keegi juba t\u00f6\u00f6tab minuga, keegi aitas ja tegi midagi. Ja kui teid see teema huvitab, andke tagasi side \u2013 mida puudub. <\/p>\n<p><\/p>\n<p><em>Kui j\u00f5uame laborisse, v\u00f5ib-olla tuleb ka tagasi side. Vaatame. Ait\u00e4h!<\/em><\/p>\n<p><\/p>\n<p><em>Tere! Ait\u00e4h ettekande eest! N\u00e4gin, et Amazoni tugi on olemas. Kas plaanitakse GSP tuge?<\/em><\/p>\n<p><\/p>\n<p>Hea k\u00fcsimus. Oleme alustanud, kuid oleme selle peatama pannud, kuna soovime kokku hoida. T. e. on olemas tugi, kasutades run on localhost. Saate ise luua instantsi ja t\u00f6\u00f6tada kohapeal. Muide, me teeme nii. Getlabi puhul teen ma seda, seal on GSP. Kuid me ei n\u00e4e m\u00f5tet teha just sellist orkestreerimist, kuna Google'il pole soodsaid spote. Seal on ??? instantsi, kuid neil on piirangud. Esiteks, neil on alati ainult 70% allahindlus ja seal ei saa hindadega m\u00e4ngida. Spote t\u00f5stame 5-10% v\u00f5rra, et v\u00e4hendada t\u00f5en\u00e4osust, et teid v\u00e4lja visatakse. T. e. spote kasutades saate kokku hoida, kuid neid v\u00f5idakse teil igal ajal \u00e4ra v\u00f5tta. Kui hind on veidi k\u00f5rgem kui teistel, v\u00f5idakse teid hiljem v\u00e4lja visata. Google'il on t\u00e4iesti erinev erip\u00e4ra. Ja veel on \u00fcks v\u00e4ga halb piirang - need elavad ainult 24 tundi. Ja m\u00f5nikord tahame katsetusi viia l\u00e4bi 5 p\u00e4eva. Kuid spottidega on seda v\u00f5imalik teha, spote on m\u00f5nikord kuud kestnud. <\/p>\n<p><\/p>\n<p><em>Tere! Ait\u00e4h ettekande eest! Mainisite checkup'i. Kuidas te arvutate stat_statements vigu?<\/em><\/p>\n<p><\/p>\n<p>T\u00f5eliselt hea k\u00fcsimus. Ma saan v\u00e4ga \u00fcksikasjalikult n\u00e4idata ja r\u00e4\u00e4kida. L\u00fchidalt - vaatame, kuidas grupi p\u00e4ringud liikuma hakkavad: kui palju on kadunud ja kui palju uusi on tulnud. Ja seej\u00e4rel vaatame kahte m\u00f5\u00f5dikut: total_time ja calls, seega on seal kaks viga. Ja vaatame, milline on kadunud gruppide panus. Seal on kaks alagruppi: l\u00e4inud ja tulnud. Vaatame, milline on nende panus kogu pildis. <\/p>\n<p><\/p>\n<p><em>Kas te ei karda, et see toob seal kaks-kolm korda ringi aega, mis j\u00e4\u00e4b sn\u00e4pshotide vahel?<\/em><\/p>\n<p><\/p>\n<p>T. e. nad registreerusid uuesti v\u00f5i kuidas?<\/p>\n<p><\/p>\n<p><em>N\u00e4iteks, see p\u00e4ring on juba kord v\u00e4ljat\u00f5rjutud, seej\u00e4rel tuli tagasi ja t\u00f5rjus j\u00e4lle v\u00e4lja, seej\u00e4rel tuli veel kord tagasi ja t\u00f5rjus j\u00e4lle v\u00e4lja. Ja te arvutasite midagi, ja kus see k\u00f5ik on?<\/em><\/p>\n<p><\/p>\n<p>Hea k\u00fcsimus, tuleb uurida. <\/p>\n<p><\/p>\n<p><em>Ma tegin sarnast asja. Loomulikult tegin ma selle lihtsamaks \u00fcksi. Kuid pidin resettima, tegema reset stat_statements ja orienteeruma sn\u00e4pshoti hetkel, et seal oleks v\u00e4hem teatud osa, et see ei oleks veel saavutanud piiri, kui palju stat_statements v\u00f5ib koguda. Ja ma orienteerun, 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 kuidas muidu usaldusv\u00e4\u00e4rselt teha ma ei saa aru.<\/em><\/p>\n<p><\/p>\n<p>Kahjuks ei m\u00e4leta ma t\u00e4pselt - kas me kasutame seal p\u00e4ringu teksti v\u00f5i queryid pg_stat_statements ja sellele orienteerume. Kui me orienteerume queryid, siis teoreetiliselt v\u00f5rreldame me v\u00f5rreldavaid asju. <\/p>\n<p><\/p>\n<p><em>Ei, ta v\u00f5ib mitmeid kordi vahepeal l\u00f5ppeda ja uuesti tulla.<\/em><\/p>\n<p><\/p>\n<p>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. Aga praegu, mida n\u00e4eme, on meil kas 0 kirjutatud...<\/p>\n<p><\/p>\n<p><em>See on muidugi haruldane juhtum, aga mind jahmatas, kui sain teada, et stat_statements v\u00f5ib seal l\u00f5ppeda.<\/em> <\/p>\n<p><\/p>\n<p>Pg_stat_statements-s v\u00f5ib olla palju erinevaid asju. Oleme kogenud, et kui teil on track_utility = on, siis teie komplektid j\u00e4lgitakse ka. <\/p>\n<p><\/p>\n<p><em>Jah, muidugi.<\/em><\/p>\n<p><\/p>\n<p>Ja kui teil on Java Hibernate, mis on juhuslik, siis seal hakkab hash-tabel lukustuma. Ja kui te l\u00fclitate v\u00e4lja 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 suurendada pg_stat_statements.max. <\/p>\n<p><\/p>\n<p><em>Jah, aga peate teadma, kui palju. Ja kuidagi peab sellega tegelema. Mina teen nii. St mul on pg_stat_statements.max. Ja vaatan, et ma ei ole hetkeseisuga j\u00f5udnud 70% -ni. H\u00e4sti, see t\u00e4hendab, et me ei kaotanud midagi. Teeme reset'i. Ja kogume j\u00e4lle. Kui j\u00e4rgmises hetkeseisus on alla 70%, siis t\u00e4hendab see, et t\u00f5en\u00e4oliselt ei kaotanud me j\u00e4lle midagi.<\/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=\"M\u00e4ngi videot\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>P.S. Lisaks \u00fctlen, et kui Postgres sisaldab konfidentsiaalseid andmeid, mis ei tohi testkeskkonda sattuda, siis saab kasutada <noindex><a rel=\"nofollow\" href=\"https:\/\/labs.dalibo.com\/postgresql_anonymizer\">PostgreSQL Anonymizer<\/a><\/noindex>. Skeem on ligikaudu j\u00e4rgmine:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL 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 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \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?\" \/>\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) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\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?\" \/>\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\udd47T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega\u00bb. Nikolai Samohvalov | ProHoster","description":"Soovitan tutvuda Nikolai Samohvalovi ettekande \"T\u00f6\u00f6stuslik l\u00e4henemine PostgreSQL h\u00e4\u00e4lestamisele: eksperimendid andmebaasidega\" t\u00f5lgendusega. Shared_buffers = 25% \u2013 kas see on palju v\u00f5i v\u00e4he?","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?","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","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\/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}]}}