{"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\/sv\/blog\/administrirovanie\/promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov","title":{"rendered":"Industriellt tillv\u00e4gag\u00e5ngss\u00e4tt f\u00f6r tuning av PostgreSQL: experiment med databaser\u201d. Nikolaj Samokhvalov","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Jag f\u00f6resl\u00e5r att du bekantar dig med transkriptionen av Nikolai Samokhalovs presentation \"Industrin\u00e4rmande av PostgreSQL-tuning: experiment med databaser\"<\/strong><\/p>\n<p><\/p>\n<p>Shared_buffers = 25% \u2013 \u00e4r detta mycket eller lite? Eller precis lagom? Hur kan man f\u00f6rst\u00e5 om denna \u2013 ganska f\u00f6r\u00e5ldrade \u2013 rekommendation \u00e4r l\u00e4mplig i just ditt fall?<\/p>\n<p><\/p>\n<p>Det \u00e4r dags att ta ett moget grepp om val av parametrar f\u00f6r postgresql.conf. Inte med hj\u00e4lp av blinda \"autotuners\" eller f\u00f6r\u00e5ldrade r\u00e5d fr\u00e5n artiklar och bloggar, utan baserat p\u00e5:<\/p>\n<p><\/p>\n<ol>\n<li>noggrant genomf\u00f6rda experiment p\u00e5 databaser, utf\u00f6rda automatiserat, i stor skala och under f\u00f6rh\u00e5llanden som \u00e4r s\u00e5 n\u00e4ra \"strid\" som m\u00f6jligt,<\/li>\n<li>en djup f\u00f6rst\u00e5else av databashanteringssystemets och operativsystemets egenskaper.<\/li>\n<\/ol>\n<p><\/p>\n<p>Genom att anv\u00e4nda Nancy CLI (<noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/postgres.ai\/nancy\">https:\/\/gitlab.com\/postgres.ai\/nancy<\/a><\/noindex>), kommer vi att titta p\u00e5 ett konkret exempel \u2013 det beryktade shared_buffers \u2013 i olika situationer, i olika projekt och f\u00f6rs\u00f6ka f\u00f6rst\u00e5 hur man kan justera inst\u00e4llningarna optimalt f\u00f6r v\u00e5r infrastruktur, databas och belastning.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" 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>Vi kommer att prata om experiment med databaser. Det \u00e4r en historia som har p\u00e5g\u00e5tt i lite mer \u00e4n ett halv\u00e5r. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/e77255c4abaa2a01ae37fe888fe67db7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lite om mig. Jag har mer \u00e4n 14 \u00e5rs erfarenhet av Postgres. Jag har grundat flera f\u00f6retag inom sociala n\u00e4tverk. Postgres har anv\u00e4nts \u00f6verallt och anv\u00e4nds fortfarande.<\/p>\n<p><\/p>\n<p>Dessutom har gruppen RuPostgres p\u00e5 Meetup, som ligger p\u00e5 andra plats i v\u00e4rlden. Vi n\u00e4rmar oss s\u00e5 sm\u00e5tt 2000 medlemmar. RuPostgres.org.<\/p>\n<p><\/p>\n<p>Och p\u00e5 olika konferenser, inklusive Highload, ansvarar jag f\u00f6r databaser, s\u00e4rskilt Postgres sedan starten.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/fa009b50f1c0293eee80fc03fd2c05f0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Under de senaste \u00e5ren har jag \u00e5terupptagit min praktik inom Postgres-konsultation i 11 tidszoner fr\u00e5n h\u00e4r.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/550c3ddcd516adca14d2b3de9c34b7ff.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e4r jag gjorde detta f\u00f6r n\u00e5gra \u00e5r sedan hade jag haft ett visst avbrott fr\u00e5n aktivt manuellt arbete med Postgres, troligen sedan 2010. Jag blev f\u00f6rv\u00e5nad \u00f6ver hur lite arbetsvardagen f\u00f6r DBA har f\u00f6r\u00e4ndrats, hur mycket manuellt arbete som fortfarande kr\u00e4vs. Jag t\u00e4nkte genast att n\u00e5got m\u00e5ste g\u00f6ras, att mer borde automatiseras.<\/p>\n<p><\/p>\n<p>Och eftersom allt detta skedde p\u00e5 distans var de flesta kunder i molnet. Och redan mycket har uppenbarligen automatiserats. Det handlar jag mer om senare. Det vill s\u00e4ga, det resulterade i en id\u00e9 om att det borde finnas en upps\u00e4ttning verktyg, det vill s\u00e4ga en plattform som automatiserar praktiskt taget alla DBA-\u00e5tg\u00e4rder s\u00e5 att man kan hantera ett stort antal databaser.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/b02097f0bb23fa9d7c30e38ab9f3de7b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det kommer inte att finnas n\u00e5got i denna presentation:<\/p>\n<p><\/p>\n<ul>\n<li>\u00bbSilver bullets\u00ab och p\u00e5st\u00e5enden som \u2013 s\u00e4tt 8 GB eller 25 % shared_buffers och s\u00e5 kommer allt att vara bra. Det kommer inte att vara s\u00e5 mycket om shared_buffers. <\/li>\n<li>H\u00e5rdvarukomponenterna. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/ccea359ec78a967c150ddcedc3e50a88.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vad h\u00e4nder?<\/p>\n<p><\/p>\n<ul>\n<li>Det kommer att finnas optimeringsprinciper som vi till\u00e4mpar och utvecklar. Det kommer att finnas olika id\u00e9er som dyker upp p\u00e5 v\u00e5r v\u00e4g och olika verktyg som vi skapar, mestadels i Open Source, det vill s\u00e4ga v\u00e5r grund g\u00f6rs i Open Source. Dessutom har vi biljetter, all kommunikation sker praktiskt taget i Open Source. Du kan se vad vi g\u00f6r just nu, vad som kommer i n\u00e4sta release etc. <\/li>\n<li>Det kommer ocks\u00e5 att finnas en viss erfarenhet av att anv\u00e4nda dessa principer och verktyg i ett antal f\u00f6retag: fr\u00e5n sm\u00e5 startups till stora f\u00f6retag. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/86e6f379726dec814aca616a30d36a2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hur utvecklas allt detta?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c1422d9f2945e717c6ebb31f5fef6329.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00f6r det f\u00f6rsta, den fr\u00e4msta uppgiften f\u00f6r en DBA, f\u00f6rutom att s\u00e4kerst\u00e4lla skapandet av instanser, distribuera s\u00e4kerhetskopior etc., \u00e4r att hitta flaskhalsar och optimera prestanda.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/8e682ca8666e94d6688348ebe4540327.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I nul\u00e4get \u00e4r det organiserat p\u00e5 f\u00f6ljande s\u00e4tt. Vi tittar p\u00e5 \u00f6vervakningen, ser n\u00e5got, men vi saknar vissa detaljer. Vi b\u00f6rjar gr\u00e4va djupare, vanligtvis f\u00f6r hand, och f\u00f6rst\u00e5r vad vi ska g\u00f6ra med det, p\u00e5 ett eller annat s\u00e4tt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/04599422ea6b6d57c79a4e48ba2db8b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och det finns tv\u00e5 tillv\u00e4gag\u00e5ngss\u00e4tt. Pg_stat_statements \u2013 den standardl\u00f6sning som \u00e4r f\u00f6rval f\u00f6r att identifiera l\u00e5ngsamma fr\u00e5gor. Och analys av Postgres-loggar med hj\u00e4lp av pgBadger.<\/p>\n<p><\/p>\n<p>B\u00e5da tillv\u00e4gag\u00e5ngss\u00e4tten har allvarliga nackdelar. F\u00f6r den f\u00f6rsta metoden har vi sl\u00e4ppt alla parametrar. Och om vi ser grupper av SELECT * FROM table where kolumnen \u00e4r lika med tecknet \u00ab?\u00bb eller \u00ab$\u00bb fr\u00e5n och med version Postgres 10. Vi vet inte \u2013 det \u00e4r ett index-s\u00f6k eller ett sekventiellt s\u00f6k. Det beror mycket p\u00e5 parameterna. Om du s\u00e4tter in ett s\u00e4llan f\u00f6rekommande v\u00e4rde, kommer det att vara index-s\u00f6kning. Om du s\u00e4tter in ett v\u00e4rde som tar upp 90 % av tabellen, kommer det att vara sekventiell s\u00f6kning uppenbarligen, eftersom Postgres k\u00e4nner till statistiken. Och det \u00e4r en stor nackdel med pg_stat_statements, \u00e4ven om vissa arbeten p\u00e5g\u00e5r.<\/p>\n<p><\/p>\n<p>Den st\u00f6rsta nackdelen med logganalyser \u00e4r att du vanligtvis inte kan ha \u00bblog_min_duration_statement = 0\u00ab. Detta kommer vi ocks\u00e5 att diskutera. D\u00e4rf\u00f6r ser du inte hela bilden. Och en fr\u00e5ga som \u00e4r mycket snabb kan konsumera en enorm m\u00e4ngd resurser, men du kommer inte att se den, eftersom den ligger under din tr\u00f6skel.<\/p>\n<p><\/p>\n<p><strong>Hur l\u00f6ser DBA:er de problem som har uppt\u00e4ckts?<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/5e57fefdec6256f82045aaac037b516c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Till exempel, vi har st\u00f6tt p\u00e5 ett problem. Vad g\u00f6r man vanligtvis? Om du \u00e4r utvecklare kommer du att arbeta med en viss instans som kanske inte \u00e4r s\u00e5 stor. Om du \u00e4r DBA har du staging. Och det kan bara finnas en. Och den ligger sex m\u00e5nader efter. Och du t\u00e4nker att du ska g\u00e5 till produktion. Och \u00e4ven erfarna DBA:er kontrollerar sedan i produktion, p\u00e5 en replik. Och ibland skapar de ett tempor\u00e4rt index, ser till att det hj\u00e4lper, tar bort det och ger det till utvecklarna s\u00e5 att de kan l\u00e4gga det i migrationsfilerna. S\u00e5dana absurditeter h\u00e4nder just nu. Och det \u00e4r ett problem.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/402e80c7e5fbca6a054c0c9ec61e5fe3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Justera konfigurationer.<\/li>\n<li>Optimera upps\u00e4ttningen av index. <\/li>\n<li>\u00c4ndra sj\u00e4lva SQL-fr\u00e5gan (det h\u00e4r \u00e4r det sv\u00e5raste s\u00e4ttet).<\/li>\n<li>L\u00e4gga till resurser (det enklaste s\u00e4ttet i de flesta fall).<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/8a6b3cd56e0df5c7908714926ba1eb05.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det finns mycket att ta h\u00e4nsyn till h\u00e4r. Det finns m\u00e5nga funktioner i Postgres. Man beh\u00f6ver veta mycket. M\u00e5nga index i Postgres, delvis tack vare arrang\u00f6rerna av den h\u00e4r konferensen. Och allt detta m\u00e5ste man veta, och just detta ger f\u00f6r DBA:erna en k\u00e4nsla av att DBA-arbetet \u00e4r svart magi. Det vill s\u00e4ga, det kr\u00e4vs tio \u00e5r f\u00f6r att b\u00f6rja f\u00f6rst\u00e5 allt detta ordentligt.<\/p>\n<p><\/p>\n<p>Och jag \u00e4r en bek\u00e4mpare av denna svarta magi. Jag vill g\u00f6ra allt s\u00e5 att det finns teknik, snarare \u00e4n intuition i allt detta.<\/p>\n<p><\/p>\n<p><strong>Exempel fr\u00e5n livet<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/70b11c3df9c41c66570635d5f309ed24.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det h\u00e4r har jag observerat minst i tv\u00e5 projekt, inklusive mitt eget. Ett nytt blogginl\u00e4gg ber\u00e4ttar f\u00f6r oss att v\u00e4rdet 1 000 f\u00f6r default_statistic_target \u00e4r bra. Bra, l\u00e5t oss f\u00f6rs\u00f6ka i produktion.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/0b4c2bd6f73df06967c94d5d78b07279.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och h\u00e4r \u00e4r vi, som anv\u00e4nder v\u00e5rt verktyg tv\u00e5 \u00e5r senare med hj\u00e4lp av experiment \u00f6ver databaserna som vi pratar om idag, vi kan j\u00e4mf\u00f6ra vad som har varit och vad som har blivit. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/3564eade6532003d2279c2736ab6d733.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och f\u00f6r detta beh\u00f6ver vi skapa ett experiment. Det best\u00e5r av fyra delar. <\/p>\n<p><\/p>\n<ul>\n<li>Den f\u00f6rsta \u00e4r milj\u00f6n. Vi beh\u00f6ver h\u00e5rdvara. Och n\u00e4r jag kommer till ett f\u00f6retag och skriver kontrakt, d\u00e5 s\u00e4ger jag att jag vill ha samma h\u00e5rdvara som i produktion. F\u00f6r varje av dina m\u00e4stare beh\u00f6ver jag minst en s\u00e5dan h\u00e5rdvara. Antingen \u00e4r det en virtuell maskin i Amazon eller Google, eller s\u00e5 beh\u00f6ver jag exakt samma h\u00e5rdvara. Det vill s\u00e4ga, jag vill \u00e5terskapa milj\u00f6n. Och i begreppet milj\u00f6 inkluderar vi majorversionen av Postgres. <\/li>\n<li>Den andra delen \u00e4r objektet f\u00f6r v\u00e5ra unders\u00f6kningar. Det \u00e4r databasen. Den kan skapas p\u00e5 flera s\u00e4tt. Jag ska visa hur. <\/li>\n<li>Den tredje delen \u00e4r belastningen. Det h\u00e4r \u00e4r den sv\u00e5raste punkten. <\/li>\n<li>Och den fj\u00e4rde delen handlar om det vi kontrollerar, det vill s\u00e4ga vad vi ska j\u00e4mf\u00f6ra med. Anta att vi kan \u00e4ndra en eller flera parametrar i konfigurationen, eller s\u00e5 kan vi skapa en index och s\u00e5 vidare. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/8ccd09ac4cdd336618413375617c10a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi genomf\u00f6r ett experiment. H\u00e4r \u00e4r pg_stat_statements. Till v\u00e4nster \u2013 det som var. Till h\u00f6ger \u2013 det som blev.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/6f82d7e25a77b700f2ddb01f42a861a2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Till v\u00e4nster default_statistics_target = 100, till h\u00f6ger = 1 000. Vi ser att detta har hj\u00e4lpt oss. Totalt blev allt 8 % b\u00e4ttre.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/52dda8fb5fbcb9beecaa1eda8443a374.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Men om vi scrollar ner kommer vi att se grupper av f\u00f6rfr\u00e5gningar fr\u00e5n pgBadger eller fr\u00e5n pg_stat_statements. H\u00e4r finns tv\u00e5 alternativ. Vi kommer att se att n\u00e5gon f\u00f6rfr\u00e5gan har minskat med 88 %. Och h\u00e4r kommer det ingenj\u00f6rsm\u00e4ssiga tillv\u00e4gag\u00e5ngss\u00e4ttet. Vi kan gr\u00e4va djupare, f\u00f6r det \u00e4r intressant att f\u00f6rst\u00e5 varf\u00f6r den minskade. Vi m\u00e5ste f\u00f6rst\u00e5 vad som h\u00e4nde med statistiken. Varf\u00f6r fler buckets i statistiken leder till ett s\u00e4mre resultat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/4e6dfc04af4b3fc2b626dd46c08bdf66.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Eller s\u00e5 kan vi v\u00e4lja att inte gr\u00e4va djupare, utan g\u00f6ra \"ALTER TABLE \u2026 ALTER COLUMN\" och \u00e5terf\u00f6ra 100 buckets i statistiken f\u00f6r den h\u00e4r kolumnen. Och med ett experiment kan vi d\u00e5 bekr\u00e4fta att denna patch har hj\u00e4lpt. Det \u00e4r allt. Det h\u00e4r \u00e4r det ingenj\u00f6rsm\u00e4ssiga tillv\u00e4gag\u00e5ngss\u00e4ttet som hj\u00e4lper oss att se helhetsbilden och fatta beslut baserat p\u00e5 data, och inte p\u00e5 intuition.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c87df172b994a4523478beebaf4a0275.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/9e766aa4348bd1a77b697e3179d84bbd.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e5gra exempel fr\u00e5n andra omr\u00e5den. Inom tester finns det CI-tester som har funnits i m\u00e5nga \u00e5r. Och inget projekt i sitt r\u00e4tta sinne skulle \u00f6verleva utan automatiserade tester.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/b6c21981dc8b2b285973ae42199e2b4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Inom andra branscher: inom flygindustrin, inom bilindustrin, n\u00e4r vi testar aerodynamik har vi ocks\u00e5 m\u00f6jlighet att g\u00f6ra experiment. Vi kommer inte att skicka n\u00e5got fr\u00e5n ritningen till rymden direkt, och vi kommer inte att s\u00e4tta en bil direkt p\u00e5 v\u00e4gen. Till exempel, det finns en vindtunnel. <\/p>\n<p><\/p>\n<p>Fr\u00e5n observationer i andra branscher kan vi dra slutsatser. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/cef02ea9280e5795d1e593c600f0541b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00f6r det f\u00f6rsta har vi en speciell milj\u00f6. Den \u00e4r n\u00e4ra produktion, men \u00e4nd\u00e5 inte n\u00e4ra. Dess huvuddrag \u00e4r att det ska vara billigt, repetitivt och s\u00e5 automatiserat som m\u00f6jligt. Dessutom b\u00f6r det finnas speciella verktyg f\u00f6r att m\u00f6jligg\u00f6ra detaljerad analys.<\/p>\n<p><\/p>\n<p>Sannolikt har vi n\u00e4r planet \u00e4r i luften f\u00e4rre m\u00f6jligheter att studera varje millimeter av vingytan \u00e4n vad vi har i en vindtunnel. Vi har mer resurser f\u00f6r diagnos. Vi kan till\u00e5ta oss att h\u00e4nga p\u00e5 mer tung utrustning, som vi inte kan ha p\u00e5 en flygande maskin. P\u00e5 samma s\u00e4tt \u00e4r det med Postgres. I vissa fall kan vi aktivera fullst\u00e4ndig loggning av f\u00f6rfr\u00e5gningar under experiment. Och vi vill inte g\u00f6ra det i produktion. Kanske till och med med planerna kan vi aktivera det med hj\u00e4lp av auto_explain.<\/p>\n<p><\/p>\n<p>Och som jag redan n\u00e4mnt, en h\u00f6g automatiseringsniv\u00e5 inneb\u00e4r att vi trycker p\u00e5 knappen och upprepar. S\u00e5 h\u00e4r ska det vara f\u00f6r att genomf\u00f6ra m\u00e5nga experiment, f\u00f6r att det ska flyta.<\/p>\n<p><\/p>\n<p>Nancy CLI \u2013 grunden f\u00f6r en \"databaslaboratorium\"<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/f8303df21f309fb209929acec260b757.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och h\u00e4r har vi gjort en s\u00e5dan sak. Det vill s\u00e4ga, jag ber\u00e4ttade om dessa id\u00e9er i juni, f\u00f6r n\u00e4stan ett \u00e5r sedan. Och vi har redan i Open Source det som kallas Nancy CLI. Detta \u00e4r grunden f\u00f6r att bygga ett databaslaboratorium.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" 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> \u2013 Det \u00e4r i Open Source, p\u00e5 Gitlab. Du kan kolla, du kan prova. Jag har gett en l\u00e4nk i bildspelet. Du kan klicka p\u00e5 den och d\u00e4r kommer det att finnas <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/postgres-ai\/nancy\/-\/blob\/master\/help\/nancy_run.md\">help<\/a><\/noindex> f\u00f6r alla parametrar.<\/p>\n<p><\/p>\n<p>Sj\u00e4lvklart \u00e4r mycket fortfarande under utveckling. Det finns m\u00e5nga id\u00e9er. Men det h\u00e4r \u00e4r redan n\u00e5got vi till\u00e4mpar n\u00e4stan dagligen. Och n\u00e4r vi f\u00e5r en id\u00e9 \u2013 vad h\u00e4nder om vi tar bort 40 000 000 rader och allt k\u00f6r fast i IO, d\u00e5 kan vi genomf\u00f6ra ett experiment och titta n\u00e4rmare p\u00e5 vad som h\u00e4nder och sedan f\u00f6rs\u00f6ka \u00e5tg\u00e4rda det direkt. Det vill s\u00e4ga, vi g\u00f6r ett experiment. Till exempel justerar vi n\u00e5got och ser vad som sker. Och vi g\u00f6r det inte i produktion. Det \u00e4r k\u00e4rnan i id\u00e9n.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c22d332de4b45d604dfb9c5a95404fd6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Var kan detta fungera? Det kan fungera lokalt, det vill s\u00e4ga, det kan g\u00f6ras var som helst, till och med p\u00e5 en MacBook. Du beh\u00f6ver Docker, d\u00e5 k\u00f6r vi. Och det \u00e4r allt. Det kan k\u00f6ras p\u00e5 vilken maskin som helst, antingen p\u00e5 fysisk h\u00e5rdvara eller i en virtuell maskin, var som helst.<\/p>\n<p><\/p>\n<p>Det finns ocks\u00e5 m\u00f6jlighet att k\u00f6ra remote hos Amazon i EC2-instans, i spotar. Det \u00e4r en riktigt bra m\u00f6jlighet. Till exempel, ig\u00e5r genomf\u00f6rde vi mer \u00e4n 500 experiment p\u00e5 i3-instansen, fr\u00e5n den minsta upp till i3-16-xlarge. Och v\u00e5ra 500 experiment kostade 64 dollar. Varje varade i 15 minuter. Det vill s\u00e4ga, tack vare att de anv\u00e4nder spotar, \u00e4r det v\u00e4ldigt billigt \u2013 70 % rabatt, sekunderbetygning fr\u00e5n Amazon. Du kan g\u00f6ra v\u00e4ldigt mycket. Du kan genomf\u00f6ra verklig forskning.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/64c61cc9dd7181296b2ef5b815a17493.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tre huvudversioner av Postgres st\u00f6ds. Det \u00e4r inte s\u00e5 sv\u00e5rt att finjustera n\u00e5gra gamla och den nya version 12 ocks\u00e5.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/ee147c91014ab698cbd3c60e193bef23.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi kan ange objektet p\u00e5 tre s\u00e4tt. Det \u00e4r:<\/p>\n<p><\/p>\n<ul>\n<li>Dump\/sql-fil. <\/li>\n<li>Huvuds\u00e4ttet \u00e4r att klona PGDATA-katalogen. Normalvis tas den fr\u00e5n backupservern. Om du har normala bin\u00e4ra backuper kan du g\u00f6ra klon d\u00e4rifr\u00e5n. Om du har molntj\u00e4nster, s\u00e5 kommer molnleverant\u00f6rer som Amazon och Google att g\u00f6ra det \u00e5t dig. Det h\u00e4r \u00e4r det viktigaste s\u00e4ttet f\u00f6r kloning av verklig produktion. P\u00e5 det h\u00e4r s\u00e4ttet g\u00f6r vi faktiskt deployment. <\/li>\n<li>Och det sista s\u00e4ttet passar f\u00f6r forskning, n\u00e4r man vill f\u00f6rst\u00e5 hur n\u00e5got fungerar i Postgres. Det \u00e4r pgbench. Du kan generera med hj\u00e4lp av pgbench. Det \u00e4r bara en alternativ \u2019db-pgbench\u2019. Du anger skalan. Och allt kommer att genereras i molnet, som sagt.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/2bc3e30cb31a19f66c6b55480447126f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och belastningen:<\/p>\n<p><\/p>\n<ul>\n<li>Vi kan k\u00f6ra belastningen i en enskild SQL-tr\u00e5d. Det \u00e4r det mest primitiva s\u00e4ttet. <\/li>\n<li>Men vi kan emulera belastningen. Och vi kan emulera den p\u00e5 f\u00f6ljande s\u00e4tt. Vi beh\u00f6ver samla alla loggar. Och det \u00e4r sm\u00e4rtsamt. Jag ska visa varf\u00f6r. Och med hj\u00e4lp av pgreplay, som \u00e4r inbyggd i Nancy, spelar vi tillbaka. <\/li>\n<li>Eller ett annat alternativ. Den s\u00e5 kallade hantverksbelastningen, som vi g\u00f6r med viss insats. Genom att analysera v\u00e5r aktuella belastning p\u00e5 produktionssystemet, extraherar vi de mest popul\u00e4ra grupperna av f\u00f6rfr\u00e5gningar. Och med hj\u00e4lp av pgbench kan vi emulera denna belastning i laboratoriet. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/4adba12881faf9ad9d4f9e9f42c0f5c1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Eller s\u00e5 m\u00e5ste vi utf\u00f6ra n\u00e5gon SQL, det vill s\u00e4ga vi kontrollerar n\u00e5gon migrering, skapar d\u00e4r ett index, utf\u00f6r ANALAZE. Och vi ser vad som var innan vakuum och efter vakuum. I allm\u00e4nhet, vilken SQL som helst.<\/li>\n<li>Antingen \u00e4ndrar vi en eller flera parametrar i konfigurationen. Vi kan beg\u00e4ra att man kontrollerar, till exempel, 100 v\u00e4rden i Amazon f\u00f6r v\u00e5r terabyte-databas. Och efter n\u00e5gra timmar kommer du att f\u00e5 resultatet. Vanligtvis tar det flera timmar att rulla ut en terabyte-databas. Men i utvecklingen finns det en patch, vi kan g\u00f6ra en serie, det vill s\u00e4ga, du kan anv\u00e4nda samma pgdata sekventiellt p\u00e5 samma server och kontrollera. Postgres kommer att starta om, cacheminnen kommer att \u00e5terst\u00e4llas. Och du kan k\u00f6ra belastning. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/02985b47bf0ab62e8f1c4cc3ea003f26.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>En katalog anl\u00e4nder, d\u00e4r det finns en massa olika filer, fr\u00e5n snapshots av pg.<em>stat<\/em>***. Och det mest intressanta d\u00e4r \u00e4r pg_stat_statements, pg_stat_kcache. Det h\u00e4r \u00e4r tv\u00e5 till\u00e4gg som analyserar fr\u00e5gor. Och pg_stat_bgwriter inneh\u00e5ller inte bara statistik f\u00f6r pgwriter, utan ocks\u00e5 om checkpoint och hur backendarna sj\u00e4lva skuffar ut smutsiga buffrar. Och allt detta \u00e4r intressant att titta p\u00e5. Till exempel, n\u00e4r vi konfigurerar shared_buffers, \u00e4r det mycket intressant att se hur m\u00e5nga som har skuffat ut.<\/li>\n<li>Postgres-loggar kommer ocks\u00e5 in. Tv\u00e5 loggar \u2013 f\u00f6rberedelseslogg och belastningsspelningslogg. <\/li>\n<li>Relativt ny funktion \u00e4r FlameGraphs.<\/li>\n<li>Om du ocks\u00e5 har anv\u00e4nt pgreplay eller pgbench f\u00f6r att spela in belastning, kommer deras ursprungliga utdata att finnas. Och du kommer att se latens och TPS. Du kan f\u00f6rst\u00e5 hur de uppfattade det. <\/li>\n<li>Systeminformation. <\/li>\n<li>Grundl\u00e4ggande kontroller av CPU och IO. Det h\u00e4r \u00e4r mer f\u00f6r EC2-instanser i Amazon, n\u00e4r du vill k\u00f6ra 100 identiska instanser i fl\u00f6det och k\u00f6ra 100 olika k\u00f6rningar d\u00e4r, s\u00e5 kommer du att ha 10 000 experiment. Och du m\u00e5ste se till att du inte f\u00e5r en defekt instans som n\u00e5gon annan redan pressar. P\u00e5 denna h\u00e5rdvara aktiverar andra och du f\u00e5r lite resurser kvar. S\u00e5dana resultat \u00e4r b\u00e4ttre att sl\u00e4ppa. Och just med hj\u00e4lp av sysbench fr\u00e5n Alexey Kopytov g\u00f6r vi n\u00e5gra korta kontroller, som kommer att komma och kan j\u00e4mf\u00f6ras med andra, det vill s\u00e4ga, du kommer att f\u00f6rst\u00e5 hur CPU beter sig och hur IO beter sig. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c4ddf5283c3c79e3d4c2c061e7dd9e7d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vilka tekniska sv\u00e5righeter finns p\u00e5 exempel fr\u00e5n olika f\u00f6retag?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/959690b464a01a4a3cb67ec497becff1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Anta att vi vill \u00e5terge en verklig belastning med hj\u00e4lp av loggar. Utm\u00e4rkt id\u00e9, om det \u00e4r byggt p\u00e5 Open Source pgreplay. Vi anv\u00e4nder det. Men f\u00f6r att det ska fungera bra m\u00e5ste du aktivera fullst\u00e4ndig loggning av fr\u00e5gor med parametrar och timing.<\/p>\n<p><\/p>\n<p>Det finns vissa sv\u00e5righeter med duration och timestamp. Vi kommer att hoppa \u00f6ver hela den biten. Huvudfr\u00e5gan \u00e4r \u2013 har ni r\u00e5d med detta eller inte? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" 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>Problemet \u00e4r att detta kan vara otillg\u00e4ngligt. Ni m\u00e5ste f\u00f6rst f\u00f6rst\u00e5 vilken typ av fl\u00f6de som kommer att loggas. Om ni har pg_stat_statements kan ni med denna fr\u00e5ga (l\u00e4nken kommer att finnas tillg\u00e4nglig i presentationen) f\u00f6rst\u00e5 ungef\u00e4r hur m\u00e5nga byte som kommer att skrivas per sekund.<\/p>\n<p><\/p>\n<p>Vi ser p\u00e5 l\u00e4ngden p\u00e5 fr\u00e5gan. Vi bortser fr\u00e5n faktumet att det inte finns n\u00e5gra parametrar, men vi k\u00e4nner till l\u00e4ngden p\u00e5 fr\u00e5gan och vet hur m\u00e5nga g\u00e5nger per sekund den har k\u00f6rts. D\u00e4rf\u00f6r kan vi uppskatta hur m\u00e5nga byte per sekund som skrivs. Vi kan g\u00f6ra ett fel p\u00e5 tv\u00e5 g\u00e5nger, men ordningen kommer vi att f\u00f6rst\u00e5 p\u00e5 det h\u00e4r s\u00e4ttet.<\/p>\n<p><\/p>\n<p>Vi kan se att denna fr\u00e5ga k\u00f6rs 802 g\u00e5nger per sekund. Och vi ser att bytes_per_sec \u2013 300 kB\/s kommer att skrivas plus minus. Och i allm\u00e4nhet kan vi ha ett s\u00e5dant fl\u00f6de. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/218f905073a8519115adf5c65825b74d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Men! Saken \u00e4r att det finns olika loggning systemen. Och som standard har folk vanligtvis \"syslog\".<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/66054682083ba2ada174afb5e7ee3973.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och om ni har syslog, s\u00e5 kan ni f\u00e5 en bild som denna. Vi kommer att ta pgbench, aktivera fr\u00e5gelogging och se vad som h\u00e4nder.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/a05723dcf10a7733f054ba108bb0f107.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Utan loggning \u2013 det \u00e4r kolumnen till v\u00e4nster. Vi uppn\u00e5dde 161 000 TPS. Med syslog \u2013 i Ubuntu 16.04 p\u00e5 Amazon f\u00e5r vi 37 000 TPS. Och om vi byter till tv\u00e5 andra loggmetoder, s\u00e5 blir situationen mycket b\u00e4ttre. Det vill s\u00e4ga, vi f\u00f6rv\u00e4ntade oss att det skulle sjunka, men inte s\u00e5 mycket.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/a7d90af9d29761d3b80eb09bf050760f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och p\u00e5 CentOS 7, d\u00e4r journald ocks\u00e5 ing\u00e5r, vilket omvandlar loggar till bin\u00e4rt format f\u00f6r enkel s\u00f6kning och s\u00e5 vidare, \u00e4r det en mardr\u00f6m, vi sjunker med 44 g\u00e5nger i TPS.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/86d2af18a0e6364f297a62378b6ede56.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och det h\u00e4r \u00e4r n\u00e5got som folk lever med. Och ofta i f\u00f6retag, s\u00e4rskilt stora, \u00e4r det mycket sv\u00e5rt att \u00e4ndra. Om ni kan l\u00e4mna syslog, g\u00f6r det g\u00e4rna.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/a167a6fac7f28c7541515f7eff30bdb4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Utv\u00e4rdera IOPS och skrivfl\u00f6det. <\/li>\n<li>Kontrollera ert logsystem. <\/li>\n<li>Om den f\u00f6rv\u00e4ntade belastningen \u00e4r f\u00f6r h\u00f6g, \u00f6verv\u00e4g att anv\u00e4nda sampling. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/127fa1296578ba0ba6eac2b44c5c5398.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi har pg_stat_statements. Som jag sa, det m\u00e5ste finnas. Och vi kan ta och beskriva varje fr\u00e5ga grupp p\u00e5 ett specialiserat s\u00e4tt i en fil. Och sedan kan vi anv\u00e4nda en mycket bekv\u00e4m funktion i pgbench \u2013 att l\u00e4gga till flera filer med hj\u00e4lp av alternativet \"-f\".<\/p>\n<p><\/p>\n<p>Han f\u00f6rst\u00e5r mycket av \u00ab-f\u00bb. Och man kan s\u00e4ga med hj\u00e4lp av \u00ab@\u00bb i slutet, vilken andel varje fil ska ha. Det vill s\u00e4ga, vi kan s\u00e4ga att den h\u00e4r ska k\u00f6ras i 10 % av fallen, och den h\u00e4r i 20 %. Och det kommer att f\u00f6ra oss n\u00e4rmare det vi ser p\u00e5 produktion.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/b91d18a9861abdc36bfda54cd72a142f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Men hur ska vi f\u00f6rst\u00e5 vad vi har p\u00e5 produktion? Vilken andel och vad? H\u00e4r finns det en liten avvikelse. Vi har ytterligare en produkt. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/postgres-ai\/postgres-checkup\">postgres-checkup<\/a><\/noindex>. \u00c4ven en bas i Open Source. Och vi utvecklar aktivt den just nu.<\/p>\n<p><\/p>\n<p>Den f\u00f6ddes av lite andra sk\u00e4l. P\u00e5 grund av att \u00f6vervakning \u00e4r otillr\u00e4cklig. Det vill s\u00e4ga, du kommer, ser p\u00e5 basen, ser p\u00e5 de problem som finns. Och i regel g\u00f6r du health_check. Om du \u00e4r en erfaren DBA, g\u00f6r du health_check. Du kollar anv\u00e4ndningen av index etc. Om du har OKmeter, s\u00e5 \u00e4r det utm\u00e4rkt. Det \u00e4r en fantastisk \u00f6vervakning f\u00f6r Postgres. OKmeter.io \u2013 v\u00e4nligen installera det, allt \u00e4r v\u00e4ldigt bra gjort d\u00e4r. Det \u00e4r betalt.<\/p>\n<p><\/p>\n<p>Om du inte har det, s\u00e5 har du vanligtvis v\u00e4ldigt lite. I \u00f6vervakning finns det vanligtvis CPU, IO, och det med f\u00f6rbeh\u00e5ll, och allt. Men vi beh\u00f6ver mer. Vi m\u00e5ste se hur autovakuum fungerar, hur checkpoint fungerar, i io beh\u00f6ver vi separera checkpoint fr\u00e5n bgwriter och fr\u00e5n backend etc.<\/p>\n<p><\/p>\n<p>Problemet \u00e4r att n\u00e4r du hj\u00e4lper ett stort f\u00f6retag kan de inte snabbt implementera n\u00e5got. De kan inte snabbt k\u00f6pa OKmeter. Kanske kommer de att k\u00f6pa det om sex m\u00e5nader. De kan inte snabbt installera vissa paket. <\/p>\n<p><\/p>\n<p>Och vi fick id\u00e9n att vi beh\u00f6vde ett speciellt verktyg som inte kr\u00e4ver n\u00e5got installation, det vill s\u00e4ga du ska verkligen inte installera n\u00e5got p\u00e5 produktion. Du installerar det p\u00e5 din laptop, eller p\u00e5 en observerande server d\u00e4rifr\u00e5n du kommer att k\u00f6ra. Och det kommer att analysera mycket: b\u00e5de operativsystemet, filsystemet, och sj\u00e4lva Postgres, genom att g\u00f6ra l\u00e4tta f\u00f6rfr\u00e5gningar som kan k\u00f6ras direkt p\u00e5 produktion utan att n\u00e5got kraschar.<\/p>\n<p><\/p>\n<p>Vi kallade det Postgres-checkup. Om vi tar det medicinskt, s\u00e5 \u00e4r det en regelbunden h\u00e4lsokontroll. Om vi pratar om bilar, s\u00e5 \u00e4r det som ett serviceefterseende. Du g\u00f6r service p\u00e5 din bil var sj\u00e4tte m\u00e5nad eller varje \u00e5r, beroende p\u00e5 m\u00e4rke. G\u00f6r du service p\u00e5 din databas? Det vill s\u00e4ga, g\u00f6r du en djupg\u00e5ende unders\u00f6kning regelbundet? Det m\u00e5ste g\u00f6ras. Om du g\u00f6r s\u00e4kerhetskopior, s\u00e5 genomf\u00f6r \u00e4ven checkup, det \u00e4r inte mindre viktigt.<\/p>\n<p><\/p>\n<p>Och vi har ett s\u00e5dant verktyg. Det b\u00f6rjade aktivt utvecklas f\u00f6r bara tre m\u00e5nader sedan. Det \u00e4r fortfarande ungt, men det finns mycket d\u00e4r.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/514d00b5cb710a7997af0a5dde55b5a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi samlar de mest \"inflytelserika\" grupperna av f\u00f6rfr\u00e5gningar \u2013 rapport K003 i Postgres-checkup<\/p>\n<p><\/p>\n<p>Och d\u00e4r finns en grupp av rapporter K. Tre rapporter hittills. Och det finns en s\u00e5dan rapport K003. D\u00e4r finns toppen fr\u00e5n pg_stat_statements, sorterad efter total_time.<\/p>\n<p><\/p>\n<p>N\u00e4r vi sorterar grupper av f\u00f6rfr\u00e5gningar efter total_time ser vi en s\u00e5dan grupp som belastar v\u00e5rt system mest, det vill s\u00e4ga konsumerar den st\u00f6rsta m\u00e4ngden resurser. Varf\u00f6r kallar jag dem f\u00f6r grupper av f\u00f6rfr\u00e5gningar? Eftersom vi har tagit bort parametrarna. Det \u00e4r inte l\u00e4ngre enskilda f\u00f6rfr\u00e5gningar utan grupper av f\u00f6rfr\u00e5gningar, det vill s\u00e4ga de \u00e4r abstrakterade.<\/p>\n<p><\/p>\n<p>Och om vi optimerar uppifr\u00e5n och ner kommer vi att l\u00e4tta p\u00e5 v\u00e5ra resurser och skjuta upp den tidpunkt d\u00e5 vi beh\u00f6ver g\u00f6ra en uppgradering. Detta \u00e4r en mycket bra metod f\u00f6r att spara pengar.<\/p>\n<p><\/p>\n<p>Kanske \u00e4r detta inte ett s\u00e4rskilt bra s\u00e4tt att ta hand om anv\u00e4ndarna, eftersom vi kanske inte ser s\u00e4llsynta, men mycket frustrerande fall d\u00e4r n\u00e5gon v\u00e4ntar i 15 sekunder. Sammanlagt \u00e4r de s\u00e5 s\u00e4llsynta att vi inte ser dem, men ist\u00e4llet arbetar vi med resurserna.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/d16abc423573e4d923b0c03683c2efee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vad h\u00e4nde i den h\u00e4r tabellen? Vi gjorde tv\u00e5 snapshots. Postgres_checkup kommer att ge dig skillnaden f\u00f6r varje m\u00e4tv\u00e4rde: total_time, calls, rows, shared_blks_read, etc. Allt, skillnaden ber\u00e4knad. Det stora problemet med pg_stat_statements \u00e4r att den inte kommer ih\u00e5g n\u00e4r den \u00e5terst\u00e4lldes. Om pg_stat_database kommer ih\u00e5g, s\u00e5 minns inte pg_stat_statements. Du ser att d\u00e4r \u00e4r 1 000 000 som ett nummer, men vi vet inte varifr\u00e5n vi har r\u00e4knat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c370bf1237675e03c0a3d362c025ac24.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>H\u00e4r vet vi, h\u00e4r har vi tv\u00e5 snapshots. Vi vet att skillnaden i det h\u00e4r fallet var 56 sekunder. En mycket liten tid. Sorterad efter total_time. Och d\u00e4rifr\u00e5n kan vi differentiera, det vill s\u00e4ga vi delar alla m\u00e4tv\u00e4rden med duration. Om vi delar varje m\u00e4tv\u00e4rde med duration kommer vi att f\u00e5 antalet anrop per sekund.<\/p>\n<p><\/p>\n<p>D\u00e4refter total_time per second \u2013 detta \u00e4r mitt favoritm\u00e5tt. Det m\u00e4ts i sekunder, per sekund, det vill s\u00e4ga hur m\u00e5nga sekunder v\u00e5rat system tog f\u00f6r att utf\u00f6ra denna grupp av f\u00f6rfr\u00e5gningar per sekund. Om du ser d\u00e4r mer \u00e4n en sekund per sekund, betyder det att du beh\u00f6vde ge mer \u00e4n en k\u00e4rna. Detta \u00e4r ett mycket bra m\u00e5tt. Du kan f\u00f6rst\u00e5 att den h\u00e4r personen, till exempel, beh\u00f6ver minst tre k\u00e4rnor.<\/p>\n<p><\/p>\n<p>Detta \u00e4r v\u00e5r innovation, jag har aldrig sett n\u00e5got liknande. Observera \u2013 det \u00e4r en mycket enkel sak \u2013 sekund f\u00f6r sekund. Ibland, n\u00e4r din CPU \u00e4r 100 %, s\u00e5 handlar det om en halv timme per sekund, det vill s\u00e4ga du har sysslat med dessa f\u00f6rfr\u00e5gningar i en halv timme. <\/p>\n<p><\/p>\n<p>D\u00e4refter ser vi rader per sekund. Vi vet hur m\u00e5nga rader per sekund som returnerades.<\/p>\n<p><\/p>\n<p>Och vidare finns det ocks\u00e5 intressanta saker. Hur mycket vi l\u00e4ste fr\u00e5n shared_buffers per sekund. Tr\u00e4ffarna var redan d\u00e4r, och raderna h\u00e4mtade vi fr\u00e5n operativsystemets cache eller fr\u00e5n disken. Det f\u00f6rsta alternativet \u00e4r snabbt, och det andra kan vara snabbt, men kanske inte, det beror p\u00e5 situationen. <\/p>\n<p><\/p>\n<p>Och det andra s\u00e4ttet att differentiera \u00e4r att vi delar antalet f\u00f6rfr\u00e5gningar i denna grupp. I den andra kolumnen har ni alltid en f\u00f6rfr\u00e5gan delad p\u00e5 en f\u00f6rfr\u00e5gan. Och vidare \u00e4r det intressant \u2013 hur m\u00e5nga millisekunder det tog i denna f\u00f6rfr\u00e5gan. Vi vet hur genomsnittet f\u00f6r denna f\u00f6rfr\u00e5gan ser ut. 101 millisekunder kr\u00e4vdes per f\u00f6rfr\u00e5gan. Detta \u00e4r en traditionell metrisk som vi beh\u00f6ver f\u00f6r f\u00f6rst\u00e5elsen.<\/p>\n<p><\/p>\n<p>Hur m\u00e5nga rader varje f\u00f6rfr\u00e5gan returnerade i genomsnitt. Vi ser att denna grupp returnerar 8. Hur mycket i genomsnitt som togs och l\u00e4stes fr\u00e5n cachen. Vi ser att allt \u00e4r verkligen cachat. Totalt fler tr\u00e4ffar f\u00f6r den f\u00f6rsta gruppen. <\/p>\n<p><\/p>\n<p>Och den fj\u00e4rde understr\u00e4ngen i varje rad \u2013 det \u00e4r hur m\u00e5nga procent av det totala antalet. Vi har calls. L\u00e5t oss s\u00e4ga, 1 000 000. Och vi kan f\u00f6rst\u00e5 hur stort bidraget fr\u00e5n denna grupp \u00e4r. Vi ser att i detta fall ger den f\u00f6rsta gruppen ett bidrag mindre \u00e4n 0,01%. Det vill s\u00e4ga, den \u00e4r s\u00e5 l\u00e5ngsam att vi inte ser den i den \u00f6vergripande bilden. Den andra gruppen \u2013 5 % av f\u00f6rfr\u00e5gningarna. Det vill s\u00e4ga 5 % av alla f\u00f6rfr\u00e5gningar \u00e4r fr\u00e5n den andra gruppen. <\/p>\n<p><\/p>\n<p>Det \u00e4r ocks\u00e5 intressant med total_time. Vi har lagt 14 % av den totala arbetstiden p\u00e5 den f\u00f6rsta gruppen av f\u00f6rfr\u00e5gningar. Och 11 % p\u00e5 den andra, och s\u00e5 vidare. <\/p>\n<p><\/p>\n<p>Jag kommer inte att g\u00e5 in p\u00e5 detaljer, men det finns nyanser. Vi visar ett fel h\u00f6gst upp eftersom, n\u00e4r vi j\u00e4mf\u00f6r, kan snapshoten f\u00f6rlora relevans, det vill s\u00e4ga vissa f\u00f6rfr\u00e5gningar kan falla bort och i det andra finns de kanske inte, vissa kan dyka upp nya. Och vi ber\u00e4knar felet d\u00e4r. Om du ser 0, s\u00e5 \u00e4r det bra. Det betyder att det inte finns n\u00e5gra fel. Om felprocenten ligger p\u00e5 upp till 20 %, s\u00e5 \u00e4r det OK. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/327bbf167bc21d37a3e1597b52528e6d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>D\u00e4refter \u00e5terv\u00e4nder vi till v\u00e5rt \u00e4mne. Vi m\u00e5ste skapa en arbetsbelastning. Vi g\u00e5r nerifr\u00e5n och upp\u00e5t tills vi n\u00e5r 80 % eller 90 %. Vanligtvis handlar det om 10-20 grupper. Och vi g\u00f6r filer f\u00f6r pgbench. D\u00e4r anv\u00e4nder vi random. Ibland fungerar det tyv\u00e4rr inte. Och i Postgres 12 kommer det att finnas fler m\u00f6jligheter att anv\u00e4nda denna metod. <\/p>\n<p><\/p>\n<p>Och s\u00e5 samlar vi p\u00e5 det h\u00e4r s\u00e4ttet 80-90 % av total tid. Vad ska vi s\u00e4tta efter \"@\"? Vi tittar p\u00e5 samtal, ser hur m\u00e5nga procent och f\u00f6rst\u00e5r att vi h\u00e4r b\u00f6r ha s\u00e5 h\u00e4r m\u00e5nga procent. Utifr\u00e5n dessa procent kan vi f\u00f6rst\u00e5 hur vi ska balansera varje fil. Efter det anv\u00e4nder vi pgbench och s\u00e5 k\u00f6r vi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/53edf787f49dcabb5e4731510839332d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi har ocks\u00e5 K001 och K002. <\/p>\n<p><\/p>\n<p>K001 \u2013 det \u00e4r en stor str\u00e4ng med fyra delstr\u00e4ngar. Det \u00e4r en egenskap av hela v\u00e5r belastning. Titta p\u00e5 den andra kolumnen och den andra delstr\u00e4ngen. Vi ser att det \u00e4r ungef\u00e4r 1,5 sekunder per sekund, det vill s\u00e4ga om vi har tv\u00e5 k\u00e4rnor s\u00e5 blir det bra. Det blir ungef\u00e4r 75 % belastning. Och s\u00e5 h\u00e4r fungerar det. Om vi har 10 k\u00e4rnor s\u00e5 kan vi vara lugna. P\u00e5 det s\u00e4ttet kan vi uppskatta resurser.<\/p>\n<p><\/p>\n<p>K002 \u2013 det kallar jag f\u00f6r beg\u00e4ranklasser, det vill s\u00e4ga SELECT, INSERT, UPDATE, DELETE. Och s\u00e4rskilt SELECT FOR UPDATE, f\u00f6r den l\u00e5ser. <\/p>\n<p><\/p>\n<p>Och h\u00e4r kan vi dra slutsatsen att vanliga l\u00e4sande SELECT \u00e4r 82 % av alla anrop, men samtidigt 74 % av total tid. Det betyder att de anropas mycket, men anv\u00e4nder mindre resurser. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/0e0234e696ffe1c80f8b5acccc602dbd.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och vi \u00e5terkommer till fr\u00e5gan: \"Hur ska vi korrekt v\u00e4lja shared_buffers?\". Jag observerar att de flesta benchmarkar bygger p\u00e5 id\u00e9n \u2013 l\u00e5t oss se vilken throughput som kommer att vara, det vill s\u00e4ga vilket genomfl\u00f6de som kommer att m\u00e4tas. Det m\u00e4ts vanligtvis i TPS eller QPS.<\/p>\n<p><\/p>\n<p>Och vi f\u00f6rs\u00f6ker pressa ut s\u00e5 m\u00e5nga transaktioner per sekund fr\u00e5n maskinen som m\u00f6jligt med hj\u00e4lp av justeringsparametrar. H\u00e4r \u00e4r det just 311 per sekund f\u00f6r select.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/d5e73f2672d94bb92eed921ef3dfe0b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Men ingen k\u00f6r till jobbet och tillbaka hem i bilen p\u00e5 full fart. Det \u00e4r dumt. S\u00e5 \u00e4r det med databaser. Vi b\u00f6r inte k\u00f6ra p\u00e5 full fart, nej, ingen g\u00f6r det. Ingen lever i produktion med 100 % CPU. \u00c4ven om n\u00e5gon kanske g\u00f6r det, \u00e4r det inte bra. <\/p>\n<p><\/p>\n<p>Id\u00e9n \u00e4r att vi vanligtvis k\u00f6r p\u00e5 cirka 20 % av kapaciteten, helst inte \u00f6ver 50 %. Och vi f\u00f6rs\u00f6ker optimera svarstiden f\u00f6r v\u00e5ra anv\u00e4ndare fr\u00e4mst. Det vill s\u00e4ga vi b\u00f6r justera v\u00e5ra parametrar s\u00e5 att latensen \u00e4r minimal vid 20%-ig hastighet, i princip. Det \u00e4r den id\u00e9n vi ocks\u00e5 f\u00f6rs\u00f6ker anv\u00e4nda i v\u00e5ra experiment.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c32c2cfb76dce0ce6b50e929bbf914ac.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och till sist rekommendationer: <\/p>\n<p><\/p>\n<ul>\n<li>Se till att ni g\u00f6r en Database Lab.<\/li>\n<li>I den m\u00e5n det \u00e4r m\u00f6jligt, g\u00f6r det on demand s\u00e5 att det s\u00e4tts upp under en tid \u2013 lek med det och ta bort det. Om ni har moln, \u00e4r det sj\u00e4lvklart, det vill s\u00e4ga ha flera standing. <\/li>\n<li>Var nyfiken. Om n\u00e5got inte fungerar som det ska, testa med experiment f\u00f6r att se hur det beter sig. Nancy kan anv\u00e4ndas f\u00f6r att utbilda dig sj\u00e4lv, f\u00f6r att kontrollera hur databasen fungerar.<\/li>\n<li>Och sikta p\u00e5 minimala svarstider. <\/li>\n<li>Och var inte r\u00e4dd f\u00f6r Postgres-k\u00e4llkoden. N\u00e4r du arbetar med k\u00e4llkoden m\u00e5ste du kunna engelska. D\u00e4r finns massor av kommentarer, allt \u00e4r f\u00f6rklarat. <\/li>\n<li>Och kontrollera databasens h\u00e4lsa regelbundet, \u00e5tminstone en g\u00e5ng var tredje m\u00e5nad, antingen manuellt eller med Postgres-checkup. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/8d2ac05f44bd245b879799862ce9e233.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fr\u00e5gor<\/p>\n<p><\/p>\n<p><em>Tack s\u00e5 mycket! V\u00e4ldigt intressant grej.<\/em> <\/p>\n<p><\/p>\n<p>Tv\u00e5 saker.<\/p>\n<p><\/p>\n<p><em>Ja, tv\u00e5 saker. Men jag f\u00f6rstod inte riktigt. N\u00e4r vi arbetar med Nancy, kan vi bara justera en parameter eller en hel grupp?<\/em><\/p>\n<p><\/p>\n<p>Vi har en delta-konfigurationsparameter. Du kan justera hur mycket som helst p\u00e5 en g\u00e5ng. Men du m\u00e5ste f\u00f6rst\u00e5 att n\u00e4r du \u00e4ndrar f\u00f6r mycket kan du dra felaktiga slutsatser. <\/p>\n<p><\/p>\n<p><em>Ja. Varf\u00f6r fr\u00e5gade jag? F\u00f6r det \u00e4r sv\u00e5rt att genomf\u00f6ra experiment n\u00e4r du bara har en parameter. Du justerar den, ser hur det fungerar. St\u00e4ller in den. Sedan b\u00f6rjar du med n\u00e4sta.<\/em><\/p>\n<p><\/p>\n<p>Det g\u00e5r att justera flera samtidigt, men det beror p\u00e5 situationen s\u00e5klart. Men det \u00e4r b\u00e4ttre att testa en id\u00e9 i taget. Vi hade en id\u00e9 ig\u00e5r. Vi hade en v\u00e4ldigt lik situation. Det fanns tv\u00e5 konfigurationer. Och vi kunde inte f\u00f6rst\u00e5 varf\u00f6r det var s\u00e5 stor skillnad. Och id\u00e9n kom upp att vi skulle anv\u00e4nda dikotomi f\u00f6r att successivt f\u00f6rst\u00e5 och hitta skillnaden. Vi kan g\u00f6ra h\u00e4lften av parametrarna lika, sedan en fj\u00e4rdedel, och s\u00e5 vidare. Allt \u00e4r flexibelt.<\/p>\n<p><\/p>\n<p><em>Och s\u00e5 har jag en fr\u00e5ga. Projektet \u00e4r ungt och utvecklas. Finns det redan dokumentation, med en detaljerad beskrivning?<\/em><\/p>\n<p><\/p>\n<p>Jag har faktiskt gjort en l\u00e4nk till beskrivningen av parametrarna. Det finns. Men det finns fortfarande mycket som saknas. Jag s\u00f6ker efter likasinnade. Och jag hittar dem n\u00e4r jag talar. Det \u00e4r v\u00e4ldigt coolt. N\u00e5gon arbetar redan med mig, n\u00e5gon hj\u00e4lpte till med n\u00e5got. Och om du \u00e4r intresserad av det h\u00e4r \u00e4mnet, ge mig g\u00e4rna feedback \u2013 vad som saknas. <\/p>\n<p><\/p>\n<p><em>N\u00e4r vi g\u00f6r laboratoriet kanske det kommer att finnas feedback. Vi f\u00e5r se. Tack!<\/em><\/p>\n<p><\/p>\n<p><em>Hej! Tack f\u00f6r presentationen! Jag s\u00e5g att det finns support f\u00f6r Amazon. Planeras det st\u00f6d f\u00f6r GSP?<\/em><\/p>\n<p><\/p>\n<p>Bra fr\u00e5ga. Vi har b\u00f6rjat arbeta med det. Just nu har vi pausat eftersom vi vill spara. Det finns st\u00f6d f\u00f6r att k\u00f6ra p\u00e5 localhost. Du kan sj\u00e4lv skapa en instans och arbeta lokalt. F\u00f6rresten, s\u00e5 g\u00f6r vi. I Getlab g\u00f6r jag s\u00e5; d\u00e4r \u00e4r det p\u00e5 GSP. Men att g\u00f6ra en s\u00e5dan orkestrering ser vi just nu ingen mening med, eftersom Google inte har n\u00e5gra billiga spottar. Det finns ??? instanser, men de har begr\u00e4nsningar. F\u00f6r det f\u00f6rsta finns det alltid bara en rabatt p\u00e5 70 % och du kan inte leka med priserna. F\u00f6r spottar h\u00f6jer vi priset med 5-10 % f\u00f6r att minska risken f\u00f6r att du f\u00e5r sparken. Det betyder att du sparar p\u00e5 spottarna, men de kan tas tillbaka n\u00e4r som helst. Om du g\u00f6r ditt pris n\u00e5got h\u00f6gre \u00e4n andra, kommer du att bli d\u00f6dad senare. Google har helt en annan specifikation. Och det finns ocks\u00e5 en v\u00e4ldigt d\u00e5lig begr\u00e4nsning \u2013 de lever bara i 24 timmar. Ibland vill vi k\u00f6ra ett experiment i 5 dagar. Men det kan g\u00f6ras med spottar, spottar kan ibland leva i m\u00e5nader. <\/p>\n<p><\/p>\n<p><em>Hej! Tack f\u00f6r presentationen! Du n\u00e4mnde checkup. Hur ber\u00e4knar ni fel i stat_statements?<\/em><\/p>\n<p><\/p>\n<p>Mycket bra fr\u00e5ga. Jag kan visa och ber\u00e4tta i detalj. Kort sagt \u2013 vi tittar p\u00e5 hur grupper av f\u00f6rfr\u00e5gningar har fluktuerat: hur m\u00e5nga som har f\u00f6rsvunnit och hur m\u00e5nga nya som har dykt upp. Sedan ser vi p\u00e5 tv\u00e5 m\u00e5tt: total_time och calls, d\u00e4rf\u00f6r finns det tv\u00e5 fel. Och vi tittar p\u00e5 vilken inverkan de fluktuerande grupperna har. Det finns tv\u00e5 undergrupper: de som har f\u00f6rsvunnit och de som har kommit tillbaka. Vi ser vilken inverkan de har p\u00e5 den totala bilden. <\/p>\n<p><\/p>\n<p><em>\u00c4r ni inte r\u00e4dda att den kommer att snurra tv\u00e5-tre g\u00e5nger mellan snapshots?<\/em><\/p>\n<p><\/p>\n<p>D.v.s. har de registrerat sig p\u00e5 nytt eller hur?<\/p>\n<p><\/p>\n<p><em>Till exempel, denna f\u00f6rfr\u00e5gan har redan blivit borttr\u00e4ngd en g\u00e5ng, sedan kom den tillbaka och blev \u00e5terigen borttr\u00e4ngd, och \u00e5terigen kom den tillbaka och blev \u00e4nnu en g\u00e5ng borttr\u00e4ngd. Och ni har r\u00e4knat n\u00e5got, och var \u00e4r allt detta?<\/em><\/p>\n<p><\/p>\n<p>Bra fr\u00e5ga, vi m\u00e5ste titta p\u00e5 det. <\/p>\n<p><\/p>\n<p><em>Jag gjorde n\u00e5got liknande. Sj\u00e4lvklart enklare, jag gjorde det ensam. Men jag var tvungen att \u00e5terst\u00e4lla, g\u00f6ra en reset av stat_statements och orientera mig vid tidpunkten f\u00f6r snapshotet, vad som var mindre \u00e4n en viss andel, att det \u00e4nd\u00e5 inte n\u00e5dde maxgr\u00e4nsen f\u00f6r hur m\u00e5nga stat_statements som kan samlas. Och jag orienterar mig efter att det f\u00f6rmodligen inte har tr\u00e4ngts bort n\u00e5got.<\/em> <\/p>\n<p><\/p>\n<p>Ja, ja. <\/p>\n<p><\/p>\n<p><em>Men hur man p\u00e5 annat s\u00e4tt kan g\u00f6ra det p\u00e5 ett tillf\u00f6rlitligt s\u00e4tt f\u00f6rst\u00e5r jag inte.<\/em><\/p>\n<p><\/p>\n<p>Tyv\u00e4rr kommer jag inte ih\u00e5g exakt \u2013 om vi anv\u00e4nder sj\u00e4lva f\u00f6rfr\u00e5gan eller queryid med pg_stat_statements och fokuserar p\u00e5 det. Om vi fokuserar p\u00e5 queryid, s\u00e5 borde vi j\u00e4mf\u00f6ra j\u00e4mf\u00f6rbara saker. <\/p>\n<p><\/p>\n<p><em>Nej, det kan faktiskt ers\u00e4ttas flera g\u00e5nger mellan snapshots och komma tillbaka igen.<\/em><\/p>\n<p><\/p>\n<p>Med samma id?<\/p>\n<p><\/p>\n<p><em>Ja.<\/em> <\/p>\n<p><\/p>\n<p>Vi kommer att studera detta. Bra fr\u00e5ga. Det beh\u00f6ver unders\u00f6kas. Men hittills ser vi att vi har antingen 0 skrivet...<\/p>\n<p><\/p>\n<p><em>Detta \u00e4r sj\u00e4lvklart ett s\u00e4llsynt fall, men jag blev chockad n\u00e4r jag fick veta att stat_statements d\u00e4r kan ers\u00e4tta.<\/em> <\/p>\n<p><\/p>\n<p>Det kan finnas mycket i Pg_stat_statements. Vi har st\u00f6tt p\u00e5 att om ni har track_utility = on, s\u00e5 sp\u00e5ras era set ocks\u00e5. <\/p>\n<p><\/p>\n<p><em>Ja, sj\u00e4lvklart.<\/em><\/p>\n<p><\/p>\n<p>Och om ni har java hibernate, som \u00e4r slumpm\u00e4ssigt, s\u00e5 b\u00f6rjar hash-tabellen att l\u00e5sas. Och s\u00e5 snart du st\u00e4nger av en mycket belastad applikation, har du 50-100 grupper. Och d\u00e4r \u00e4r allt mer eller mindre stabilt. Ett av s\u00e4tten att hantera detta \u00e4r att \u00f6ka pg_stat_statements.max. <\/p>\n<p><\/p>\n<p><em>Ja, men man m\u00e5ste veta hur mycket. Och man m\u00e5ste h\u00e5lla ett \u00f6ga p\u00e5 det. S\u00e5 jag g\u00f6r. Det vill s\u00e4ga, jag har pg_stat_statements.max. Och jag ser att jag p\u00e5 snapshot-tidpunkten inte har n\u00e5tt 70 %. Bra, det betyder att vi inte har f\u00f6rlorat n\u00e5got. Vi g\u00f6r en reset. Och samlar igen. Om n\u00e4sta snapshot \u00e4r under 70, s\u00e5 inneb\u00e4r det f\u00f6rmodligen att vi \u00e5terigen inte har f\u00f6rlorat n\u00e5got.<\/em><\/p>\n<p><\/p>\n<p>Ja. Som standard \u00e4r det nu 5 000. Och f\u00f6r m\u00e5nga r\u00e4cker det. <\/p>\n<p><\/p>\n<p><em>Vanligtvis \u2013 ja.<\/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=\"Spela video\" 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. Jag vill till\u00e4gga att om det finns konfidentiella uppgifter i Postgres och de inte f\u00e5r komma in i testmilj\u00f6n, s\u00e5 kan man anv\u00e4nda <noindex><a rel=\"nofollow\" href=\"https:\/\/labs.dalibo.com\/postgresql_anonymizer\">PostgreSQL Anonymizer<\/a><\/noindex>. Schemat \u00e4r ungef\u00e4r f\u00f6ljande:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"&quot;Industrimetod f\u00f6r tuning av PostgreSQL: experiment med databaser&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/cf9a2052364e09a20e68d2347dd0c25b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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 Industriell metod f\u00f6r tuning av PostgreSQL: experiment med databaser. Nikolaj Samokhvalov | ProHoster","description":"Jag rekommenderar att du bekantar dig med tolkningen av Nikolay Samokhalov's rapport \"Industriell metod f\u00f6r tuning av PostgreSQL: experiment med databaser\" Shared_buffers = 25% \u2013 \u00e4r det mycket eller lite?","canonical_url":"https:\/\/prohoster.info\/sv\/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":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/78742","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=78742"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/78742\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/78743"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=78742"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=78742"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=78742"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}