{"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\/cs\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql","title":{"rendered":"Nastaven\u00ed parametr\u016f j\u00e1dra Linuxu pro optimalizaci PostgreSQL","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Nastaven\u00ed parametr\u016f j\u00e1dra Linuxu pro optimalizaci PostgreSQL\" src=\"\/wp-content\/uploads\/2019\/07\/a28458ff50cdc517aad71b47adab6eb3.jpeg\" style=\"display:block;margin: 0 auto;\" \/> Optim\u00e1ln\u00ed v\u00fdkon PostgreSQL z\u00e1vis\u00ed na spr\u00e1vn\u011b nastaven\u00fdch parametrech opera\u010dn\u00edho syst\u00e9mu. \u0160patn\u011b nastaven\u00e9 parametry j\u00e1dra OS mohou v\u00e9st ke sn\u00ed\u017een\u00ed v\u00fdkonu datab\u00e1zov\u00e9ho serveru. Je tedy nezbytn\u00e9, aby byly tyto parametry nakonfigurov\u00e1ny v souladu s datab\u00e1zov\u00fdm serverem a jeho pracovn\u00edm zat\u00ed\u017een\u00edm. V tomto \u010dl\u00e1nku se budeme zab\u00fdvat n\u011bkter\u00fdmi d\u016fle\u017eit\u00fdmi parametry j\u00e1dra Linux, kter\u00e9 mohou ovlivnit v\u00fdkon datab\u00e1zov\u00e9ho serveru, a zp\u016fsoby jejich nastaven\u00ed.<\/p>\n<h2>SHMMAX \/ SHMALL<\/h2>\n<p>\n<b>SHMMAX<\/b> \u2014 je to parametr j\u00e1dra, kter\u00fd se pou\u017e\u00edv\u00e1 pro ur\u010den\u00ed maxim\u00e1ln\u00ed velikosti jednoho segmentu sd\u00edlen\u00e9 pam\u011bti (shared memory), kter\u00fd m\u016f\u017ee alokovat proces Linuxu. Do verze 9.2 PostgreSQL pou\u017e\u00edval System V (SysV), kter\u00fd vy\u017eadoval nastaven\u00ed SHMMAX. Po verzi 9.2 PostgreSQL p\u0159e\u0161lo na sd\u00edlenou pam\u011b\u0165 POSIX. Tak\u017ee nyn\u00ed je pot\u0159eba m\u00e9n\u011b bajt\u016f sd\u00edlen\u00e9 pam\u011bti System V.<\/p>\n<p>Do verze 9.3 byl SHMMAX nejd\u016fle\u017eit\u011bj\u0161\u00edm parametrem j\u00e1dra. Hodnota SHMMAX se nastavuje v bajtech.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nPodobn\u011b, <b>SHMALL<\/b> \u2014 je to dal\u0161\u00ed parametr j\u00e1dra, kter\u00fd se pou\u017e\u00edv\u00e1 pro ur\u010den\u00ed <br \/>\ncelkov\u00e9ho objemu str\u00e1nek sd\u00edlen\u00e9 pam\u011bti (shared memory). Chcete-li zobrazit aktu\u00e1ln\u00ed hodnoty SHMMAX, SHMALL nebo SHMMIN, pou\u017eijte p\u0159\u00edkaz <i>ipcs<\/i>.<\/p>\n<p><b>SHM* Detaily \u2014 Linux<\/b><\/p>\n<pre><code class=\"bash\">$ ipcs -lm\n\n------ Limity sd\u00edlen\u00e9 pam\u011bti --------\nmax po\u010det segment\u016f = 4096\nmax velikost seg (kilo-bajty) = 1073741824\nmax celkov\u00e1 sd\u00edlen\u00e1 pam\u011b\u0165 (kilo-bajty) = 17179869184\nmin velikost 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 z  jako Thu Aug 16 22:20:35 PKT 2018\nshminfo:\n\tshmmax: 16777216\t(maxim\u00e1ln\u00ed velikost segmentu sd\u00edlen\u00e9 pam\u011bti)\n\tshmmin:       1\t(minim\u00e1ln\u00ed velikost segmentu sd\u00edlen\u00e9 pam\u011bti)\n\tshmmni:      32\t(maxim\u00e1ln\u00ed po\u010det identifik\u00e1tor\u016f sd\u00edlen\u00e9 pam\u011bti)\n\tshmseg:       8\t(maxim\u00e1ln\u00ed po\u010det segment\u016f sd\u00edlen\u00e9 pam\u011bti na proces)\n\tshmall:    1024\t(maxim\u00e1ln\u00ed mno\u017estv\u00ed sd\u00edlen\u00e9 pam\u011bti ve str\u00e1nk\u00e1ch)\n<\/code><\/pre>\n<p>\nPostgreSQL pou\u017e\u00edv\u00e1 <b>System V IPC<\/b> pro alokaci sd\u00edlen\u00e9 pam\u011bti. Tento parametr je jedn\u00edm z nejd\u016fle\u017eit\u011bj\u0161\u00edch parametr\u016f j\u00e1dra. Kdykoli obdr\u017e\u00edte n\u00e1sleduj\u00edc\u00ed chybov\u00e9 zpr\u00e1vy, znamen\u00e1 to, \u017ee m\u00e1te star\u0161\u00ed verzi PostgreSQL a m\u00e1te velmi n\u00edzkou hodnotu SHMMAX. O\u010dek\u00e1v\u00e1 se, \u017ee u\u017eivatel\u00e9 uprav\u00ed a zv\u00fd\u0161\u00ed hodnotu v souladu se sd\u00edlenou pam\u011bt\u00ed, kterou pl\u00e1nuj\u00ed pou\u017e\u00edt.<\/p>\n<h3>Mo\u017en\u00e9 chyby nespr\u00e1vn\u00e9 konfigurace<\/h3>\n<p>\nPokud je SHMMAX nastaven nespr\u00e1vn\u011b, m\u016f\u017ee se objevit chyba p\u0159i pokusu o inicializaci klastru PostgreSQL pomoc\u00ed p\u0159\u00edkazu <i>initdb<\/i>.<\/p>\n<p><b>initdb Ne\u00fasp\u011bch<\/b><br \/>\n<code>DETAIL: Ne\u00fasp\u011b\u0161n\u00fd syst\u00e9mov\u00fd vol\u00e1n\u00ed bylo shmget(key=1, size=2072576, 03600). <\/p>\n<p>HINT: Tato chyba obvykle znamen\u00e1, \u017ee \u017e\u00e1dost PostgreSQL o segment sd\u00edlen\u00e9 pam\u011bti p\u0159ekro\u010dila parametr SHMMAX va\u0161eho j\u00e1dra.\u00a0 <br \/>\nM\u016f\u017eete bu\u010f sn\u00ed\u017eit velikost po\u017eadavku, nebo p\u0159ekonfigurovat j\u00e1dro na v\u011bt\u0161\u00ed SHMMAX. Pro sn\u00ed\u017een\u00ed velikosti po\u017eadavku (aktu\u00e1ln\u011b 2072576 bajt\u016f), <br \/>\nsni\u017ete pou\u017eit\u00ed sd\u00edlen\u00e9 pam\u011bti PostgreSQL, nap\u0159\u00edklad sn\u00ed\u017een\u00edm shared_buffers nebo max_connections. <\/p>\n<p>Pokud je velikost po\u017eadavku ji\u017e mal\u00e1, je mo\u017en\u00e9, \u017ee je men\u0161\u00ed ne\u017e parametr SHMMIN va\u0161eho j\u00e1dra,<br \/>\nv takov\u00e9m p\u0159\u00edpad\u011b je nutn\u00e9 zv\u00fd\u0161it velikost po\u017eadavku nebo p\u0159ekonfigurovat SHMMIN. <\/p>\n<p>Dokumentace PostgreSQL obsahuje v\u00edce informac\u00ed o konfiguraci sd\u00edlen\u00e9 pam\u011bti. D\u011btsk\u00fd proces skon\u010dil s chybov\u00fdm k\u00f3dem 1.<\/code><\/p>\n<p>Podobn\u011b m\u016f\u017eete z\u00edskat chybu p\u0159i spu\u0161t\u011bn\u00ed serveru PostgreSQL pomoc\u00ed p\u0159\u00edkazu <i>pg_ctl<\/i>.<\/p>\n<p><b>pg_ctl Chyba<\/b><br \/>\n<code>DETAIL: Nepoda\u0159il se syst\u00e9mov\u00fd hovor shmget(key=5432001, size=14385152, 03600).<\/p>\n<p>HINT: Tato chyba obvykle znamen\u00e1, \u017ee \u017e\u00e1dost PostgreSQL o segment sd\u00edlen\u00e9 pam\u011bti p\u0159ekro\u010dila parametr SHMMAX va\u0161eho j\u00e1dra.<\/p>\n<p>M\u016f\u017eete bu\u010f sn\u00ed\u017eit velikost po\u017eadavku, nebo p\u0159ekonfigurovat j\u00e1dro na v\u011bt\u0161\u00ed SHMMAX.; Pro sn\u00ed\u017een\u00ed velikosti po\u017eadavku (aktu\u00e1ln\u011b 14385152 bajt\u016f) sni\u017ete pou\u017eit\u00ed sd\u00edlen\u00e9 pam\u011bti PostgreSQL, nap\u0159\u00edklad sn\u00ed\u017een\u00edm shared_buffers nebo max_connections.<\/p>\n<p>Pokud je velikost po\u017eadavku ji\u017e mal\u00e1, je mo\u017en\u00e9, \u017ee je men\u0161\u00ed ne\u017e parametr SHMMIN va\u0161eho j\u00e1dra, <br \/>\nv takov\u00e9m p\u0159\u00edpad\u011b je nutn\u00e9 zv\u00fd\u0161it velikost po\u017eadavku nebo p\u0159ekonfigurovat SHMMIN.<\/p>\n<p>Dokumentace PostgreSQL obsahuje v\u00edce informac\u00ed o konfiguraci sd\u00edlen\u00e9 pam\u011bti.<\/code><\/p>\n<h3>Ch\u00e1p\u00e1n\u00ed rozd\u00edl\u016f v definic\u00edch<\/h3>\n<p>\nDefinice parametr\u016f SHMMAX\/SHMALL se m\u00edrn\u011b li\u0161\u00ed v Linuxu 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\u00fdm <i>sysctl<\/i> m\u016f\u017ee b\u00fdt pou\u017eita pro do\u010dasnou zm\u011bnu hodnoty. Pro nastaven\u00ed trval\u00fdch hodnot p\u0159idejte z\u00e1pis do <i>\/etc\/sysctl.conf<\/i>. Podrobnosti jsou uvedeny n\u00ed\u017ee.<\/p>\n<p><b>Zm\u011bna parametr\u016f j\u00e1dra 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>Zm\u011bna parametr\u016f j\u00e1dra na Linuxu<\/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>Nezapome\u0148te<\/b>: aby zm\u011bny byly trval\u00e9, p\u0159idejte tyto hodnoty do \/etc\/sysctl.conf<\/p>\n<h2>Velk\u00e9 str\u00e1nky (Huge Pages)<\/h2>\n<p>\nVe v\u00fdchoz\u00edm nastaven\u00ed Linux pou\u017e\u00edv\u00e1 4 KB pam\u011b\u0165ov\u00e9 str\u00e1nky, v BSD \u2014 <i>Super Pages<\/i>, a ve Windows \u2014 <i>Large Pages<\/i>. Str\u00e1nka je \u010d\u00e1st opera\u010dn\u00ed pam\u011bti p\u0159id\u011blen\u00e1 procesu. Proces m\u016f\u017ee m\u00edt n\u011bkolik str\u00e1nek v z\u00e1vislosti na po\u017eadavc\u00edch na pam\u011b\u0165. \u010c\u00edm v\u00edce pam\u011bti proces pot\u0159ebuje, t\u00edm v\u00edce str\u00e1nek mu je p\u0159id\u011bleno. OS podporuje tabulku p\u0159id\u011blov\u00e1n\u00ed str\u00e1nek pro procesy. \u010c\u00edm men\u0161\u00ed je velikost str\u00e1nky, t\u00edm v\u011bt\u0161\u00ed je tabulka, t\u00edm v\u00edce \u010dasu je pot\u0159eba pro vyhled\u00e1v\u00e1n\u00ed str\u00e1nky v t\u00e9to tabulce str\u00e1nek. Proto velk\u00e9 str\u00e1nky umo\u017e\u0148uj\u00ed vyu\u017e\u00edvat velk\u00e9 objemy pam\u011bti s ni\u017e\u0161\u00edmi n\u00e1klady; m\u00e9n\u011b prohl\u00ed\u017een\u00fdch str\u00e1nek, m\u00e9n\u011b chyb str\u00e1nek, rychlej\u0161\u00ed operace \u010dten\u00ed\/z\u00e1pisu prost\u0159ednictv\u00edm v\u011bt\u0161\u00edch vyrovn\u00e1vac\u00edch pam\u011bt\u00ed. Jako v\u00fdsledek \u2014 zlep\u0161en\u00ed v\u00fdkonu.<\/p>\n<p>PostgreSQL podporuje velk\u00e9 str\u00e1nky pouze na Linuxu. Ve v\u00fdchoz\u00edm nastaven\u00ed Linux pou\u017e\u00edv\u00e1 str\u00e1nky s velikost\u00ed 4 KB, tak\u017ee v p\u0159\u00edpadech, kdy je operac\u00ed s pam\u011bt\u00ed p\u0159\u00edli\u0161 mnoho, je nutn\u00e9 nastavit v\u011bt\u0161\u00ed velikosti str\u00e1nek. Doch\u00e1z\u00ed k n\u00e1r\u016fstu v\u00fdkonu p\u0159i vyu\u017eit\u00ed velk\u00fdch str\u00e1nek o velikosti 2 MB a a\u017e 1 GB. Velikost velk\u00e9 str\u00e1nky m\u016f\u017ee b\u00fdt nastavena p\u0159i spu\u0161t\u011bn\u00ed. M\u016f\u017eete snadno zkontrolovat parametry velk\u00fdch str\u00e1nek a jejich vyu\u017eit\u00ed ve sv\u00e9m Linuxov\u00e9m po\u010d\u00edta\u010di pomoc\u00ed p\u0159\u00edkazu <i>cat \/proc\/meminfo | grep -i huge<\/i>.<\/p>\n<p><b>Z\u00edsk\u00e1n\u00ed informac\u00ed o velk\u00fdch str\u00e1nk\u00e1ch (pouze na Linuxu)<\/b><\/p>\n<pre><code class=\"bash\">Pozn\u00e1mka: Toto plat\u00ed pouze pro Linux, pro ostatn\u00ed OS je tato operace ignorov\u00e1na$ 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 p\u0159\u00edkladu, i kdy\u017e je velikost velk\u00e9 str\u00e1nky nastavena na 2048 (2 MB), celkov\u00fd po\u010det velk\u00fdch str\u00e1nek m\u00e1 hodnotu 0. To znamen\u00e1, \u017ee velk\u00e9 str\u00e1nky jsou zak\u00e1z\u00e1ny.<\/p>\n<h3>Skript pro ur\u010den\u00ed po\u010dtu velk\u00fdch str\u00e1nek<\/h3>\n<p>\nToto je jednoduch\u00fd skript, kter\u00fd vrac\u00ed po\u017eadovan\u00fd po\u010det velk\u00fdch str\u00e1nek. Spus\u0165te skript na sv\u00e9m Linuxov\u00e9m serveru, zat\u00edmco b\u011b\u017e\u00ed PostgreSQL. Ujist\u011bte se, \u017ee je pro prom\u011bnnou prost\u0159ed\u00ed <i>$PGDATA<\/i> nastaven adres\u00e1\u0159 dat PostgreSQL.<\/p>\n<p><b>Z\u00edsk\u00e1n\u00ed \u010d\u00edsla po\u017eadovan\u00fdch velk\u00fdch str\u00e1nek<\/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 skriptu vypad\u00e1 takto:<\/p>\n<p><b>V\u00fdstup skriptu<\/b><\/p>\n<pre><code class=\"bash\">Pid:            12737\nVmPeak:        180932 kB\nHugepagesize:   2048 kB\nSet Huge Pages: 88<\/code><\/pre>\n<p>\nDoporu\u010den\u00e1 hodnota velk\u00fdch str\u00e1nek je 88, tak\u017ee byste m\u011bli nastavit hodnotu 88.<\/p>\n<p><b>Nastaven\u00ed velk\u00fdch str\u00e1nek<\/b><\/p>\n<pre><code class=\"bash\">sysctl -w vm.nr_hugepages=88<\/code><\/pre>\n<p>\nZkontrolujte velk\u00e9 str\u00e1nky nyn\u00ed, uvid\u00edte, \u017ee velk\u00e9 str\u00e1nky nejsou pou\u017e\u00edv\u00e1ny (HugePages_Free = HugePages_Total).<\/p>\n<p><b>Znovu informace o velk\u00fdch str\u00e1nk\u00e1ch (pouze na Linuxu)<\/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>\nNyn\u00ed nastavte parametr huge_pages \u201eon\u201c v $PGDATA\/postgresql.conf a restartujte server.<\/p>\n<p><b>A znovu informace o velk\u00fdch str\u00e1nk\u00e1ch (pouze na Linuxu)<\/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>\nNyn\u00ed m\u016f\u017eete vid\u011bt, \u017ee se pou\u017e\u00edv\u00e1 velmi m\u00e1lo velk\u00fdch str\u00e1nek. Zkusme nyn\u00ed p\u0159idat n\u011bjak\u00e1 data do datab\u00e1ze.<\/p>\n<p><b>N\u011bkter\u00e9 operace s datab\u00e1z\u00ed pro vyu\u017eit\u00ed velk\u00fdch str\u00e1nek<\/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>\nPod\u00edvejme se, zda nyn\u00ed pou\u017e\u00edv\u00e1me v\u00edce velk\u00fdch str\u00e1nek ne\u017e d\u0159\u00edve.<\/p>\n<p><b>Je\u0161t\u011b jednou informace o velk\u00fdch str\u00e1nk\u00e1ch (pouze na Linuxu)<\/b><\/p>\n<pre><code class=\"bash\">$ cat \/proc\/meminfo | grep -i huge\nAnonHugePages:         0 kB\nShmemHugePages:        0 kB\nHugePages_Total:      88\nHugePages_Free:       18\nHugePages_Rsvd:        1\nHugePages_Surp:       0\nHugepagesize:       2048 kB<\/code><\/pre>\n<p>\nNyn\u00ed m\u016f\u017eete vid\u011bt, \u017ee v\u011bt\u0161ina velk\u00fdch str\u00e1nek je vyu\u017eita.<\/p>\n<p>Pozn\u00e1mka: p\u0159\u00edkladem zde pou\u017eit\u00e9 hodnoty pro HugePages je velmi n\u00edzk\u00e9, co\u017e nen\u00ed norm\u00e1ln\u00ed hodnota pro stroj v produk\u010dn\u00edm prost\u0159ed\u00ed. Pros\u00edm, zhodno\u0165te pot\u0159ebn\u00fd po\u010det str\u00e1nek pro v\u00e1\u0161 syst\u00e9m a nastavte je podle z\u00e1t\u011b\u017ee a zdroj\u016f.<\/p>\n<h3>vm.swappiness<\/h3>\n<p>\n<b>vm.swappiness<\/b> \u2014 to je dal\u0161\u00ed parametr j\u00e1dra, kter\u00fd m\u016f\u017ee ovlivnit v\u00fdkon datab\u00e1ze. Tento parametr se pou\u017e\u00edv\u00e1 k \u0159\u00edzen\u00ed chov\u00e1n\u00ed swapov\u00e1n\u00ed (swappiness) (p\u0159esunov\u00e1n\u00ed str\u00e1nek do pam\u011bti a z n\u00ed) v Linuxu. Hodnota se pohybuje od 0 do 100. Ur\u010duje, kolik pam\u011bti bude uvoln\u011bno nebo vyplaceno. Nula znamen\u00e1 vypnut\u00ed swapov\u00e1n\u00ed, zat\u00edmco 100 znamen\u00e1 agresivn\u00ed swapov\u00e1n\u00ed.<\/p>\n<p>M\u016f\u017eete dos\u00e1hnout dobr\u00e9ho v\u00fdkonu nastaven\u00edm ni\u017e\u0161\u00edch hodnot.<\/p>\n<p>Nastaven\u00ed hodnoty 0 v nov\u011bj\u0161\u00edch j\u00e1drech m\u016f\u017ee zp\u016fsobit, \u017ee OOM Killer (proces \u010di\u0161t\u011bn\u00ed pam\u011bti v Linuxu) zabije proces. Tak\u017ee je bezpe\u010dn\u00e9 nastavit hodnotu 1, pokud chcete minimalizovat swapov\u00e1n\u00ed. V\u00fdchoz\u00ed hodnota v Linuxu je 60. Vy\u0161\u0161\u00ed hodnota nut\u00ed MMU (\u0159\u00eddic\u00ed blok pam\u011bti) pou\u017e\u00edvat v\u00edce m\u00edsta pro swapov\u00e1n\u00ed ne\u017e RAM, zat\u00edmco ni\u017e\u0161\u00ed hodnota uchov\u00e1v\u00e1 v\u00edce dat\/k\u00f3du v pam\u011bti.<\/p>\n<p>Ni\u017e\u0161\u00ed hodnota je dobr\u00e1 s\u00e1zka na zlep\u0161en\u00ed v\u00fdkonu v PostgreSQL.<\/p>\n<h3>vm.overcommit_memory \/ vm.overcommit_ratio<\/h3>\n<p>\nAplikace z\u00edsk\u00e1vaj\u00ed pam\u011b\u0165 a uvol\u0148uj\u00ed ji, kdy\u017e ji ji\u017e nepot\u0159ebuj\u00ed. Ale v n\u011bkter\u00fdch p\u0159\u00edpadech aplikace z\u00edsk\u00e1v\u00e1 p\u0159\u00edli\u0161 mnoho pam\u011bti a neuvol\u0148uje ji. To m\u016f\u017ee zp\u016fsobit OOM killer. Zde jsou mo\u017en\u00e9 hodnoty parametru <b>vm.overcommit_memory<\/b> s popisem pro ka\u017edou:<\/p>\n<ol>\n<li> Heuristick\u00fd overcommit (v\u00fdchoz\u00ed); zalo\u017een\u00e1 na j\u00e1d\u0159e heuristika<\/li>\n<li> Povolit overcommit v ka\u017ed\u00e9m p\u0159\u00edpad\u011b<\/li>\n<li> Nep\u0159ehr\u00e1vejte to, nep\u0159ekra\u010dujte overcommit koeficient.<\/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 procento opera\u010dn\u00ed pam\u011bti dostupn\u00e9 pro nadm\u011brn\u00e9 zat\u00ed\u017een\u00ed. Hodnota 50 % v syst\u00e9mu se 2 GB RAM m\u016f\u017ee p\u0159id\u011blovat a\u017e 3 GB RAM.<\/p>\n<p>Hodnota 2 pro vm.overcommit_memory zaji\u0161\u0165uje lep\u0161\u00ed v\u00fdkon pro PostgreSQL. Tato hodnota maximalizuje vyu\u017eit\u00ed opera\u010dn\u00ed pam\u011bti serverov\u00fdm procesem bez jak\u00e9hokoliv v\u00fdznamn\u00e9ho rizika, \u017ee bude zabit procesem OOM killer. Aplikace se bude moci restartovat, ale pouze v r\u00e1mci nadm\u011brn\u00e9ho \u00fatro, co\u017e sni\u017euje riziko, \u017ee OOM killer zabije proces. Proto hodnota 2 p\u0159in\u00e1\u0161\u00ed lep\u0161\u00ed v\u00fdkon ne\u017e v\u00fdchoz\u00ed hodnota 0. Nicm\u00e9n\u011b spolehlivost m\u016f\u017ee b\u00fdt zlep\u0161ena t\u00edm, \u017ee pam\u011b\u0165 mimo povolen\u00fd rozsah nebude p\u0159et\u00ed\u017eena. To vylu\u010duje riziko, \u017ee proces bude zabit OOM killerem.<\/p>\n<p>V syst\u00e9mech bez swapov\u00e1n\u00ed m\u016f\u017ee vzniknout probl\u00e9m s vm.overcommit_memory rovno 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 to je procento pam\u011bti zapln\u011bn\u00e9 \"\u0161pinav\u00fdmi\" str\u00e1nkami, kter\u00e9 je t\u0159eba zapsat na disk. Z\u00e1pis na disk se prov\u00e1d\u00ed na pozad\u00ed. Hodnota tohoto parametru se pohybuje od 0 do 100; nicm\u00e9n\u011b hodnota pod 5 m\u016f\u017ee b\u00fdt neefektivn\u00ed a n\u011bkter\u00e1 j\u00e1dra ji nepodporuj\u00ed. 10 \u2014 v\u00fdchoz\u00ed hodnota ve v\u011bt\u0161in\u011b syst\u00e9m\u016f Linux. M\u016f\u017eete zv\u00fd\u0161it v\u00fdkon pro operace s intenzivn\u00edm z\u00e1pisem s ni\u017e\u0161\u00edm pom\u011brem, co\u017e znamen\u00e1, \u017ee Linux bude zapisovat \u0161pinav\u00e9 str\u00e1nky na pozad\u00ed.<\/p>\n<p>Mus\u00edte nastavit hodnotu <b>vm.dirty_background_bytes<\/b> v z\u00e1vislosti na rychlosti va\u0161eho disku.<\/p>\n<p>Pro tyto dva parametry neexistuj\u00ed \u017e\u00e1dn\u00e9 \"dobr\u00e9\" hodnoty, proto\u017ee oba z\u00e1vis\u00ed na hardwaru. Nicm\u00e9n\u011b nastaven\u00ed vm.dirty_background_ratio na hodnotu 5 a vm.dirty_background_bytes na 25 % z rychlosti disku zv\u00fd\u0161\u00ed v\u00fdkon p\u0159ibli\u017en\u011b o 25 % ve v\u011bt\u0161in\u011b p\u0159\u00edpad\u016f.<\/p>\n<h3>vm.dirty_ratio \/ dirty_bytes<\/h3>\n<p>\nTo je to sam\u00e9 jako <b>vm.dirty_background_ratio \/ dirty_background_bytes<\/b>, s t\u00edm rozd\u00edlem, \u017ee z\u00e1pis se prov\u00e1d\u00ed b\u011bhem aktivn\u00ed relace, co\u017e blokuje aplikaci. Proto by vm.dirty_ratio m\u011blo b\u00fdt vy\u0161\u0161\u00ed ne\u017e <b>vm.dirty_background_ratio<\/b>. To zaji\u0161\u0165uje, \u017ee procesy na pozad\u00ed se spust\u00ed d\u0159\u00edve, aby se p\u0159ede\u0161lo co nejv\u011bt\u0161\u00ed blokaci aplikace. M\u016f\u017eete upravit rozd\u00edl mezi t\u011bmito dv\u011bma pom\u011bry v z\u00e1vislosti na zat\u00ed\u017een\u00ed diskov\u00e9ho I\/O.<\/p>\n<h2>V\u00fdsledek<\/h2>\n<p>\nM\u016f\u017eete upravit dal\u0161\u00ed nastaven\u00ed pro zv\u00fd\u0161en\u00ed v\u00fdkonu, ale zlep\u0161en\u00ed budou minim\u00e1ln\u00ed a nez\u00edsk\u00e1te \u017e\u00e1dn\u00e9 v\u00fdznamn\u00e9 v\u00fdhody. Mus\u00edme m\u00edt na pam\u011bti, \u017ee ne v\u0161echny parametry se vztahuj\u00ed na v\u0161echny typy aplikac\u00ed. N\u011bkter\u00e9 aplikace funguj\u00ed l\u00e9pe, kdy\u017e upravujeme n\u011bkter\u00e9 parametry, zat\u00edmco jin\u00e9 nikoli. Mus\u00edte naj\u00edt spr\u00e1vnou rovnov\u00e1hu mezi konfiguracemi t\u011bchto parametr\u016f pro o\u010dek\u00e1vanou pracovn\u00ed z\u00e1t\u011b\u017e a typ aplikace, a tak\u00e9 p\u0159i \u00faprav\u00e1ch je t\u0159eba br\u00e1t v \u00favahu chov\u00e1n\u00ed opera\u010dn\u00edho syst\u00e9mu. Upravovat j\u00e1drov\u00e9 parametry nen\u00ed tak jednoduch\u00e9 jako upravovat datab\u00e1zov\u00e9 parametry: zde je slo\u017eit\u011bj\u0161\u00ed poskytnout sv\u00e9 doporu\u010den\u00ed.<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.3 - 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\/cs\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\/cs\/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\udd47Optimalizace parametr\u016f j\u00e1dra Linux pro PostgreSQL | ProHoster","description":"Optim\u00e1ln\u00ed v\u00fdkon.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/35920","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=35920"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/35920\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/26870"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=35920"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=35920"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=35920"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}