{"id":84082,"date":"2020-06-05T07:42:28","date_gmt":"2020-06-05T05:42:28","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij"},"modified":"2020-06-05T07:42:28","modified_gmt":"2020-06-05T05:42:28","slug":"linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","title":{"rendered":"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Afkodning af Ilya Kosmodemyanskys rapport fra 2015 &quot;Linux tuning for at forbedre PostgreSQL ydeevne&quot;<\/p>\n<p><\/p>\n<p>Disclaimer: Jeg bem\u00e6rker, at dette foredrag er dateret til november 2015 \u2013 der er g\u00e5et mere end 4 \u00e5r, og der er sket meget siden. Den version, der omtales i foredraget, 9.4, er ikke l\u00e6ngere underst\u00f8ttet. I de forl\u00f8bne 4 \u00e5r er der blevet udgivet 5 nye versioner af PostgreSQL og 15 nye versioner af Linux-kernen. Hvis vi omskriver disse afsnit, vil resultatet blive et helt andet foredrag. Men her gennemg\u00e5s den fundamentale tuning af Linux for PostgreSQL, som stadig er relevant i dag.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/8292f74a7d004a9c13ff5f1393816340.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"V0M6YwWmMYM\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/V0M6YwWmMYM\/hqdefault.jpg\" alt=\"Afspil 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>Mit navn er Ilya Kosmodemyanski. Jeg arbejder for PostgreSQL-Consulting, og nu vil jeg fort\u00e6lle en smule om, hvad man skal g\u00f8re med Linux i forhold til databaser generelt og PostgreSQL specifikt, da principperne er ret ens.<\/p>\n<p><\/p>\n<p>Hvad vil jeg tale om? Hvis du arbejder med PostgreSQL, skal du til en vis grad v\u00e6re UNIX-administrator. Hvad betyder det? Hvis vi sammenligner Oracle og PostgreSQL, skal man i Oracle v\u00e6re 80 % DBA databaseadministrator og 20 % Linux-administrator.<\/p>\n<p><\/p>\n<p>Med PostgreSQL er det lidt mere kompliceret. Med PostgreSQL skal man have en meget bedre forst\u00e5else af, hvordan Linux fungerer. Og samtidig skal man f\u00f8lge med i udviklingen, fordi der i den seneste tid er kommet ret mange opdateringer. Nye kerner bliver udgivet, nye funktioner tilf\u00f8jes, ydeevnen forbedres osv. <\/p>\n<p><\/p>\n<p>Hvorfor taler vi om Linux? Det er ikke blot fordi vi er til Linux-konferencen i St. Petersborg, men fordi det i moderne forhold er en af de mest hensigtsm\u00e6ssige operativsystemer til drift af databaser generelt og PostgreSQL specifikt \u2013 det er Linux. Desv\u00e6rre udvikler FreeBSD sig i en ret underlig retning, hvilket vil medf\u00f8re problemer hvad ang\u00e5r ydeevne og mange andre ting. <strong>Ydeevnen af PostgreSQL p\u00e5 Windows er helt klart et s\u00e6rskilt, alvorligt emne, fordi Windows ikke har den delte hukommelse, som UNIX har, og hele PostgreSQL er afh\u00e6ngig af det, da det er et multiprocessystem.<\/strong> <\/p>\n<p><\/p>\n<p>Og eksotiske systemer som Solaris tror jeg i mindre grad interesserer folk, s\u00e5 lad os komme videre. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/990133933bd1816895fc8f73edaf900e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Moderne Linux-distributioner har mere end 1.000 syctl-parametre, afh\u00e6ngigt af hvordan kernen er bygget. Hvis vi ogs\u00e5 ser p\u00e5 forskellige konfigurationer, kan man justere mange aspekter. Der er parametre for filsystemer og hvordan man monterer dem. Hvis der er sp\u00f8rgsm\u00e5l om, hvordan man starter: hvad man skal aktivere i BIOS, hvordan man konfigurerer hardware osv.<\/p>\n<p><\/p>\n<p>Det er et meget stort emne, som man kan tale om i flere dage, og ikke bare i en kort pr\u00e6sentation, men jeg vil nu fokusere p\u00e5 vigtige punkter, som hvordan man undg\u00e5r de faldgruber, der med sikkerhed vil forhindre en god brug af databasen p\u00e5 Linux, hvis man ikke retter dem. Og en vigtig detalje er, at mange parametre som standard ikke er indstillet til de indstillinger, der er korrekte for databasen. Det vil sige, at den som standard vil fungere d\u00e5rligt eller slet ikke fungere. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/189f6497c795a5e5fd5b458edfadb22f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvilke traditionelle tuning m\u00e5l findes der i Linux? Jeg t\u00e6nker, at eftersom I alle har med administration af Linux at g\u00f8re, s\u00e5 beh\u00f8ver jeg n\u00e6ppe forklare, hvad m\u00e5l er. <\/p>\n<p><\/p>\n<p>Man kan tune:<\/p>\n<p><\/p>\n<ul>\n<li>CPU.<\/li>\n<li>Hukommelse.<\/li>\n<li>Lager.<\/li>\n<li>Andet. Dette vil vi tale om til sidst som en afslutning. Selv for eksempel s\u00e5danne parametre som energisparepolitikken kan p\u00e5 en meget uforudsigelig og ikke s\u00e6rlig behagelig m\u00e5de p\u00e5virke pr\u00e6stationen. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/92916aadaf123a3f836bed3a2c1bd95a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvad er specifikationen for PostgreSQL og databaser generelt? Problemet er, at man ikke kan tune en enkelt lille skrue og se, at pr\u00e6stationen er blevet markant bedre. <\/p>\n<p><\/p>\n<p>Ja, der findes s\u00e5danne skruer, men databasen er kompleks. Den interagerer med alle ressourcerne, som serveren har, og foretr\u00e6kker at interagere fuldt ud. Hvis man ser p\u00e5 de moderne anbefalinger fra Oracle til, hvordan man bruger v\u00e6rts-OS, s\u00e5 er det som i anekdoten om den mongolske astronaut - fodre hunden og r\u00f8re ved ingenting. Giv databasen alle ressourcerne, s\u00e5 klarer databasen selv resten. <\/p>\n<p><\/p>\n<p>I princippet er situationen med PostgreSQL lige s\u00e5 kompleks. Forskellen er, at databasen ikke selv kan hente alle ressourcer, s\u00e5 nogle steder skal det h\u00e5ndteres p\u00e5 Linux-niveau. <\/p>\n<p><\/p>\n<p>Hovedideen er ikke at v\u00e6lge et enkelt m\u00e5l og begynde at tune det, for eksempel hukommelse, CPU eller noget i den stil, men at analysere arbejdsbelastningen og fors\u00f8ge at forbedre genneml\u00f8bsomr\u00e5det maksimalt, s\u00e5 den arbejdsbyrde, som de dygtige programm\u00f8rer har skabt for os, inklusive vores brugere, kan passere gennem databasen s\u00e5 effektivt som muligt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/2db6c11a6f612b8aecccfe126be4fd7f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Her er et billede til forklaring af, hvad det er. Der er en Linux OS-buffer og der er delt hukommelse samt delte buffere i PostgreSQL. I mods\u00e6tning til Oracle arbejder PostgreSQL kun direkte gennem kernens buffer, dvs. for at en side fra disken kan komme ind i dens delte hukommelse, skal den passere gennem kernel-bufferen, og liges\u00e5dan tilbage. <\/p>\n<p><\/p>\n<p>Under dette system lever diskene. Jeg har tegnet det som diske. I virkeligheden kan der v\u00e6re en RAID-controller osv. <\/p>\n<p><\/p>\n<p>Og denne input-output sker p\u00e5 den ene eller den anden m\u00e5de gennem dette.<\/p>\n<p><\/p>\n<p>PostgreSQL er en klassisk database. Indeni findes der sider. Og al input-output sker ved hj\u00e6lp af sider. Vi l\u00f8fter blokke op i hukommelsen ved hj\u00e6lp af sider. Hvis der ikke er sket noget, og vi blot har l\u00e6st dem, vil de gradvist fra denne cache, fra de delte buffere, synke tilbage til disken. <\/p>\n<p><\/p>\n<p>Hvis vi har \u00e6ndret noget et sted, vil hele siden blive markeret som snavset. Jeg har markeret dem med bl\u00e5t her. Og det betyder, at denne side skal synkroniseres med det blokerede lager. Dvs. n\u00e5r vi har gjort den snavset, har vi lavet en post i WAL. Og p\u00e5 et eller andet tidspunkt opst\u00e5r et f\u00e6nomen kaldet checkpoint. Og i denne log blev der skrevet information om, at det skete. Det betyder, at alle snavsede sider, der var her p\u00e5 dette tidspunkt i de delte buffere, blev synkroniseret med disken i lageret ved hj\u00e6lp af fsync gennem kernel-buffer.<\/p>\n<p><\/p>\n<p>Hvad er form\u00e5let med det? Hvis der opst\u00e5r et str\u00f8msvigt, vil vi ikke have en situation, hvor alle data g\u00e5r tabt. Den persistente hukommelse, som vi har f\u00e5et at vide om, er stadig teoretisk i databaser - det er en lysende fremtid, som vi selvf\u00f8lgelig str\u00e6ber efter, og som vi godt kan lide, men indtil videre lever de stadig 20 \u00e5r bagud. Og vi skal selvf\u00f8lgelig holde \u00f8je med det.<\/p>\n<p><\/p>\n<p>Og opgaven med at maksimere b\u00e5ndbredden er at justere p\u00e5 alle disse stadier, s\u00e5 det hele fungerer hurtigt. Den delte hukommelse er prim\u00e6rt sidecachen. I PostgreSQL sender vi en select-anmodning om noget, han henter disse data fra disken. De kommer ind i de delte buffere. Derfor, for at det skal fungere bedre, skal der v\u00e6re meget hukommelse.<\/p>\n<p><\/p>\n<p>For everything to work well and quickly, you need to correctly configure the operating system at all stages. Additionally, you must choose balanced hardware, because if there is an imbalance somewhere, you could have a lot of memory, but it will not operate at adequate speed. <\/p>\n<p><\/p>\n<p>Let's take a look at each of these points.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/fe031218be39cd727f3a76b22563e101.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>To ensure these pages move back and forth faster, we need to achieve the following:<\/p>\n<p><\/p>\n<ul>\n<li>Firstly, we need to work more efficiently with memory.<\/li>\n<li>Secondly, the transition when pages move from memory to disk should be more efficient.<\/li>\n<li>And thirdly, the disks must be good. <\/li>\n<\/ul>\n<p><\/p>\n<p>If you have 512 GB of RAM in <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/da\/server\/dts-dronten\/\"   title=\"serveren\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2587\">serveren<\/a> and all of this ultimately connects to a SATA hard drive without any cache, the entire database server will turn not just into a pumpkin, but into a pumpkin with a SATA interface. You will hit this directly. And nothing will save you.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/6630e445c96e94621ae670bc4aee8492.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Regarding the first point with memory, there are three things that can greatly complicate life. <\/p>\n<p><\/p>\n<p>The first of these is NUMA. NUMA is designed to improve performance. Depending on the workload, different things can be optimized. In its new current form, it is not very good for applications like databases that extensively use page cache shared buffers. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/8fcf2af82a96bd1ac52fb0a36bf0b0b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In short, how do you know something is wrong with NUMA? You have some unpleasant glitches, suddenly some CPU is overloaded. Meanwhile, you analyze queries in PostgreSQL and see that there is nothing similar there. These queries should not consume CPU so intensively. It can take a long time to catch this. It\u2019s easier to use the right recommendation from the start on how to configure NUMA for PostgreSQL.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/424b8677e5ae1382b9b49b288e045a3f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>What is actually happening? NUMA stands for Non-Uniform Memory Access. What is its essence? You have a CPU, and next to it is its local memory. And this memory interconnect can access memory from other CPUs.<\/p>\n<p><\/p>\n<p>If you run <code>numactl --hardware<\/code>, you will get a long output. Among other things, there will be a field for distances. There will be numbers - 10-20, something like that. These numbers represent the number of hops to access and use that remote memory locally. In principle, it\u2019s a good idea. It significantly improves performance under certain loads.<\/p>\n<p><\/p>\n<p>Forestil dig, at du har en CPU, der f\u00f8rst fors\u00f8ger at bruge sit lokale hukommelse, og derefter fors\u00f8ger at hente anden hukommelse via interconnect til noget. Og p\u00e5 denne CPU kommer hele din page cache fra PostgreSQL \u2013 hvor mange gigabyte det nu er. Du f\u00e5r altid den v\u00e6rste situation, fordi der normalt er lidt hukommelse direkte i denne hukommelsesmodul. Al hukommelse, der betjenes, g\u00e5r gennem disse interconnects. Det bliver langsomt og trist. Og du har en processor, der betjener denne node, der konstant er overbelastet. Og adgangstiden til denne hukommelse er d\u00e5rlig og langsom. Det er den situation, du ikke \u00f8nsker, hvis du bruger det til en database. <\/p>\n<p><\/p>\n<p>Derfor er en mere korrekt l\u00f8sning for databasen, at operativsystemet Linux overhovedet ikke ved, hvad der foreg\u00e5r. S\u00e5 det vil tilg\u00e5 hukommelsen som det skal. <\/p>\n<p><\/p>\n<p>Hvorfor er det s\u00e5dan? Tilsyneladende burde det v\u00e6re omvendt. Det sker af den enkle grund, at vi har brug for meget hukommelse til page cache \u2013 flere titusinder, hundreder af gigabyte. <\/p>\n<p><\/p>\n<p>Og hvis vi har allokeret det hele og cached vores data der, vil gevinsten ved at bruge cachen v\u00e6re v\u00e6sentligt st\u00f8rre end gevinsten ved s\u00e5dan en snedig tilgang til hukommelsen. Og p\u00e5 den m\u00e5de vil vi vinde uforholdsm\u00e6ssigt i forhold til, at vi mere effektivt vil tilg\u00e5 hukommelsen ved at bruge NUMA.<\/p>\n<p><\/p>\n<p>Derfor er der i \u00f8jeblikket to tilgange, indtil den lysere fremtid kommer, og databasen selv kan finde ud af, hvilke CPU'er den arbejder med, og hvor den skal hente hvad. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/218513d407ea77320057d57b447c54d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Derfor er den rigtige tilgang helt at deaktivere NUMA<\/strong>, for eksempel ved genstart. I de fleste tilf\u00e6lde er gevinsterne s\u00e5 store, at sp\u00f8rgsm\u00e5let om, hvad der er bedre, slet ikke opst\u00e5r. <\/p>\n<p><\/p>\n<p>Der er en anden mulighed. Vi bruger den oftere end den f\u00f8rste, fordi n\u00e5r en kunde henvender sig til os for support, er det en stor sag for dem at genstarte serveren. Der er forretning, der k\u00f8rer der. Og de oplever problemer p\u00e5 grund af NUMA. Derfor pr\u00f8ver vi at deaktivere det p\u00e5 mindre invasive m\u00e5der end genstart, men v\u00e6r her omhyggelig med at kontrollere, at det virkelig er blevet deaktiveret. For som erfaringen viser, fungerer det fint at deaktivere NUMA for PostgreSQL's overordnede proces, men det er ikke n\u00f8dvendigvis sikkert, at det vil virke. Vi skal kontrollere og sikre, at det virkelig er blevet deaktiveret. <\/p>\n<p><\/p>\n<p>Der er et godt indl\u00e6g af Robert Haas. Han er en af udviklerne til PostgreSQL. En af de centrale udviklere bag alle de lavniveau komponenter. Hvis man f\u00f8lger linksene i dette indl\u00e6g, beskriver de flere farverige historier om, hvordan NUMA har gjort livet sv\u00e6rt for folk. Tag et kig, gennemg\u00e5 tjeklisten for systemadministratorer over, hvad der skal konfigureres p\u00e5 serveren, s\u00e5 vores database fungerer godt. Disse indstillinger skal noteres og kontrolleres, fordi ellers vil det ikke g\u00e5 s\u00e5 godt. <\/p>\n<p><\/p>\n<p>Bem\u00e6rk, at dette g\u00e6lder for alle de indstillinger, jeg vil tale om. Men normalt samles databaser i master-slave mode for redundans. Glem ikke at foretage disse indstillinger p\u00e5 slave-serveren, for p\u00e5 et tidspunkt vil der opst\u00e5 en fejl, og du vil skifte til slave, som s\u00e5 bliver master. <\/p>\n<p><\/p>\n<p>I tilf\u00e6lde af n\u00f8dssituation, n\u00e5r alt ser skidt ud, ringer telefonen konstant, og chefen kommer styrtende med en stor stok, vil du ikke have tid til at t\u00e6nke p\u00e5 at kontrollere. Og resultaterne kan v\u00e6re meget triste.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/d2fdda7ad4570554b0e134758295f83e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e6ste punkt er huge pages. Huge pages er sv\u00e6re at teste isoleret, og der er egentlig ikke megen mening i det, selvom der findes benchmarks, der kan g\u00f8re det. De kan let findes p\u00e5 nettet. <\/p>\n<p><\/p>\n<p>Hvad er meningen? Du har en server, der ikke er s\u00e6rlig dyr, og som har meget RAM, for eksempel mere end 30 GB. Du bruger ikke huge pages. Det betyder, at du un\u00e6gteligt har overhead ved hukommelsesbrugen. Og det overhead er langtfra det mest behagelige. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/28c3c94390a6afef815f712ac9189c2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvorfor er det s\u00e5dan? Hvad sker der? Operativsystemet tildeler hukommelse i sm\u00e5 bidder. Det er praktisk, det er s\u00e5dan, det historisk har v\u00e6ret. Og hvis man g\u00e5r i dybden, skal OS konvertere virtuelle adresser til fysiske. Og det er ikke den nemmeste proces, s\u00e5 OS cacher resultatet af denne operation i Translation Lookaside Buffer (TLB).<\/p>\n<p><\/p>\n<p>Da TLB er en cache, opst\u00e5r der alle de problemer, der er forbundet med caching. For det f\u00f8rste, hvis du har meget RAM, der er tildelt i sm\u00e5 bidder, s\u00e5 bliver bufferen meget stor. Og hvis cachen er stor, tager det l\u00e6ngere tid at s\u00f8ge i den. Overheadet er betydeligt, og det optager plads, dvs. noget un\u00f8dvendigt bruger RAM. <\/p>\n<p><\/p>\n<p>Jo mere cachen vokser i en s\u00e5dan situation, jo st\u00f8rre er chancen for cache misses. Og effektiviteten af denne cache falder hurtigt med st\u00f8rre st\u00f8rrelse. Derfor har operativsystemer udviklet en simpel tilgang. I Linux har denne metode l\u00e6nge v\u00e6ret anvendt. I FreeBSD er det for nylig blevet introduceret. Men vi taler om Linux. Det er huge pages.<\/p>\n<p><\/p>\n<p>Og her skal det bem\u00e6rkes, at id\u00e9en om huge pages oprindeligt blev fremf\u00f8rt af f\u00e6llesskaber, der inkluderede Oracle og IBM, dvs. producenter af databaser t\u00e6nkte grundigt over, at dette ville v\u00e6re nyttigt, ogs\u00e5 for databaser. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/39a24536929fbcf551d8ba1c8e7faf32.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og hvordan f\u00e5r man det til at fungere med PostgreSQL? For det f\u00f8rste skal huge pages v\u00e6re aktiveret i Linux-kernen.<\/p>\n<p><\/p>\n<p>For det andet skal de angives eksplicit med sysctl parameteren - hvor mange der skal v\u00e6re. Tallene her stammer fra en gammel server. Du kan beregne, hvor mange shared buffers du har, s\u00e5 huge pages kan blive indpasset. <\/p>\n<p><\/p>\n<p>Og hvis hele serveren er dedikeret til PostgreSQL, s\u00e5 er et godt udgangspunkt at afs\u00e6tte enten 25 % af den samlede RAM til shared buffers eller 75 %, hvis du er sikker p\u00e5, at din database vil passe ind i de 75 %. Dette er dit f\u00f8rste udgangspunkt. Hvis du har 256 GB RAM, s\u00e5 vil 64 GB v\u00e6re til shared buffers. Beregn med en smule margen - hvad denne v\u00e6rdi skal s\u00e6ttes til.<\/p>\n<p><\/p>\n<p>F\u00f8r version 9.2 (hvis jeg ikke tager fejl, fra version 8.2) kunne PostgreSQL integreres med huge pages ved hj\u00e6lp af et tredjepartsbibliotek. Og dette skal altid g\u00f8res. For det f\u00f8rste skal kernen kunne allokere huge pages korrekt. Og for det andet skal applikationen, der arbejder med dem, kunne udnytte dem. Det kan ikke g\u00f8res uden videre. Da PostgreSQL allokerede hukommelse i stil med system 5, kunne dette g\u00f8res med libhugetlbfs - det fulde navn p\u00e5 biblioteket.<\/p>\n<p><\/p>\n<p>I version 9.3 forbedrede vi PostgreSQL's ydeevne ved h\u00e5ndtering af hukommelse og opgav system 5 metoden til hukommelsestildeling. Alle var meget glade, fordi ellers n\u00e5r man pr\u00f8ver at k\u00f8re to PostgreSQL-instans p\u00e5 \u00e9n maskine, s\u00e5 siger den, at der ikke er nok delt hukommelse. Og den siger, at man skal justere sysctl. Og der er s\u00e5dan en sysctl, at man skal genstarte osv. Generelt var alle glade. Men hukommelsestildelingen med mmap br\u00f8d brugen af huge pages. De fleste af vores kunder bruger store delte buffere. Og vi anbefalede kraftigt ikke at opgradere til 9.3, fordi overheadet begyndte at t\u00e6lle i gode procenter.<\/p>\n<p><\/p>\n<p>Men community'en lagde m\u00e6rke til dette problem og i 9.4 arbejdede de virkelig godt med denne udfordring. I 9.4 blev der introduceret en parameter i postgresql.conf, hvor man kan aktivere try, on eller off.<\/p>\n<p><\/p>\n<p>Try er den mest sikre parameter. Ved opstart af PostgreSQL, n\u00e5r den tildeler delt hukommelse, fors\u00f8ger den at f\u00e5 denne hukommelse fra huge pages. Hvis det ikke er muligt, falder den tilbage til almindelig tildeling. Og hvis du bruger FreeBSD eller Solaris, kan du s\u00e6tte try, det er altid sikkert. <\/p>\n<p><\/p>\n<p>Hvis on, starter den simpelthen ikke, hvis den ikke kunne tildele fra huge pages. Her er der \u2013 hvem der \u00f8nsker hvad. Men hvis du har try, s\u00e5 skal du tjekke, at du virkelig har f\u00e5et tildelt det, du har brug for, fordi der er mange fejlmarginer. Nu fungerer denne funktion kun p\u00e5 Linux.<\/p>\n<p><\/p>\n<p>Endnu et lille bem\u00e6rkning, f\u00f8r vi g\u00e5r videre. Transparent huge pages handler ikke om PostgreSQL endnu. Den kan ikke drage fordel af dem ordentligt. Og med Transparent huge pages for en arbejdsbyrde, der kr\u00e6ver en stor del delt hukommelse, kommer fordelene kun ved meget store m\u00e6ngder. Hvis du har terabyte hukommelse, kan det spille en rolle. Hvis vi taler om mere almindelige anvendelser, n\u00e5r du har 32, 64, 128, 256 GB hukommelse p\u00e5 maskinen, s\u00e5 er almindelige huge pages Ok, og vi deaktiverer bare Transparent. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/18cf3ace8876e55b42e66f617a24f1bc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og den sidste ting, der vedr\u00f8rer hukommelse, er ikke direkte relateret til throughput, men den kan virkelig forringe livskvaliteten. Hele b\u00e5ndbredden vil lide st\u00e6rkt af, at serveren konstant swappes. <\/p>\n<p><\/p>\n<p>Og det vil v\u00e6re meget ubehageligt i en r\u00e6kke situationer. Den prim\u00e6re ubehagelighed er, at adf\u00e6rden i moderne kerner lidt adskiller sig fra de \u00e6ldre Linux-kerner. Og dette er noget, man helst vil undg\u00e5, fordi n\u00e5r vi taler om at arbejde med swap, ender det ikke med en rettidig ankomst af OOM-killeren. Og en OOM-killer, der ikke kommer til tiden og afslutter PostgreSQL, er ubehageligt. Dette f\u00e5r alle til at opdage det, dvs. op til den sidste bruger. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/c7c46ff0f4cd8cfcfb21978dd1da4c08.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvad sker der? I har en stor m\u00e6ngde RAM, alt fungerer godt. Men af en eller anden grund h\u00e6nger serveren i swap og bliver langsom p\u00e5 grund af det. Det virker som om, der er masser af hukommelse, men s\u00e5dan g\u00e5r det. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/24d19929f1506cd9768a836095a24dfb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tidligere r\u00e5dgav vi at s\u00e6tte vm.swappiness til nul, dvs. deaktivere swap. Det s\u00e5 ud som om, at 32 GB RAM og de tilsvarende delte buffere var en enorm m\u00e6ngde. Hovedform\u00e5let med swap er, at der er et sted at smide en kerne, hvis vi falder fra. Men det blev ikke l\u00e6ngere udf\u00f8rt. Og hvad skal man s\u00e5 g\u00f8re med denne kerne? Det er allerede et problem, hvor det ikke er helt klart, hvorfor swap er n\u00f8dvendigt, is\u00e6r i s\u00e5 stort omfang. <\/p>\n<p><\/p>\n<p>Men i nyere, dvs. i de tredje versioner af kernen, er adf\u00e6rden \u00e6ndret. Og hvis man s\u00e6tter swap til nul, dvs. slukker det, vil OOM-killeren p\u00e5 et tidspunkt komme, selv med en vis m\u00e6ngde RAM tilbage, for at dr\u00e6be de mest intensive forbrugere. Fordi den vil vurdere, at med s\u00e5dan en arbejdsbelastning har vi kun lidt tilbage, og vi vil g\u00e5 ned, dvs. ikke dr\u00e6be et systemprocess, men dr\u00e6be noget mindre vigtigt. Dette mindre vigtige vil v\u00e6re en intens forbruger af delt hukommelse, nemlig postmaster. Og derefter vil det v\u00e6re godt, hvis databasen ikke skal genskabes. <\/p>\n<p><\/p>\n<p>Derfor er standards\u00e6tningen nu, s\u00e5 vidt jeg husker, for de fleste distributioner omkring 6, dvs. hvorn\u00e5r man skal begynde at bruge swap afh\u00e6ngigt af hvor meget hukommelse der er tilbage. <strong>Vi r\u00e5dgiver nu at s\u00e6tte vm.swappiness = 1, fordi det n\u00e6sten slukker for det, men ikke giver de samme effekter som en uventet ankommet OOM-killer, der afslutter det hele.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/20f01dca0aff819abcbb687cea69ac74.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvad sker der nu? N\u00e5r vi taler om databases ydeevne og gradvist kommer til diskene, begynder alle at gribe hovedet. For det er en sandhed, som vi har kendt siden barndommen: diske er langsomme, og hukommelse er hurtig. Og alle ved, at der vil v\u00e6re problemer med diskydelsen i databasen.<\/p>\n<p><\/p>\n<p>Det prim\u00e6re problem med PostgreSQL's ydeevne, relateret til checkpoint spikes, opst\u00e5r ikke fordi disken er langsom. Det skyldes snarere, at b\u00e5ndbredden mellem hukommelse og disk ikke er afbalanceret. Og de kan v\u00e6re ubalancerede p\u00e5 forskellige m\u00e5der. PostgreSQL er ikke konfigureret korrekt, operativsystemet er ikke konfigureret, hardwaren er ikke korrekt, og hardwaren er forkert. Dette problem opst\u00e5r kun, hvis alt fungerer som det skal, dvs. enten er der ingen belastning, eller indstillingerne og hardwaren er godt tilpasset. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/c4d841f9ed48bb5bb1b29bd9f189753f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvad er det, og hvordan ser det ud? Normalt har folk, der arbejder med PostgreSQL, v\u00e6ret igennem dette flere gange. Jeg vil forklare. Som jeg sagde, laver PostgreSQL periodisk checkpoints for at overf\u00f8re de \u201cbeskidte\u201d sider fra den delte hukommelse til disken. Hvis vi har en stor m\u00e6ngde delt hukommelse, s\u00e5 begynder checkpoint at p\u00e5virke disken intensivt, fordi det overf\u00f8rer disse sider via fsync. Det kommer ind i kernel buffer og skrives til diskene med fsync. Og hvis omfanget af dette er stort, kan vi observere en ubehagelig effekt, nemlig en meget h\u00f8j diskudnyttelse.<\/p>\n<p><\/p>\n<p>Her har jeg to billeder. Jeg vil lige forklare, hvad det er. Det er to tidskorrelerede grafer. Den f\u00f8rste graf viser diskudnyttelsen. Her n\u00e5r den n\u00e6sten op p\u00e5 90 % p\u00e5 dette tidspunkt. Hvis din databaseserver har fysiske diske med en RAID-controller, og udnyttelsen n\u00e6rmer sig 90 %, er det d\u00e5rlige nyheder. Det betyder, at hvis det forts\u00e6tter, vil det n\u00e5 100, og ind- og uddata vil stoppe. <\/p>\n<p><\/p>\n<p>Hvis du har et diskarray, er historien lidt anderledes. Det afh\u00e6nger af, hvordan det er konfigureret, hvad slags array det er osv. <\/p>\n<p><\/p>\n<p>Samtidig er her konfigureret en grafik fra den interne PostgreSQL-visning, der viser, hvordan checkpoint-processen forl\u00f8ber. Den gr\u00f8nne farve viser, hvor mange buffere, disse 'snuskede' sider, der i \u00f8jeblikket kom til dette checkpoint for synkronisering. Og det vigtigste, man her skal vide. Vi kan se, at der er kommet mange sider ind, og p\u00e5 et tidspunkt ramte vi gr\u00e6nsen, dvs. vi har skrevet og skrevet, og det er tydeligt, at diskdrevssystemet er meget optaget. Og vores checkpoint har en stor p\u00e5virkning p\u00e5 disken. Ideelt set burde situationen se mere s\u00e5dan ud, dvs. vi burde have haft mindre skrivning her. Og vi kan justere indstillingerne for at sikre, at det forts\u00e6tter s\u00e5dan. Det vil sige, at udnyttelsen er lille, men der er stadig noget, vi skriver. <\/p>\n<p><\/p>\n<p>Hvad skal der til for at overvinde dette problem? Hvis IO er stoppet under databasen, betyder det, at alle brugere, som fors\u00f8ger at udf\u00f8re deres foresp\u00f8rgsler, vil skulle vente. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/3efac5fe79443c32f56ec8da2f418116.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Set fra et Linux-perspektiv, hvis du har et godt hardware, har konfigureret det korrekt, og har sat PostgreSQL op, s\u00e5 den sj\u00e6ldnere udf\u00f8rer disse checkpoints og spredte dem over tid, s\u00e5 falder du tilbage til de standardparametre, der findes i Debian. For de fleste Linux-distributioner ser situationen s\u00e5dan her ud: vm.dirty_ratio=20, vm.dirty_background_ratio=10.<\/p>\n<p><\/p>\n<p>Hvad betyder det? Siden kerne 2.6 er der en demon, der h\u00e5ndterer flushing. Pdglush, afh\u00e6ngigt af hvilken der anvendes, der besk\u00e6ftiger sig med baggrunds-kasseren af snuskede sider fra kernel-bufferen og kasserer, n\u00e5r det er n\u00f8dvendigt at kassere snuskede sider, n\u00e5r baggrunds-kasseringen ikke l\u00e6ngere hj\u00e6lper. <\/p>\n<p><\/p>\n<p>Hvorn\u00e5r opst\u00e5r baggrunden? N\u00e5r 10 % af al den tilg\u00e6ngelige RAM, der er p\u00e5 serveren, er optaget af snuskede sider i kernel-bufferen, kaldes der en specifik funktion til at kassere i baggrunden. Hvorfor er den baggrunds? Den tager som parameter, hvor mange sider der skal kasseres. Og eksempelvis kasserer den N sider. Og i en periode g\u00e5r denne enhed i dvale. Og s\u00e5 kommer den tilbage og kasserer et bestemt antal sider igen. <\/p>\n<p><\/p>\n<p>Det er en ganske enkel sag. Her er opgaven som med en swimmingpool, hvor den ene r\u00f8v fyldes, mens den anden t\u00f8mmes. Vores checkpoint kom, og hvis den sendte f\u00e5 snuskede sider til kassering, s\u00e5 vil pgflush forsigtigt fordele det hele fra kernel-bufferen. <\/p>\n<p><\/p>\n<p>Hvis disse beskidte sider forts\u00e6tter med at opbygge sig, n\u00e5r de n\u00e5r op p\u00e5 20 %, vil operativsystemet prioritere at skrive dem til disk, fordi str\u00f8mmen kan g\u00e5, og vi vil ende i problemer. Vi vil miste disse data, for eksempel. <\/p>\n<p><\/p>\n<p>Hvad er trikset? <strong>Trikset er, at disse parametre i den moderne verden, 20 og 10 % af den samlede RAM i maskinen, langt fra er tilstr\u00e6kkelige i forhold til kapaciteten af ethvert disk system, du har.<\/strong> <\/p>\n<p><\/p>\n<p>Forestil dig, at du har 128 GB RAM. 12,8 GB kommer til dit disksystem. Uanset hvilken cache eller array du har, kan de ikke h\u00e5ndtere s\u00e5 meget. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/1e4bab2fad7d3a05dc76cdd9d153f46c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Derfor anbefaler vi, at disse tal straks tilpasses dit RAID-kontrols muligheder.<\/strong> Her er der straks givet en anbefaling til en controller, der har 512 MB cache. <\/p>\n<p><\/p>\n<p>Det regnes meget enkelt. Man kan s\u00e6tte vm.dirty_background i bytes. Og disse indstillinger oph\u00e6ver de to foreg\u00e5ende. Hvis der er en ratio som standard, eller hvis de, der er i bytes, er aktiveret, vil dem, der er i bytes, virke. Men da jeg er DBA-konsulent og arbejder med forskellige kunder, pr\u00f8ver jeg at v\u00e6re forsigtig, og derfor, hvis det er i bytes, s\u00e5 er det i bytes. Ingen har givet nogen garanti for, at en god admin ikke tilf\u00f8rer mere RAM til serveren, genstarter den, mens tallet forbliver det samme. Bare beregn disse tal for at sikre, at alt passer. <\/p>\n<p><\/p>\n<p>Hvad sker der, hvis du ikke passer ind? Jeg har skrevet, at al flushing stopper effektivt, men i virkeligheden er det en figurativ talem\u00e5de. Operativsystemet har et stort problem - det har mange beskidte sider, s\u00e5 den effektive I\/O stopper, der genereres af dine klienter, dvs. en applikation er til stede for at sende en SQL-foresp\u00f8rgsel til databasen og venter. Enhver I\/O til den - i laveste prioritet, fordi databasen er optaget af checkpoint. Og hvorn\u00e5r det vil v\u00e6re f\u00e6rdigt, er helt uforudsigeligt. Og n\u00e5r du har n\u00e5et ikke-baggrunds-flushing, betyder det, at al din I\/O er optaget af det. Og indtil det er f\u00e6rdigt, kan du ikke g\u00f8re noget. <\/p>\n<p><\/p>\n<p>Der er ogs\u00e5 to vigtige punkter, der g\u00e5r ud over denne pr\u00e6sentation. Disse indstillinger skal matche indstillingerne i postgresql.conf, dvs. checkpoint-indstillinger. Og dit disksystem skal v\u00e6re korrekt konfigureret. <strong>Hvis du har cache p\u00e5 RAID, skal der v\u00e6re et batteri p\u00e5 det.<\/strong> Folk k\u00f8ber RAID med god cache uden batteri. <strong>Hvis du har SSD i RAID, skal de v\u00e6re serverklasse, der skal v\u00e6re kondensatorer p\u00e5.<\/strong> Her er en detaljeret tjekliste. P\u00e5 dette link findes min pr\u00e6sentation om, hvordan man konfigurerer diskperformance i PostgreSQL. Der er alle disse tjeklister. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/0ca13d550cb9eec4163f886467b2b3ea.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvad andet kan virkelig komplicere livet? Det er to parametre. De er relativt nye. De kan som standard v\u00e6re aktiveret i forskellige applikationer. Og de kan g\u00f8re livet mindst lige s\u00e5 besv\u00e6rligt, hvis de er forkert aktiveret. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/35aa98d67ff1f089a751a5fd808bd1b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der er to relativt nye funktioner. De er allerede dukket op i tredje kerner. Det er sched_migration_cost i nanosekunder og sched_autogroup_enabled, som som standard er en. <\/p>\n<p><\/p>\n<p>Og hvordan \u00f8del\u00e6gger de livet? Hvad er sched_migration_cost? Linux scheduler kan migrere en proces fra en CPU til en anden. Og for PostgreSQL, som udf\u00f8rer foresp\u00f8rgsler, er migration til en anden CPU helt uforst\u00e5eligt. Set fra operativsystemets perspektiv, n\u00e5r du skifter vinduer mellem openoffice og terminalen, kan det v\u00e6re godt, men <strong>for databasen er det meget d\u00e5rligt.<\/strong> <strong>Derfor er en fornuftig politik at s\u00e6tte migration_cost til en stor v\u00e6rdi, mindst et par tusind nanosekunder.<\/strong> <\/p>\n<p><\/p>\n<p>Hvad vil det betyde for scheduler? Det vil tro, at i denne periode er denne proces stadig 'hot'. Det vil sige, hvis du har en lang transaktion, som besk\u00e6ftiger sig med noget, vil scheduler forst\u00e5 dette. Han vil tro, at s\u00e5 l\u00e6nge timeout ikke er passeret, er der ikke behov for at migrere denne proces. Hvis processen udf\u00f8rer noget, vil den ikke blive migreret, den vil roligt forts\u00e6tte p\u00e5 den CPU, der er tildelt. Og resultatet bliver fremragende. <\/p>\n<p><\/p>\n<p>Det andet punkt er autogroup. Der er en god id\u00e9 til specifikke arbejdsbelastninger, der ikke har noget at g\u00f8re med moderne databaser \u2013 at gruppere processer efter den virtuelle terminal, de er startet fra. Det er praktisk til visse opgaver. <strong>I praksis er PostgreSQL et multiprocessing-system med prefork, der starter fra \u00e9t terminalvindue. Du har lock writer, checkpoint, og alle dine klientforesp\u00f8rgsler vil blive grupperet p\u00e5 \u00e9n scheduler, p\u00e5 \u00e9n CPU. Og de vil alle vente sammen p\u00e5, at den bliver ledig, hvilket g\u00f8r, at de forstyrrer hinanden og optager ressourcen l\u00e6ngere. Denne situation er slet ikke n\u00f8dvendig ved s\u00e5dan en belastning, og derfor skal det slukkes.<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/55e829d1c1b69b7f6eaf5fc89dad30d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Min kollega Aleksej Lesovskij har lavet tests med et enkelt pgbench, hvor han for\u00f8gede migration_cost med en orden og slukkede autogroup. <strong>Forskellen p\u00e5 d\u00e5rlig hardware var n\u00e6sten 10 %<\/strong>. Der er en diskussion i PostgreSQL-listen, hvor folk pr\u00e6senterer resultater om, hvordan s\u00e5danne \u00e6ndringer p\u00e5 foresp\u00f8rgsels hastigheden <strong>p\u00e5virkede 50 %<\/strong>. Der er mange s\u00e5danne historier.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/b3d1983ec2a37f8b85129c93f2373644.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og til sidst om str\u00f8mbesparende politik. Det er godt, at Linux nu kan bruges p\u00e5 en b\u00e6rbar computer. Og den skulle angiveligt have et godt batteriforbrug. Men pludselig viser det sig, at det samme ogs\u00e5 kan v\u00e6re tilf\u00e6ldet p\u00e5 servere. <\/p>\n<p><\/p>\n<p>Desuden, hvis du lejer servere fra en eller anden host, s\u00e5 s\u00f8rger de \"venlige\" <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/da\/\"   title=\"hoster\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1200\">hoster<\/a> ikke for, at du har en bedre ydeevne. Deres m\u00e5l er at maksimere udnyttelsen af deres hardware. Derfor kan de som standard have aktiveret b\u00e6rbar energisparetilstand p\u00e5 operativsystemet.<\/p>\n<p><\/p>\n<p><strong>Hvis du bruger dette p\u00e5 en server med en database under intensiv belastning, er dit valg \u2013 acpi_cpufreq + performance. Selv med ondemand vil der allerede v\u00e6re problemer.<\/strong> <\/p>\n<p><\/p>\n<p>Intel_pstate er allerede en lidt anden driver. Og nu gives der pr\u00e6ference til denne, da den er nyere og fungerer bedre.<\/p>\n<p><\/p>\n<p>Derfor b\u00f8r governor v\u00e6re performance. Ondemand, powersave og alt det andet \u2013 det er ikke for dig. <\/p>\n<p><\/p>\n<p>Resultaterne fra explain analyze i PostgreSQL kan variere med flere ordrer, hvis du aktiverer powersave, fordi CPU'en under databasen vil blive planlagt p\u00e5 en helt uforudsigelig m\u00e5de.<\/p>\n<p><\/p>\n<p>Disse indstillinger kan v\u00e6re aktiveret som standard. Tjek om de er aktiveret som standard. Det kan v\u00e6re en virkelig stor udfordring. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux tuning for at forbedre PostgreSQL-ydeevne. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/ef32dafd9c8ea3403dc31c34ee2b5da8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og til sidst vil jeg gerne sige tak til gutterne fra vores DBA-team PosgreSQL-Consulting, s\u00e6rligt Maks Boguk og Alexey Lesovsky, som hver dag arbejder h\u00e5rdt p\u00e5 dette omr\u00e5de. Vi fors\u00f8ger at g\u00f8re det s\u00e5 godt som muligt for vores kunder, s\u00e5 deres systemer fungerer optimalt. Det er lidt ligesom med instrukser for luftfartssikkerhed. Her st\u00e5r alt skrevet med blod. Hver eneste skrue er blevet opdaget under forskellige problemer. Jeg deler dem gladeligt med jer.<\/p>\n<p><\/p>\n<p>Sp\u00f8rgsm\u00e5l:<\/p>\n<p><\/p>\n<p><em>Tak! Hvis en virksomhed for eksempel \u00f8nsker at spare penge og placere databasen og logs for applikationen p\u00e5 \u00e9n server, eller hvis virksomheden f\u00f8lger den moderne tendens med mikrotjenestearkitekturer, hvor PostgreSQL k\u00f8rer i en container. Hvad er tricket? Sysctl p\u00e5virker globalt hele kernen. Jeg har ikke h\u00f8rt, at sysctl bliver virtualiseret, s\u00e5 de fungerer separat i containeren. Der er kun cgroup, og der er kun kontrol p\u00e5 dele. Hvordan kan man leve med det? Eller hvis du \u00f8nsker ydeevne, s\u00e5 k\u00f8r PostgreSQL p\u00e5 en dedikeret server og optim\u00e9r den?<\/em><\/p>\n<p><\/p>\n<p>Vi har svaret p\u00e5 dit sp\u00f8rgsm\u00e5l p\u00e5 cirka tre m\u00e5der. Hvis det ikke handler om en dedikeret server, der kan optimeres osv., s\u00e5 slap af, det vil fungere fint uden de indstillinger. Hvis du oplever en belastning, der kr\u00e6ver disse indstillinger, s\u00e5 vil du komme til den dedikerede server, f\u00f8r du beh\u00f8ver disse indstillinger.<\/p>\n<p><\/p>\n<p>Hvad er problemet? Hvis det er en virtuel maskine, vil du sandsynligvis have mange problemer, f.eks. med, at latency p\u00e5 de fleste virtuelle maskiner er ret inkonsistent. Selv hvis diskens b\u00e5ndbredde er god, kan en enkelt mislykket I\/O-transaktion, der ikke p\u00e5virker den gennemsnitlige b\u00e5ndbredde n\u00e6vnev\u00e6rdigt, ske under et checkpoint eller under skrivning til WAL, hvilket kan medf\u00f8re store problemer for databasen. Og du vil l\u00e6gge m\u00e6rke til det, f\u00f8r du st\u00f8der ind i disse problemer. <\/p>\n<p><\/p>\n<p>Hvis du har NGINX p\u00e5 den samme server, vil du ogs\u00e5 have det samme problem. Den vil k\u00e6mpe om delt hukommelse. Og du vil ikke n\u00e5 de problemer, der er beskrevet her.<\/p>\n<p><\/p>\n<p>Men p\u00e5 den anden side vil nogle af disse parametre stadig v\u00e6re relevante for dig. For eksempel at s\u00e6tte dirty_ratio med sysctl, s\u00e5 det ikke bliver s\u00e5 ekstremt \u2013 det vil hj\u00e6lpe uanset hvad. P\u00e5 en eller anden m\u00e5de vil du have interaktion med disken. Og det vil ske efter en forkert skema. Det er generelt standard de parametre, jeg viste. Og i hvert fald er det bedre at \u00e6ndre dem. <\/p>\n<p><\/p>\n<p>Der kan v\u00e6re problemer med NUMA. VmWare fungerer for eksempel godt med NUMA med helt modsatte indstillinger. Og her skal man v\u00e6lge \u2013 er det en fysisk server eller ikke. <\/p>\n<p><\/p>\n<p><em>Jeg har et sp\u00f8rgsm\u00e5l relateret til Amazon AWS. De har forudkonfigurerede billeder. Et af dem hedder Amazon RDS. Er der nogle tilpassede indstillinger for deres operativsystem?<\/em><\/p>\n<p><\/p>\n<p>Der findes indstillinger, men det er andre indstillinger. Her konfigurerer vi operativsystemet fra perspektivet af, hvordan databasen vil bruge dette. Og der er parametre, der bestemmer, hvor vi skal g\u00e5 nu, s\u00e5dan en shaping. Alts\u00e5, vi har brug for s\u00e5 mange ressourcer, og vi vil forbruge dem nu. Efter dette tilslutter Amazon RDS disse ressourcer, og derefter falder ydeevnen. Der er s\u00e6rskilte historier om, hvordan folk begynder at eksperimentere med dette. Nogle gange med ret stor succes. Men det har ikke noget at g\u00f8re med OS-indstillingerne. Det er som en slags hacking af skyen. Det er en anden historie.<\/p>\n<p><\/p>\n<p><em>Hvorfor giver Transparent huge pages ikke effekt sammenlignet med Huge TLB?<\/em><\/p>\n<p><\/p>\n<p>De giver ikke. Dette kan forklares p\u00e5 mange m\u00e5der. Men i virkeligheden giver de slet ikke effekten. Hvad er historien om PostgreSQL? Det allokerer en stor del delt hukommelse ved opstart. Om de er transparente eller ikke \u2013 det er fuldst\u00e6ndig irrelevant. Det faktum, at de allokeres ved opstart, forklarer alt. Og hvis der er meget hukommelse og det er n\u00f8dvendigt at omkonfigurere shared_memory segmentet, s\u00e5 vil Transparent huge pages v\u00e6re relevant. Hos PostgreSQL er det simpelthen afsat en enorm del ved opstart, og der sker ikke noget s\u00e6rlig derefter. Man kan selvf\u00f8lgelig bruge dem, men der er en risiko for at f\u00e5 beskadiget shared_memory, n\u00e5r den skal genallokeres. PostgreSQL ved jo ikke noget om det.<\/p>\n<p>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/505108\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0432 \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0432\u0435\u0440\u0441\u0438\u044f 9.4 \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0417\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0435 4 \u0433\u043e\u0434\u0430 \u0432\u044b\u0448\u043b\u043e 5 \u043d\u043e\u0432\u044b\u0445 \u0440\u0435\u043b\u0438\u0437\u043e\u0432 PostgreSQL \u0432\u044b\u0448\u043b\u043e \u0438 15 \u0432\u0435\u0440\u0441\u0438\u0439 \u044f\u0434\u0440\u0430 Linux. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":84083,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-84082","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\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\/da\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\udd47Linux tuning to improve PostgreSQL performance. \u0418\u043b\u044c\u044f \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u0438\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij\" \/>\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-06-05T05:42:28+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-05T05:42:28+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\udd47Linux tuning to improve PostgreSQL performance. Ilya Kosmodemyansky | ProHoster","description":"Afkodning af rapporten fra 2015 af Ilya Kosmodemyansky \"Linux tuning to improve PostgreSQL performance\" Disclaimer: Jeg bem\u00e6rker, at denne rapport er dateret november 2015 \u2013 der er g\u00e5et mere end 4 \u00e5r, og der er sket meget.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\udd47Linux tuning to improve PostgreSQL performance. \u0418\u043b\u044c\u044f \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u0438\u0439 | ProHoster","og:description":"\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","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-06-05T05:42:28+00:00","article:modified_time":"2020-06-05T05:42:28+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"84082","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 15:05:32","updated":"2026-02-09 21:38:01","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/84082","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=84082"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/84082\/revisions"}],"predecessor-version":[{"id":159869,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/84082\/revisions\/159869"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/84083"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=84082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=84082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=84082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}