{"id":35920,"date":"2019-10-31T22:07:35","date_gmt":"2019-10-31T19:07:35","guid":{"rendered":"https:\/\/prohoster.info\/blog\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql\/"},"modified":"2019-10-31T22:07:35","modified_gmt":"2019-10-31T19:07:35","slug":"nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql","title":{"rendered":"Nastaven\u00ed parametr\u016f j\u00e1dra Linux pro optimalizaci PostgreSQL","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Nastaven\u00ed parametr\u016f j\u00e1dra Linux pro optimalizaci PostgreSQL\" src=\"\/wp-content\/uploads\/2019\/07\/a28458ff50cdc517aad71b47adab6eb3.jpeg\" style=\"display:block;margin: 0 auto;\" \/> Optim\u00e1lna v\u00fdkonnos\u0165 PostgreSQL z\u00e1vis\u00ed od spr\u00e1vne ur\u010den\u00fdch parametrov opera\u010dn\u00e9ho syst\u00e9mu. Zle nastaven\u00e9 parametre jadra OS m\u00f4\u017eu vies\u0165 k zn\u00ed\u017eeniu v\u00fdkonu datab\u00e1zov\u00e9ho servera. Preto je nevyhnutn\u00e9, aby tieto parametre boli nastaven\u00e9 v s\u00falade s datab\u00e1zov\u00fdm serverom a jeho pracovnou z\u00e1\u0165a\u017eou. V tomto pr\u00edspevku sa budeme zaobera\u0165 niektor\u00fdmi d\u00f4le\u017eit\u00fdmi parametrami jadra Linuxu, ktor\u00e9 m\u00f4\u017eu ovplyvni\u0165 v\u00fdkon datab\u00e1zov\u00e9ho servera a sp\u00f4sobmi ich nastavenia.<\/p>\n<h2>SHMMAX \/ SHMALL<\/h2>\n<p>\n<b>SHMMAX<\/b> \u2014 je to parameter jadra, ktor\u00fd sa pou\u017e\u00edva na ur\u010denie maxim\u00e1lnej ve\u013ekosti jedn\u00e9ho segmentu zdie\u013eanej pam\u00e4te (shared memory), ktor\u00fd m\u00f4\u017ee alokova\u0165 proces Linux. Do verzie 9.2 PostgreSQL pou\u017e\u00edval System V (SysV), pre ktor\u00fd je potrebn\u00e9 nastavi\u0165 SHMMAX. Po verzii 9.2 PostgreSQL pre\u0161iel na zdie\u013ean\u00fa pam\u00e4\u0165 POSIX. Tak\u017ee teraz je potrebn\u00e9 menej bajtov zdie\u013eanej pam\u00e4te System V.<\/p>\n<p>Do verzie 9.3 bol SHMMAX najd\u00f4le\u017eitej\u0161\u00edm parametrom jadra. Hodnota SHMMAX je stanoven\u00e1 v bajtoch.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nPodobne, <b>SHMALL<\/b> \u2014 je \u010fal\u0161\u00ed parameter jadra, ktor\u00fd sa pou\u017e\u00edva na ur\u010denie <br \/>\ncelkov\u00e9ho objemu str\u00e1n zdie\u013eanej pam\u00e4te (shared memory). Ak chcete zobrazi\u0165 aktu\u00e1lne hodnoty SHMMAX, SHMALL alebo SHMMIN, pou\u017eite pr\u00edkaz <i>ipcs<\/i>.<\/p>\n<p><b>SHM* Detaily \u2014 Linux<\/b><\/p>\n<pre><code class=\"bash\">$ ipcs -lm\n\n------ Limity zdie\u013eanej pam\u00e4te --------\nmax po\u010det segmentov = 4096\nmax ve\u013ekos\u0165 seg (kbytes) = 1073741824\nmax celkov\u00e1 zdie\u013ean\u00e1 pam\u00e4\u0165 (kbytes) = 17179869184\nmin ve\u013ekos\u0165 seg (bajty) = 1<\/code><\/pre>\n<p>\n<b>SHM* Detaily \u2014 MacOS X<\/b><\/p>\n<pre><code class=\"bash\">$ ipcs -M\nStav IPC od  as of Thu Aug 16 22:20:35 PKT 2018\nshminfo:\n\tshmmax: 16777216\t(max ve\u013ekos\u0165 zdie\u013ean\u00e9ho pam\u00e4\u0165ov\u00e9ho segmentu)\n\tshmmin:       1\t(min ve\u013ekos\u0165 zdie\u013ean\u00e9ho pam\u00e4\u0165ov\u00e9ho segmentu)\n\tshmmni:      32\t(max po\u010det identifik\u00e1torov zdie\u013eanej pam\u00e4te)\n\tshmseg:       8\t(max po\u010det zdie\u013ean\u00fdch pam\u00e4\u0165ov\u00fdch segmentov na proces)\n\tshmall:    1024\t(max mno\u017estvo zdie\u013eanej pam\u00e4te v str\u00e1nkach)\n<\/code><\/pre>\n<p>\nPostgreSQL pou\u017e\u00edva <b>System V IPC<\/b> na alok\u00e1ciu zdie\u013eanej pam\u00e4te. Tento parameter je jedn\u00fdm z najd\u00f4le\u017eitej\u0161\u00edch parametrov jadra. Kedyko\u013evek dostanete nasleduj\u00face chybov\u00e9 hl\u00e1senia, znamen\u00e1 to, \u017ee m\u00e1te star\u0161iu verziu PostgreSQL a ve\u013emi n\u00edzku hodnotu SHMMAX. O\u010dak\u00e1va sa, \u017ee pou\u017e\u00edvatelia urobia \u00fapravy a zv\u00fd\u0161ia hodnotu pod\u013ea zdie\u013eanej pam\u00e4te, ktor\u00fa pl\u00e1nuj\u00fa pou\u017ei\u0165.<\/p>\n<h3>Mo\u017en\u00e9 chyby nespr\u00e1vnej konfigur\u00e1cie<\/h3>\n<p>\nAk je SHMMAX nastaven\u00fd nespr\u00e1vne, m\u00f4\u017ee sa zobrazi\u0165 chyba pri pokuse o inicializ\u00e1ciu klastrov PostgreSQL pomocou pr\u00edkazu <i>initdb<\/i>.<\/p>\n<p><b>initdb Zlyhanie<\/b><br \/>\n<code>DETAIL: Zlyhan\u00fd syst\u00e9mov\u00fd hovor bol shmget(key=1, size=2072576, 03600). <\/p>\n<p>HINT: T\u00e1to chyba zvy\u010dajne znamen\u00e1, \u017ee po\u017eiadavka PostgreSQL na zdie\u013ean\u00fd pam\u00e4\u0165ov\u00fd segment prekro\u010dila SHMMAX parameter v\u00e1\u0161ho jadra.\u00a0 <br \/>\nM\u00f4\u017eete bu\u010f zmen\u0161i\u0165 ve\u013ekos\u0165 po\u017eiadavky, alebo prekonfigurova\u0165 jadro s v\u00e4\u010d\u0161\u00edm SHMMAX. Ak chcete zmen\u0161i\u0165 ve\u013ekos\u0165 po\u017eiadavky (aktu\u00e1lne 2072576 bajtov), <br \/>\nzn\u00ed\u017ete zdie\u013ean\u00e9 pou\u017e\u00edvanie pam\u00e4te PostgreSQL, mo\u017eno zn\u00ed\u017een\u00edm shared_buffers alebo max_connections. <\/p>\n<p>Ak je ve\u013ekos\u0165 po\u017eiadavky u\u017e mal\u00e1, je mo\u017en\u00e9, \u017ee je men\u0161ia ako parameter SHMMIN vo va\u0161om jadre,<br \/>\nv takom pr\u00edpade je potrebn\u00e9 zv\u00fd\u0161i\u0165 ve\u013ekos\u0165 po\u017eiadavky alebo prekonfigurova\u0165 SHMMIN. <\/p>\n<p>Dokument\u00e1cia PostgreSQL obsahuje viac inform\u00e1ci\u00ed o konfigur\u00e1cii zdie\u013eanej pam\u00e4te. Detsk\u00fd proces vy\u0161iel s k\u00f3dom ukon\u010denia 1<\/code><\/p>\n<p>Podobne m\u00f4\u017eete z\u00edska\u0165 chybu pri spusten\u00ed servera PostgreSQL pomocou pr\u00edkazu <i>pg_ctl<\/i>.<\/p>\n<p><b>pg_ctl Zlyhanie<\/b><br \/>\n<code>DETAIL: Zlyhan\u00fd syst\u00e9mov\u00fd hovor bol shmget(k\u013e\u00fa\u010d=5432001, ve\u013ekos\u0165=14385152, 03600).<\/p>\n<p>HINT: T\u00e1to chyba zvy\u010dajne znamen\u00e1, \u017ee po\u017eiadavka PostgreSQL na zdie\u013ean\u00fd pam\u00e4\u0165ov\u00fd segment prekro\u010dila SHMMAX parameter v\u00e1\u0161ho jadra.<\/p>\n<p>M\u00f4\u017eete bu\u010f zmen\u0161i\u0165 ve\u013ekos\u0165 po\u017eiadavky, alebo prekonfigurova\u0165 jadro s v\u00e4\u010d\u0161\u00edm SHMMAX.; Ak chcete zmen\u0161i\u0165 ve\u013ekos\u0165 po\u017eiadavky (aktu\u00e1lne 14385152 bajtov), zn\u00ed\u017ete zdie\u013ean\u00e9 pou\u017e\u00edvanie pam\u00e4te PostgreSQL, mo\u017eno zn\u00ed\u017een\u00edm shared_buffers alebo max_connections.<\/p>\n<p>Ak je ve\u013ekos\u0165 po\u017eiadavky u\u017e mal\u00e1, je mo\u017en\u00e9, \u017ee je men\u0161ia ako parameter SHMMIN vo va\u0161om jadre, <br \/>\nv takom pr\u00edpade je potrebn\u00e9 zv\u00fd\u0161i\u0165 ve\u013ekos\u0165 po\u017eiadavky alebo prekonfigurova\u0165 SHMMIN.<\/p>\n<p>Dokument\u00e1cia PostgreSQL obsahuje viac inform\u00e1ci\u00ed o konfigur\u00e1cii zdie\u013eanej pam\u00e4te.<\/code><\/p>\n<h3>Porozumenie rozdielom v defin\u00edci\u00e1ch<\/h3>\n<p>\nDefin\u00edcia parametrov SHMMAX\/SHMALL sa trochu l\u00ed\u0161i v Linuxe a MacOS X:<\/p>\n<ul>\n<li>Linux: kernel.shmmax, kernel.shmall<\/li>\n<li>MacOS X: kern.sysv.shmmax, kern.sysv.shmall<\/li>\n<\/ul>\n<p>\nT\u00edm <i>sysctl<\/i> m\u00f4\u017ee by\u0165 pou\u017eit\u00e1 na do\u010dasn\u00e9 zmenenie hodnoty. Ak chcete nastavi\u0165 trval\u00e9 hodnoty, pridajte z\u00e1znam do <i>\/etc\/sysctl.conf<\/i>. Podrobnosti s\u00fa uveden\u00e9 ni\u017e\u0161ie.<\/p>\n<p><b>Zmena parametrov jadra na MacOS X<\/b><\/p>\n<pre><code class=\"plaintext\"># Get the value of SHMMAX\nsudo sysctl kern.sysv.shmmax\nkern.sysv.shmmax: 4096\n\n# Get the value of SHMALL\nsudo sysctl kern.sysv.shmall \nkern.sysv.shmall: 4096\n\n# Set the value of SHMMAX\nsudo sysctl -w kern.sysv.shmmax=16777216\nkern.sysv.shmmax: 4096 -&gt; 16777216\n\n# Set the value of SHMALL \nsudo sysctl -w kern.sysv.shmall=16777216\nkern.sysv.shmall: 4096 -&gt; 16777216<\/code><\/pre>\n<p>\n<b>Zmena parametrov jadra na Linuxe<\/b><\/p>\n<pre><code class=\"plaintext\"># Get the value of SHMMAX\nsudo sysctl kernel.shmmax\nkernel.shmmax: 4096\n\n# Get the value of SHMALL\nsudo sysctl kernel.shmall\nkernel.shmall: 4096\n\n# Set the value of SHMMAX\nsudo sysctl -w kernel.shmmax=16777216\nkernel.shmmax: 4096 -&gt; 16777216\n\n# Set the value of SHMALL \nsudo sysctl -w kernel.shmall=16777216\nkernel.shmall: 4096 -&gt; 16777216<\/code><\/pre>\n<p>\n<b>Nezabudnite<\/b>: aby ste urobili zmeny trval\u00fdmi, pridajte tieto hodnoty do \/etc\/sysctl.conf<\/p>\n<h2>Ve\u013ek\u00e9 str\u00e1nky (Huge Pages)<\/h2>\n<p>\nV Linuxe sa \u0161tandardne pou\u017e\u00edvaj\u00fa str\u00e1nky pam\u00e4te 4 KB, v BSD \u2014 <i>Super Pages<\/i>, a vo Windows \u2014 <i>Large Pages<\/i>. Str\u00e1nka je \u010das\u0165 opera\u010dnej pam\u00e4te pridelen\u00e1 procesu. Proces m\u00f4\u017ee ma\u0165 nieko\u013eko str\u00e1nok v z\u00e1vislosti od po\u017eiadaviek na pam\u00e4\u0165. \u010c\u00edm viac pam\u00e4te proces potrebuje, t\u00fdm viac str\u00e1nok je mu pridelen\u00fdch. OS podporuje tabu\u013eku pridelovania str\u00e1nok pre procesy. \u010c\u00edm men\u0161ia je ve\u013ekos\u0165 str\u00e1nky, t\u00fdm v\u00e4\u010d\u0161ia je tabu\u013eka, t\u00fdm viac \u010dasu je potrebn\u00e9 na vyh\u013eadanie str\u00e1nky v tejto tabu\u013eke str\u00e1nok. Preto ve\u013ek\u00e9 str\u00e1nky umo\u017e\u0148uj\u00fa pou\u017e\u00edva\u0165 ve\u013ek\u00fd objem pam\u00e4te s men\u0161\u00edmi n\u00e1kladmi; menej zobrazen\u00ed str\u00e1nok, menej ch\u00fdb str\u00e1nok, r\u00fdchlej\u0161ie oper\u00e1cie \u010d\u00edtania\/z\u00e1pisu cez ve\u013ek\u00e9 buffery. V\u00fdsledkom je zlep\u0161enie v\u00fdkonu.<\/p>\n<p>PostgreSQL podporuje ve\u013ek\u00e9 str\u00e1nky len v Linuxe. Predvolene Linux pou\u017e\u00edva 4 KB str\u00e1nky pam\u00e4te, preto v pr\u00edpadoch, ke\u010f je oper\u00e1ci\u00ed s pam\u00e4\u0165ou pr\u00edli\u0161 ve\u013ea, je potrebn\u00e9 nastavi\u0165 str\u00e1nky v\u00e4\u010d\u0161ej ve\u013ekosti. Pozoruje sa zlep\u0161enie v\u00fdkonu pri pou\u017eit\u00ed ve\u013ek\u00fdch str\u00e1nok s ve\u013ekos\u0165ou 2 MB a a\u017e do 1 GB. Ve\u013ekos\u0165 ve\u013ekej str\u00e1nky m\u00f4\u017ee by\u0165 nastaven\u00e1 pri spusten\u00ed. M\u00f4\u017eete \u013eahko skontrolova\u0165 parametre ve\u013ekej str\u00e1nky a ich vyu\u017eitie na va\u0161om Linux po\u010d\u00edta\u010di pomocou pr\u00edkazu <i>cat \/proc\/meminfo | grep -i huge<\/i>.<\/p>\n<p><b>Z\u00edskanie inform\u00e1ci\u00ed o ve\u013ek\u00fdch str\u00e1nkach (len na Linuxe)<\/b><\/p>\n<pre><code class=\"bash\">Pozn\u00e1mka: Toto plat\u00ed len pre Linux, pre in\u00e9 opera\u010dn\u00e9 syst\u00e9my je t\u00e1to oper\u00e1cia ignorovan\u00e1\n$ cat \/proc\/meminfo | grep -i huge\nAnonHugePages:         0 kB\nShmemHugePages:        0 kB\nHugePages_Total:       0\nHugePages_Free:        0\nHugePages_Rsvd:       0\nHugePages_Surp:       0\nHugepagesize:       2048 kB<\/code><\/pre>\n<p>\nV tomto pr\u00edklade, hoci je ve\u013ekos\u0165 ve\u013ekej str\u00e1nky nastaven\u00e1 na 2048 (2 MB), celkov\u00fd po\u010det ve\u013ek\u00fdch str\u00e1nok m\u00e1 hodnotu 0. To znamen\u00e1, \u017ee ve\u013ek\u00e9 str\u00e1nky s\u00fa vypnut\u00e9.<\/p>\n<h3>Skript na zistenie po\u010dtu ve\u013ek\u00fdch str\u00e1nok<\/h3>\n<p>\nToto je jednoduch\u00fd skript, ktor\u00fd vr\u00e1ti po\u017eadovan\u00fd po\u010det ve\u013ek\u00fdch str\u00e1nok. Spustite skript na va\u0161om Linux serveri, k\u00fdm be\u017e\u00ed PostgreSQL. Uistite sa, \u017ee pre premenn\u00fa prostredia <i>$PGDATA<\/i> je nastaven\u00fd adres\u00e1r d\u00e1t PostgreSQL.<\/p>\n<p><b>Z\u00edskanie po\u010dtu po\u017eadovan\u00fdch ve\u013ek\u00fdch str\u00e1nok<\/b><\/p>\n<pre><code class=\"bash\">#!\/bin\/bash\npid=`head -1 $PGDATA\/postmaster.pid`\necho \"Pid:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $pid\"\npeak=`grep ^VmPeak \/proc\/$pid\/status | awk '{ print $2 }'`\necho \"VmPeak:\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $peak kB\"\nhps=`grep ^Hugepagesize \/proc\/meminfo | awk '{ print $2 }'`\necho \"Hugepagesize:\u00a0\u00a0 $hps kB\"\nhp=$((peak\/hps))\necho Set Huge Pages:\u00a0\u00a0\u00a0\u00a0 $hp<\/code><\/pre>\n<p>\nV\u00fdstup zo skriptu vyzer\u00e1 takto:<\/p>\n<p><b>V\u00fdstup zo skriptu<\/b><\/p>\n<pre><code class=\"bash\">Pid:            12737\nVmPeak:         180932 kB\nHugepagesize:   2048 kB\nSet Huge Pages: 88<\/code><\/pre>\n<p>\nOdpor\u00fa\u010dan\u00e1 hodnota ve\u013ek\u00fdch str\u00e1nok je 88, preto by ste mali nastavi\u0165 hodnotu 88.<\/p>\n<p><b>Nastavenie ve\u013ek\u00fdch str\u00e1nok<\/b><\/p>\n<pre><code class=\"bash\">sysctl -w vm.nr_hugepages=88<\/code><\/pre>\n<p>\nSkontrolujte ve\u013ek\u00e9 str\u00e1nky teraz, uvid\u00edte, \u017ee ve\u013ek\u00e9 str\u00e1nky nie s\u00fa pou\u017e\u00edvan\u00e9 (HugePages_Free = HugePages_Total).<\/p>\n<p><b>Znovu inform\u00e1cie o ve\u013ek\u00fdch str\u00e1nkach (len na Linuxe)<\/b><\/p>\n<pre><code class=\"bash\">$ cat \/proc\/meminfo | grep -i huge\nAnonHugePages:         0 kB\nShmemHugePages:        0 kB\nHugePages_Total:      88\nHugePages_Free:       88\nHugePages_Rsvd:       0\nHugePages_Surp:       0\nHugepagesize:       2048 kB<\/code><\/pre>\n<p>\nTeraz nastavte parameter huge_pages \"on\" v $PGDATA\/postgresql.conf a re\u0161tartujte server.<\/p>\n<p><b>A znovu inform\u00e1cie o ve\u013ek\u00fdch str\u00e1nkach (len na Linuxe)<\/b><\/p>\n<pre><code class=\"bash\">$ cat \/proc\/meminfo | grep -i huge\nAnonHugePages:         0 kB\nShmemHugePages:        0 kB\nHugePages_Total:      88\nHugePages_Free:       81\nHugePages_Rsvd:       64\nHugePages_Surp:       0\nHugepagesize:       2048 kB<\/code><\/pre>\n<p>\nTeraz m\u00f4\u017eete vidie\u0165, \u017ee je pou\u017e\u00edvan\u00e9 ve\u013emi m\u00e1lo ve\u013ek\u00fdch str\u00e1nok. Sk\u00fasme teraz prida\u0165 nejak\u00e9 d\u00e1ta do datab\u00e1zy.<\/p>\n<p><b>Niektor\u00e9 oper\u00e1cie s datab\u00e1zou pre likvid\u00e1ciu ve\u013ek\u00fdch str\u00e1nok<\/b><\/p>\n<pre><code class=\"sql\">postgres=# CREATE TABLE foo(a INTEGER);\nCREATE TABLE\npostgres=# INSERT INTO foo VALUES(generate_Series(1,10000000));\nINSERT 0 10000000<\/code><\/pre>\n<p>\nPozrime sa, \u010di aktu\u00e1lne pou\u017e\u00edvame viac ve\u013ek\u00fdch str\u00e1nok ako predt\u00fdm.<\/p>\n<p><b>Op\u00e4\u0165 inform\u00e1cie o ve\u013ek\u00fdch str\u00e1nkach (len na Linuxe)<\/b><\/p>\n<pre><code class=\"bash\">$ cat \/proc\/meminfo | grep -i huge\nAnonHugePages:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 kB\nShmemHugePages:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 kB\nHugePages_Total:\u00a0\u00a0\u00a0\u00a0\u00a0 88\nHugePages_Free:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 18\nHugePages_Rsvd:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\nHugePages_Surp:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\nHugepagesize:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2048 kB<\/code><\/pre>\n<p>\nTeraz m\u00f4\u017eete vidie\u0165, \u017ee v\u00e4\u010d\u0161ina ve\u013ek\u00fdch str\u00e1nok je vyu\u017e\u00edvan\u00e1.<\/p>\n<p>Pozn\u00e1mka: Priemern\u00e1 hodnota pre HugePages, ktor\u00e1 sa tu pou\u017e\u00edva, je ve\u013emi n\u00edzka, \u010do nie je norm\u00e1lna hodnota pre stroj v produk\u010dnom prostred\u00ed. Pros\u00edm, zhodno\u0165te potrebn\u00fd po\u010det str\u00e1nok pre v\u00e1\u0161 syst\u00e9m a nastavte ich pod\u013ea za\u0165a\u017eenia a zdrojov.<\/p>\n<h3>vm.swappiness<\/h3>\n<p>\n<b>vm.swappiness<\/b> \u2014 je \u010fal\u0161\u00ed parameter jadra, ktor\u00fd m\u00f4\u017ee ovplyvni\u0165 v\u00fdkon datab\u00e1zy. Tento parameter sa pou\u017e\u00edva na riadenie spr\u00e1vania swapovania (swappiness) (paging str\u00e1nok do pam\u00e4te a von z nej) v Linuxe. Hodnota sa pohybuje od 0 do 100. Ur\u010duje, ko\u013eko pam\u00e4te sa vypr\u00e1zdni alebo oslobod\u00ed. Nula znamen\u00e1 vypnut\u00e9 swapovanie, zatia\u013e \u010do 100 znamen\u00e1 agres\u00edvne swapovanie.<\/p>\n<p>M\u00f4\u017eete dosiahnu\u0165 dobr\u00fd v\u00fdkon nastaven\u00edm ni\u017e\u0161\u00edch hodn\u00f4t.<\/p>\n<p>Nastavenie hodnoty 0 v nov\u0161\u00edch jadr\u00e1ch m\u00f4\u017ee sp\u00f4sobi\u0165, \u017ee OOM Killer (proces \u010distenia pam\u00e4te v Linuxe) zabije proces. Preto je bezpe\u010dn\u00e9 nastavi\u0165 hodnotu 1, ak chcete minimalizova\u0165 swapovanie. Predvolen\u00e9 nastavenie v Linuxe je 60. Vy\u0161\u0161ia hodnota sp\u00f4sobuje, \u017ee MMU (jednotka spr\u00e1vy pam\u00e4te) pou\u017e\u00edva viac miesta na swapovanie ako RAM, zatia\u013e \u010do ni\u017e\u0161ia hodnota udr\u017euje viac \u00fadajov\/k\u00f3du v pam\u00e4ti.<\/p>\n<p>Ni\u017e\u0161ia hodnota je dobr\u00e1 st\u00e1vka na zlep\u0161enie v\u00fdkonu v PostgreSQL.<\/p>\n<h3>vm.overcommit_memory \/ vm.overcommit_ratio<\/h3>\n<p>\nAplik\u00e1cie z\u00edskavaj\u00fa pam\u00e4\u0165 a oslobodzuj\u00fa ju, ke\u010f ju u\u017e nepotrebuj\u00fa. V niektor\u00fdch pr\u00edpadoch v\u0161ak aplik\u00e1cia z\u00edska pr\u00edli\u0161 ve\u013ea pam\u00e4te a neoslobod\u00ed ju. To m\u00f4\u017ee vyvola\u0165 OOM killer. Tu s\u00fa mo\u017en\u00e9 hodnoty parametra <b>vm.overcommit_memory<\/b> s popisom pre ka\u017ed\u00fa:<\/p>\n<ol>\n<li> Heuristick\u00fd overcommit (predvolen\u00e9); zalo\u017een\u00e9 na jadre heuristika<\/li>\n<li> Povoli\u0165 overcommit za ka\u017ed\u00fdch okolnost\u00ed<\/li>\n<li> Nepre\u0165a\u017eujte, neprekra\u010dujte overcommit pomer.<\/li>\n<\/ol>\n<p>\n<i>Odkaz: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.kernel.org\/doc\/Documentation\/vm\/overcommit-accounting\">https:\/\/www.kernel.org\/doc\/Documentation\/vm\/overcommit-accounting<\/a><\/noindex><\/i><\/p>\n<p><b>vm.overcommit_ratio<\/b> \u2014 percent of RAM available for overcommitment. A value of 50% on a system with 2 GB of RAM can allocate up to 3 GB of RAM.<\/p>\n<p>A value of 2 for vm.overcommit_memory ensures better performance for PostgreSQL. This value maximizes the use of RAM by the server process without significant risk of being terminated by the OOM killer. The application can restart, but only within the overcommit limits, reducing the risk of the OOM killer terminating the process. Therefore, a value of 2 provides better performance than the default value of 0. However, reliability can be improved by preventing memory from exceeding the allowed limits, thereby eliminating the risk of the process being killed by the OOM killer.<\/p>\n<p>In systems without swap, there may be an issue with vm.overcommit_memory set to 2.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/static\/kernel-resources.html#LINUX-MEMORY-OVERCOMMIT\">https:\/\/www.postgresql.org\/docs\/current\/static\/kernel-resources.html#LINUX-MEMORY-OVERCOMMIT<\/a><\/noindex><\/p>\n<h3>vm.dirty_background_ratio \/ vm.dirty_background_bytes<\/h3>\n<p>\n<b>vm.dirty_background_ratio<\/b> \u2014 this is the percentage of memory filled with dirty pages that need to be written to disk. The flushing to disk is done in the background. The value of this parameter ranges from 0 to 100; however, a value below 5 may be ineffective and some kernels do not support it. 10 is the default value in most Linux systems. You can enhance performance for write-intensive operations with a lower ratio, which will mean that Linux flushes dirty pages in the background.<\/p>\n<p>You need to set the value of <b>vm.dirty_background_bytes<\/b> depending on your disk speed.<\/p>\n<p>There are no 'good' values for these two parameters, as both depend on the hardware. However, setting vm.dirty_background_ratio to 5 and vm.dirty_background_bytes to 25% of disk speed improves performance by ~25% in most cases.<\/p>\n<h3>vm.dirty_ratio \/ dirty_bytes<\/h3>\n<p>\nThis is the same as <b>vm.dirty_background_ratio \/ dirty_background_bytes<\/b>, except that the flushing occurs during the active session, blocking the application. Therefore, vm.dirty_ratio must be higher than <b>vm.dirty_background_ratio<\/b>. This ensures that background processes will start earlier to avoid maximum blocking of the application. You can adjust the difference between these two ratios depending on I\/O load.<\/p>\n<h2>Z\u00e1ver<\/h2>\n<p>\nM\u00f4\u017eete nastavi\u0165 \u010fal\u0161ie parametre na zv\u00fd\u0161enie v\u00fdkonu, ale zlep\u0161enia bud\u00fa minim\u00e1lne a nebudete ma\u0165 \u017eiadne v\u00fdznamn\u00e9 v\u00fdhody. Mus\u00edme ma\u0165 na pam\u00e4ti, \u017ee nie v\u0161etky parametre sa vz\u0165ahuj\u00fa na v\u0161etky typy aplik\u00e1ci\u00ed. Niektor\u00e9 aplik\u00e1cie funguj\u00fa lep\u0161ie pri nastavovan\u00ed ur\u010dit\u00fdch parametrov, zatia\u013e \u010do in\u00e9 nie. Mus\u00edte n\u00e1js\u0165 spr\u00e1vnu rovnov\u00e1hu medzi konfigur\u00e1ciami t\u00fdchto parametrov pre o\u010dak\u00e1van\u00e9 pracovn\u00e9 za\u0165a\u017eenie a typ aplik\u00e1cie, pri\u010dom je tie\u017e potrebn\u00e9 zoh\u013eadni\u0165 spr\u00e1vanie opera\u010dn\u00e9ho syst\u00e9mu. Nastavi\u0165 parametre jadra nie je tak\u00e9 jednoduch\u00e9 ako nastavi\u0165 parametre datab\u00e1zy: tu je \u0165a\u017e\u0161ie poskytn\u00fa\u0165 vlastn\u00e9 odpor\u00fa\u010dania.<br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458860\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c PostgreSQL \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041f\u043b\u043e\u0445\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0434\u0440\u0430 \u041e\u0421 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u044b\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0434\u0440\u0430 Linux, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26870,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35920","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.5 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.\" \/>\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\/sk\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u044f\u0434\u0440\u0430 Linux \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 PostgreSQL | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:07:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:07:35+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\udd47Nastavenie parametrov jadra Linux na optimaliz\u00e1ciu PostgreSQL | ProHoster","description":"Optim\u00e1lny v\u00fdkon.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u044f\u0434\u0440\u0430 Linux \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 PostgreSQL | ProHoster","og:description":"\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.","og:url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:07:35+00:00","article:modified_time":"2019-10-31T19:07:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35920","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 01:17:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:53:32","updated":"2026-01-22 01:17:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/35920","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=35920"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/35920\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/26870"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=35920"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=35920"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=35920"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}