{"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\/pl\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql","title":{"rendered":"Konfiguracja parametr\u00f3w j\u0105dra Linux w celu optymalizacji PostgreSQL","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Konfiguracja parametr\u00f3w j\u0105dra Linux w celu optymalizacji PostgreSQL\" src=\"\/wp-content\/uploads\/2019\/07\/a28458ff50cdc517aad71b47adab6eb3.jpeg\" style=\"display:block;margin: 0 auto;\" \/> Optymalna wydajno\u015b\u0107 PostgreSQL zale\u017cy od odpowiednio okre\u015blonych parametr\u00f3w systemu operacyjnego. \u0179le skonfigurowane parametry j\u0105dra OS mog\u0105 prowadzi\u0107 do spadku wydajno\u015bci serwera bazy danych. Dlatego konieczne jest, aby te parametry by\u0142y dostosowane do serwera bazy danych i jego obci\u0105\u017cenia roboczego. W tym wpisie om\u00f3wimy niekt\u00f3re wa\u017cne parametry j\u0105dra Linux, kt\u00f3re mog\u0105 wp\u0142yn\u0105\u0107 na wydajno\u015b\u0107 serwera bazy danych oraz sposoby ich konfiguracji.<\/p>\n<h2>SHMMAX \/ SHMALL<\/h2>\n<p>\n<b>SHMMAX<\/b> \u2014 to parametr j\u0105dra, u\u017cywany do okre\u015blenia maksymalnego rozmiaru jednego segmentu pami\u0119ci dzielonej (shared memory), kt\u00f3ry mo\u017ce przydzieli\u0107 proces Linux. Do wersji 9.2 PostgreSQL u\u017cywa\u0142 System V (SysV), dla kt\u00f3rego wymagana by\u0142a konfiguracja SHMMAX. Po 9.2 PostgreSQL przeszed\u0142 na pami\u0119\u0107 dzielon\u0105 POSIX. Tak wi\u0119c teraz wymaga si\u0119 mniej bajt\u00f3w pami\u0119ci dzielonej System V.<\/p>\n<p>Do wersji 9.3 SHMMAX by\u0142 najwa\u017cniejszym parametrem j\u0105dra. Warto\u015b\u0107 SHMMAX jest okre\u015blana w bajtach.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nPodobnie, <b>SHMALL<\/b> \u2014 to kolejny parametr j\u0105dra, u\u017cywany do okre\u015blenia <br \/>\nca\u0142kowitej obj\u0119to\u015bci stron pami\u0119ci dzielonej (shared memory). Aby zobaczy\u0107 aktualne warto\u015bci SHMMAX, SHMALL lub SHMMIN, u\u017cyj polecenia <i>ipcs<\/i>.<\/p>\n<p><b>SHM* Szczeg\u00f3\u0142y \u2014 Linux<\/b><\/p>\n<pre><code class=\"bash\">$ ipcs -lm\n\n------ Limity Pami\u0119ci Dzielonej --------\nmax liczba segment\u00f3w = 4096\nmax rozmiar segmentu (kB) = 1073741824\nmax ca\u0142kowita pami\u0119\u0107 dzielona (kB) = 17179869184\nmin rozmiar segmentu (bajty) = 1<\/code><\/pre>\n<p>\n<b>SHM* Szczeg\u00f3\u0142y \u2014 MacOS X<\/b><\/p>\n<pre><code class=\"bash\">$ ipcs -M\nStatus IPC na dzie\u0144 Thu Aug 16 22:20:35 PKT 2018\nshminfo:\n\tshmmax: 16777216\t(maxymalny rozmiar segmentu pami\u0119ci dzielonej)\n\tshmmin:       1\t(minimalny rozmiar segmentu pami\u0119ci dzielonej)\n\tshmmni:      32\t(maxymalna liczba identyfikator\u00f3w pami\u0119ci dzielonej)\n\tshmseg:       8\t(maxymalna liczba segment\u00f3w pami\u0119ci dzielonej na proces)\n\tshmall:    1024\t(maxymalna ilo\u015b\u0107 pami\u0119ci dzielonej w stronach)\n<\/code><\/pre>\n<p>\nPostgreSQL u\u017cywa <b>System V IPC<\/b> do przydzielania pami\u0119ci dzielonej. Ten parametr jest jednym z najwa\u017cniejszych parametr\u00f3w j\u0105dra. Za ka\u017cdym razem, gdy otrzymujesz nast\u0119puj\u0105ce komunikaty o b\u0142\u0119dach, oznacza to, \u017ce masz starsz\u0105 wersj\u0119 PostgreSQL i bardzo nisk\u0105 warto\u015b\u0107 SHMMAX. Oczekuje si\u0119, \u017ce u\u017cytkownicy dostosuj\u0105 i zwi\u0119ksz\u0105 t\u0119 warto\u015b\u0107 zgodnie z pami\u0119ci\u0105 dzielon\u0105, kt\u00f3r\u0105 zamierzaj\u0105 wykorzysta\u0107.<\/p>\n<h3>Mo\u017cliwe b\u0142\u0119dy niew\u0142a\u015bciwej konfiguracji<\/h3>\n<p>\nJe\u015bli SHMMAX jest \u017ale skonfigurowane, mo\u017cesz otrzyma\u0107 b\u0142\u0105d przy pr\u00f3bie zainicjowania klastra PostgreSQL za pomoc\u0105 polecenia <i>initdb<\/i>.<\/p>\n<p><b>initdb Failure<\/b><br \/>\n<code>SZCZEG\u00d3\u0141Y: Nieudane wywo\u0142anie systemowe shmget(key=1, size=2072576, 03600). <\/p>\n<p>WSKAZ\u00d3WKA: Ten b\u0142\u0105d zazwyczaj oznacza, \u017ce \u017c\u0105danie PostgreSQL dotycz\u0105ce segmentu pami\u0119ci dzielonej przekroczy\u0142o parametr SHMMAX Twojego j\u0105dra.\u00a0 <br \/>\nMo\u017cesz albo zmniejszy\u0107 rozmiar \u017c\u0105dania, albo skonfigurowa\u0107 j\u0105dro z wi\u0119kszym SHMMAX. Aby zmniejszy\u0107 rozmiar \u017c\u0105dania (aktualnie 2072576 bajt\u00f3w), <br \/>\nzmniejsz u\u017cycie pami\u0119ci wsp\u00f3\u0142dzielonej PostgreSQL, by\u0107 mo\u017ce przez zmniejszenie shared_buffers lub max_connections. <\/p>\n<p>Je\u017celi rozmiar \u017c\u0105dania jest ju\u017c ma\u0142y, mo\u017cliwe, \u017ce jest mniejszy ni\u017c parametr SHMMIN w twoim j\u0105drze,<br \/>\nw takim przypadku konieczne jest zwi\u0119kszenie rozmiaru \u017c\u0105dania lub skonfigurowanie SHMMIN. <\/p>\n<p>Dokumentacja PostgreSQL zawiera wi\u0119cej informacji na temat konfiguracji pami\u0119ci wsp\u00f3\u0142dzielonej. Proces potomny zako\u0144czy\u0142 si\u0119 kodem wyj\u015bcia 1<\/code><\/p>\n<p>Podobnie, mo\u017cesz napotka\u0107 b\u0142\u0105d podczas uruchamiania serwera PostgreSQL, u\u017cywaj\u0105c komendy <i>pg_ctl<\/i>.<\/p>\n<p><b>pg_ctl B\u0142\u0105d<\/b><br \/>\n<code>SZCZEG\u00d3\u0141Y: Nieudane wywo\u0142anie systemowe to shmget(klucz=5432001, rozmiar=14385152, 03600).<\/p>\n<p>WSKAZ\u00d3WKA: Ten b\u0142\u0105d zazwyczaj oznacza, \u017ce \u017c\u0105danie PostgreSQL dotycz\u0105ce segmentu pami\u0119ci dzielonej przekroczy\u0142o parametr SHMMAX Twojego j\u0105dra.<\/p>\n<p>Mo\u017cesz albo zmniejszy\u0107 rozmiar \u017c\u0105dania, albo skonfigurowa\u0107 j\u0105dro z wi\u0119kszym SHMMAX. Aby zmniejszy\u0107 rozmiar \u017c\u0105dania (aktualnie 14385152 bajt\u00f3w), zmniejsz u\u017cycie pami\u0119ci wsp\u00f3\u0142dzielonej PostgreSQL, by\u0107 mo\u017ce przez zmniejszenie shared_buffers lub max_connections.<\/p>\n<p>Je\u017celi rozmiar \u017c\u0105dania jest ju\u017c ma\u0142y, mo\u017cliwe, \u017ce jest mniejszy ni\u017c parametr SHMMIN w twoim j\u0105drze, <br \/>\nw takim przypadku konieczne jest zwi\u0119kszenie rozmiaru \u017c\u0105dania lub skonfigurowanie SHMMIN.<\/p>\n<p>Dokumentacja PostgreSQL zawiera wi\u0119cej informacji na temat konfiguracji pami\u0119ci wsp\u00f3\u0142dzielonej.<\/code><\/p>\n<h3>Zrozumienie r\u00f3\u017cnic w definicjach<\/h3>\n<p>\nDefinicje parametr\u00f3w SHMMAX\/SHMALL nieco r\u00f3\u017cni\u0105 si\u0119 w Linuxie i 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>\nZesp\u00f3\u0142 <i>sysctl<\/i> mo\u017ce by\u0107 u\u017cyta do tymczasowej zmiany warto\u015bci. Aby ustawi\u0107 trwa\u0142e warto\u015bci, dodaj wpis do <i>\/etc\/sysctl.conf<\/i>. Szczeg\u00f3\u0142y podano poni\u017cej.<\/p>\n<p><b>Zmiana parametr\u00f3w j\u0105dra w 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>Zmiana parametr\u00f3w j\u0105dra w Linuxie<\/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>Nie zapomnij<\/b>: aby zmiany by\u0142y trwa\u0142e, dodaj te warto\u015bci do \/etc\/sysctl.conf<\/p>\n<h2>Du\u017ce strony (Huge Pages)<\/h2>\n<p>\nW Linuxie domy\u015blnie u\u017cywane s\u0105 strony pami\u0119ci 4 KB, w BSD \u2014 <i>Super Pages<\/i>, a w Windows \u2014 <i>Large Pages<\/i>. Strona jest cz\u0119\u015bci\u0105 pami\u0119ci RAM przydzielon\u0105 procesowi. Proces mo\u017ce mie\u0107 kilka stron w zale\u017cno\u015bci od wymaga\u0144 dotycz\u0105cych pami\u0119ci. Im wi\u0119cej pami\u0119ci wymaga proces, tym wi\u0119cej stron jest mu przydzielanych. System operacyjny utrzymuje tabel\u0119 przydzielania stron dla proces\u00f3w. Im mniejszy rozmiar strony, tym wi\u0119ksza tabela, tym wi\u0119cej czasu potrzeba na wyszukiwanie strony w tej tabeli stron. Dlatego du\u017ce strony pozwalaj\u0105 na korzystanie z du\u017cej ilo\u015bci pami\u0119ci przy zmniejszonym narzuceniu; mniej przegl\u0105dania stron, mniej b\u0142\u0119d\u00f3w stron, szybsze operacje odczytu\/zapisu dzi\u0119ki du\u017cym buforom. W rezultacie \u2014 lepsza wydajno\u015b\u0107.<\/p>\n<p>PostgreSQL obs\u0142uguje du\u017ce strony tylko w systemie Linux. Domy\u015blnie system Linux wykorzystuje strony pami\u0119ci o rozmiarze 4 KB, dlatego gdy operacji z pami\u0119ci\u0105 jest za du\u017co, nale\u017cy ustawi\u0107 strony o wi\u0119kszym rozmiarze. Zauwa\u017cono wzrost wydajno\u015bci przy u\u017cyciu du\u017cych stron o rozmiarze 2 MB i do 1 GB. Rozmiar du\u017cej strony mo\u017cna ustawi\u0107 podczas uruchamiania. Mo\u017cesz \u0142atwo sprawdzi\u0107 parametry du\u017cych stron i ich wykorzystanie na swoim komputerze z systemem Linux, u\u017cywaj\u0105c polecenia <i>cat \/proc\/meminfo | grep -i huge<\/i>.<\/p>\n<p><b>Uzyskiwanie informacji o du\u017cych stronach (tylko w systemie Linux)<\/b><\/p>\n<pre><code class=\"bash\">Uwaga: Dotyczy to tylko systemu Linux, dla innych system\u00f3w ta operacja jest ignorowana\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>\nW tym przyk\u0142adzie, chocia\u017c rozmiar du\u017cej strony ustawiono na 2048 (2 MB), ca\u0142kowita liczba du\u017cych stron wynosi 0. Oznacza to, \u017ce du\u017ce strony s\u0105 wy\u0142\u0105czone.<\/p>\n<h3>Skrypt do ustalania liczby du\u017cych stron<\/h3>\n<p>\nTo prosty skrypt, kt\u00f3ry zwraca wymagan\u0105 liczb\u0119 du\u017cych stron. Uruchom skrypt na swoim serwerze Linux, gdy dzia\u0142a PostgreSQL. Upewnij si\u0119, \u017ce zmienna \u015brodowiskowa <i>$PGDATA<\/i> wskazuje na katalog danych PostgreSQL.<\/p>\n<p><b>Uzyskiwanie liczby wymaganych du\u017cych stron<\/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>\nWynik skryptu wygl\u0105da nast\u0119puj\u0105co:<\/p>\n<p><b>Wynik skryptu<\/b><\/p>\n<pre><code class=\"bash\">Pid: 12737\nVmPeak: 180932 kB\nHugepagesize: 2048 kB\nSet Huge Pages: 88<\/code><\/pre>\n<p>\nZalecana warto\u015b\u0107 du\u017cych stron to 88, wi\u0119c powiniene\u015b ustawi\u0107 warto\u015b\u0107 88.<\/p>\n<p><b>Ustawienie du\u017cych stron<\/b><\/p>\n<pre><code class=\"bash\">sysctl -w vm.nr_hugepages=88<\/code><\/pre>\n<p>\nSprawd\u017a teraz du\u017ce strony, zobaczysz, \u017ce du\u017ce strony nie s\u0105 u\u017cywane (HugePages_Free = HugePages_Total).<\/p>\n<p><b>Ponownie informacje o du\u017cych stronach (tylko w systemie Linux)<\/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 ustaw parametr huge_pages na \u201eon\u201d w $PGDATA\/postgresql.conf i uruchom ponownie serwer.<\/p>\n<p><b>I ponownie informacje o du\u017cych stronach (tylko w systemie Linux)<\/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 mo\u017cesz zobaczy\u0107, \u017ce wykorzystano bardzo ma\u0142o du\u017cych stron. Spr\u00f3bujmy teraz doda\u0107 dane do bazy danych.<\/p>\n<p><b>Niekt\u00f3re operacje na bazach danych dotycz\u0105ce u\u017cywania du\u017cych stron<\/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>\nSprawd\u017amy, czy obecnie u\u017cywamy wi\u0119cej du\u017cych stron ni\u017c wcze\u015bniej.<\/p>\n<p><b>Ponownie informacje o du\u017cych stronach (tylko na Linuxie)<\/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 mo\u017cesz zobaczy\u0107, \u017ce wi\u0119kszo\u015b\u0107 du\u017cych stron jest u\u017cywana.<\/p>\n<p>Uwaga: przybli\u017cona warto\u015b\u0107 dla HugePages u\u017cywana tutaj jest bardzo niska, co nie jest normalnym warto\u015bci\u0105 dla maszyny w \u015brodowisku produkcyjnym. Prosz\u0119 oceni\u0107 potrzebn\u0105 liczb\u0119 stron dla swojego systemu i ustawi\u0107 je odpowiednio w zale\u017cno\u015bci od obci\u0105\u017cenia i zasob\u00f3w.<\/p>\n<h3>vm.swappiness<\/h3>\n<p>\n<b>vm.swappiness<\/b> \u2014 to kolejny parametr j\u0105dra, kt\u00f3ry mo\u017ce wp\u0142ywa\u0107 na wydajno\u015b\u0107 bazy danych. Parametr ten jest u\u017cywany do zarz\u0105dzania zachowaniem wymiany (swappiness) (wymiana stron do pami\u0119ci i z niej) w Linuxie. Warto\u015b\u0107 waha si\u0119 od 0 do 100. Okre\u015bla, ile pami\u0119ci b\u0119dzie wymienione lub zredukowane. Zero oznacza dezaktywacj\u0119 wymiany, a 100 oznacza agresywn\u0105 wymian\u0119.<\/p>\n<p>Mo\u017cesz uzyska\u0107 dobr\u0105 wydajno\u015b\u0107, ustawiaj\u0105c ni\u017csze warto\u015bci.<\/p>\n<p>Ustawienie warto\u015bci 0 w nowszych j\u0105drach mo\u017ce spowodowa\u0107, \u017ce OOM Killer (proces oczyszczania pami\u0119ci w Linuxie) zabi\u0142by proces. Dlatego mo\u017cna bezpiecznie ustawi\u0107 warto\u015b\u0107 1, je\u015bli chcesz minimalizowa\u0107 wymian\u0119. Domy\u015blna warto\u015b\u0107 w Linuxie wynosi 60. Wy\u017csza warto\u015b\u0107 powoduje, \u017ce MMU (jednostka zarz\u0105dzania pami\u0119ci\u0105) u\u017cywa wi\u0119cej miejsca na wymian\u0119 ni\u017c RAM, podczas gdy ni\u017csza warto\u015b\u0107 pozostawia wi\u0119cej danych\/kodu w pami\u0119ci.<\/p>\n<p>Ni\u017csza warto\u015b\u0107 to dobre za\u0142o\u017cenie dla poprawy wydajno\u015bci w PostgreSQL.<\/p>\n<h3>vm.overcommit_memory \/ vm.overcommit_ratio<\/h3>\n<p>\nAplikacje przydzielaj\u0105 pami\u0119\u0107 i zwalniaj\u0105 j\u0105, gdy nie jest ju\u017c potrzebna. W niekt\u00f3rych przypadkach jednak aplikacja przydziela zbyt du\u017co pami\u0119ci i jej nie zwalnia. Mo\u017ce to spowodowa\u0107 OOM killer. Oto mo\u017cliwe warto\u015bci parametru <b>vm.overcommit_memory<\/b> z opisem dla ka\u017cdego:<\/p>\n<ol>\n<li> Heurystyka overcommit (domy\u015blnie); heurystyka oparta na j\u0105drze<\/li>\n<li> Zezw\u00f3l na overcommit w ka\u017cdym przypadku<\/li>\n<li> Nie przesadzaj, nie przekraczaj wsp\u00f3\u0142czynnika overcommit.<\/li>\n<\/ol>\n<p>\n<i>Link: <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 procent pami\u0119ci RAM dost\u0119pnej do nadmiernego wykorzystania. Warto\u015b\u0107 50% w systemie z 2 GB RAM mo\u017ce przydziela\u0107 do 3 GB RAM.<\/p>\n<p>Warto\u015b\u0107 2 dla vm.overcommit_memory zapewnia lepsz\u0105 wydajno\u015b\u0107 dla PostgreSQL. Ta warto\u015b\u0107 maksymalizuje wykorzystanie pami\u0119ci RAM przez proces serwera bez znacz\u0105cego ryzyka bycia zabitym przez proces OOM killer. Aplikacja b\u0119dzie mog\u0142a si\u0119 ponownie uruchomi\u0107, ale tylko w granicach nadmiaru, co zmniejsza ryzyko, \u017ce OOM killer zabije proces. W zwi\u0105zku z tym warto\u015b\u0107 2 daje lepsz\u0105 wydajno\u015b\u0107 ni\u017c domy\u015blna warto\u015b\u0107 0. Niemniej jednak niezawodno\u015b\u0107 mo\u017ce by\u0107 poprawiona poprzez to, \u017ce pami\u0119\u0107 poza dozwolonym zakresem nie b\u0119dzie przeci\u0105\u017cona. Eliminuj\u0119 to ryzyko, \u017ce proces zostanie zabity przez OOM-killera.<\/p>\n<p>W systemach bez wymiany mo\u017ce wyst\u0105pi\u0107 problem z vm.overcommit_memory r\u00f3wnym 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 jest to procent pami\u0119ci zaj\u0119tej przez brudne strony, kt\u00f3re musz\u0105 by\u0107 zapisane na dysk. Zrzut na dysk odbywa si\u0119 w tle. Warto\u015b\u0107 tego parametru wynosi od 0 do 100; jednak warto\u015b\u0107 poni\u017cej 5 mo\u017ce by\u0107 nieskuteczna, a niekt\u00f3re j\u0105dra jej nie obs\u0142uguj\u0105. 10 jest warto\u015bci\u0105 domy\u015bln\u0105 w wi\u0119kszo\u015bci system\u00f3w Linux. Mo\u017cesz poprawi\u0107 wydajno\u015b\u0107 operacji z intensywnym zapisem przy mniejszym wsp\u00f3\u0142czynniku, co oznacza, \u017ce Linux b\u0119dzie zrzuca\u0142 brudne strony w tle.<\/p>\n<p>Musisz ustawi\u0107 warto\u015b\u0107 <b>vm.dirty_background_bytes<\/b> w zale\u017cno\u015bci od pr\u0119dko\u015bci twojego dysku.<\/p>\n<p>Dla tych dw\u00f3ch parametr\u00f3w nie ma \u00abdobrych\u00bb warto\u015bci, poniewa\u017c oba zale\u017c\u0105 od sprz\u0119tu. Jednak ustawienie vm.dirty_background_ratio na warto\u015b\u0107 5 i vm.dirty_background_bytes na 25% pr\u0119dko\u015bci dysku, poprawia wydajno\u015b\u0107 o ~ 25% w wi\u0119kszo\u015bci przypadk\u00f3w.<\/p>\n<h3>vm.dirty_ratio \/ dirty_bytes<\/h3>\n<p>\nTo to samo co <b>vm.dirty_background_ratio \/ dirty_background_bytes<\/b>, z tym wyj\u0105tkiem, \u017ce zrzut jest wykonywany w sesji roboczej, blokuj\u0105c aplikacj\u0119. Dlatego vm.dirty_ratio powinno by\u0107 wy\u017csze ni\u017c <b>vm.dirty_background_ratio<\/b>. To gwarantuje, \u017ce procesy w tle b\u0119d\u0105 uruchamiane wcze\u015bniej, aby unikn\u0105\u0107 maksymalnej blokady aplikacji. Mo\u017cesz dostosowa\u0107 r\u00f3\u017cnic\u0119 mi\u0119dzy tymi dwoma stosunkami w zale\u017cno\u015bci od obci\u0105\u017cenia wej\u015bcia\/wyj\u015bcia dysku.<\/p>\n<h2>Podsumowanie<\/h2>\n<p>\nMo\u017cesz dostosowa\u0107 inne parametry w celu zwi\u0119kszenia wydajno\u015bci, ale poprawa b\u0119dzie minimalna, a korzy\u015bci nie b\u0119d\u0105 znacz\u0105ce. Musimy pami\u0119ta\u0107, \u017ce nie wszystkie parametry odnosz\u0105 si\u0119 do wszystkich typ\u00f3w aplikacji. Niekt\u00f3re aplikacje dzia\u0142aj\u0105 lepiej, gdy dostosowujemy niekt\u00f3re parametry, a inne \u2013 nie. Musisz znale\u017a\u0107 odpowiedni\u0105 r\u00f3wnowag\u0119 pomi\u0119dzy konfiguracjami tych parametr\u00f3w a oczekiwan\u0105 obci\u0105\u017ceniem roboczym i typem aplikacji, a tak\u017ce przy dostosowywaniu nale\u017cy uwzgl\u0119dni\u0107 zachowanie systemu operacyjnego. Dostosowanie parametr\u00f3w j\u0105dra nie jest tak proste, jak dostosowanie parametr\u00f3w bazy danych: tu jest trudniej udzieli\u0107 jednoznacznych rekomendacji.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <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.1.1 - 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\/pl\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\/pl\/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\udd47Dostosowanie parametr\u00f3w j\u0105dra Linux w celu optymalizacji PostgreSQL | ProHoster","description":"Optymalna wydajno\u015b\u0107.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/35920","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=35920"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/35920\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/26870"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=35920"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=35920"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=35920"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}