{"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\/ro\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql","title":{"rendered":"Configurarea parametrilor nucleului Linux pentru optimizarea PostgreSQL","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Configurarea parametrilor nucleului Linux pentru optimizarea PostgreSQL\" src=\"\/wp-content\/uploads\/2019\/07\/a28458ff50cdc517aad71b47adab6eb3.jpeg\" style=\"display:block;margin: 0 auto;\" \/> Performan\u021ba optim\u0103 a PostgreSQL depinde de parametrii sistemului de operare corect defini\u021bi. Parametrii nucleului OS prost configura\u021bi pot duce la sc\u0103derea performan\u021bei serverului de baze de date. Este esen\u021bial ca ace\u0219ti parametri s\u0103 fie configura\u021bi \u00een conformitate cu serverul de baze de date \u0219i cu sarcina sa de lucru. \u00cen aceast\u0103 postare, vom discuta c\u00e2\u021biva parametri importan\u021bi ai nucleului Linux care pot influen\u021ba performan\u021ba serverului de baze de date \u0219i metodele de configurare ale acestora.<\/p>\n<h2>SHMMAX \/ SHMALL<\/h2>\n<p>\n<b>SHMMAX<\/b> \u2014 este un parametru de nucleu utilizat pentru a defini dimensiunea maxim\u0103 a unui segment de memorie partajat\u0103 (shared memory) pe care un proces Linux \u00eel poate aloca. P\u00e2n\u0103 la versiunea 9.2, PostgreSQL utiliza System V (SysV), pentru care este necesar\u0103 configurarea SHMMAX. Dup\u0103 versiunea 9.2, PostgreSQL a trecut la memorie partajat\u0103 POSIX. A\u0219adar, acum este necesar\u0103 o cantitate mai mic\u0103 de memorie partajat\u0103 System V.<\/p>\n<p>P\u00e2n\u0103 la versiunea 9.3, SHMMAX era cel mai important parametru de nucleu. Valoarea SHMMAX este specificat\u0103 \u00een octe\u021bi.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nSimilar, <b>SHMALL<\/b> \u2014 este un alt parametru de nucleu folosit pentru a determina <br \/>\nvolumul total de pagini de memorie partajat\u0103 (shared memory). Pentru a vizualiza valorile curente SHMMAX, SHMALL sau SHMMIN, utiliza\u021bi comanda <i>ipcs<\/i>.<\/p>\n<p><b>Detalii SHM* \u2014 Linux<\/b><\/p>\n<pre><code class=\"bash\">$ ipcs -lm\n\n------ Limite Memorie Partajat\u0103 --------\nnum\u0103rul maxim de segmente = 4096\nDimensiunea maxim\u0103 a segmentului (kbytes) = 1073741824\nTotal maxim memorie partajat\u0103 (kbytes) = 17179869184\nDimensiunea minim\u0103 a segmentului (octe\u021bi) = 1<\/code><\/pre>\n<p>\n<b>Detalii SHM* \u2014 MacOS X<\/b><\/p>\n<pre><code class=\"bash\">$ ipcs -M\nStatus IPC de la  pe Joi Aug 16 22:20:35 PKT 2018\nshminfo:\n\tshmmax: 16777216\t(dimensiunea maxim\u0103 a segmentului de memorie partajat\u0103)\n\tshmmin:       1\t(dimensiunea minim\u0103 a segmentului de memorie partajat\u0103)\n\tshmmni:      32\t(num\u0103rul maxim de identificatori de memorie partajat\u0103)\n\tshmseg:       8\t(num\u0103rul maxim de segmente de memorie partajat\u0103 pe proces)\n\tshmall:    1024\t(cantitatea maxim\u0103 de memorie partajat\u0103 \u00een pagini)\n<\/code><\/pre>\n<p>\nPostgreSQL folose\u0219te <b>System V IPC<\/b> pentru a aloca memorie partajat\u0103. Acest parametru este unul dintre cei mai importan\u021bi parametri ai nucleului. De fiecare dat\u0103 c\u00e2nd primi\u021bi urm\u0103toarele mesaje de eroare, aceasta \u00eenseamn\u0103 c\u0103 ave\u021bi o versiune mai veche de PostgreSQL \u0219i ave\u021bi o valoare SHMMAX foarte sc\u0103zut\u0103. Se a\u0219teapt\u0103 ca utilizatorii s\u0103 ajusteze \u0219i s\u0103 creasc\u0103 valoarea \u00een conformitate cu memoria partajat\u0103 pe care inten\u021bioneaz\u0103 s\u0103 o foloseasc\u0103.<\/p>\n<h3>Posibile erori de configurare gre\u0219it\u0103<\/h3>\n<p>\nDac\u0103 SHMMAX este configurat incorect, pute\u021bi primi o eroare atunci c\u00e2nd \u00eencerca\u021bi s\u0103 ini\u021bializa\u021bi un cluster PostgreSQL folosind comanda <i>initdb<\/i>.<\/p>\n<p><b>E\u0219ec initdb<\/b><br \/>\n<code>DETALII: Apeleaz\u0103 sistemul a e\u0219uat la shmget(key=1, size=2072576, 03600). <\/p>\n<p>SUGESTIE: Aceast\u0103 eroare \u00eenseamn\u0103 de obicei c\u0103 cererea PostgreSQL pentru un segment de memorie partajat\u0103 a dep\u0103\u0219it parametrul SHMMAX al kernel-ului dumneavoastr\u0103.\u00a0 <br \/>\nPute\u021bi fie s\u0103 reduce\u021bi dimensiunea cererii, fie s\u0103 reconfigura\u021bi kernel-ul cu un SHMMAX mai mare. Pentru a reduce dimensiunea cererii (\u00een prezent 2072576 bytes), <br \/>\nreducerea utiliz\u0103rii memoriei partajate PostgreSQL, poate prin reducerea shared_buffers sau max_connections. <\/p>\n<p>Dac\u0103 dimensiunea cererii este deja mic\u0103, este posibil ca aceasta s\u0103 fie mai mic\u0103 dec\u00e2t parametrul SHMMIN al kernel-ului dumneavoastr\u0103,<br \/>\ncaz \u00een care este necesar\u0103 cre\u0219terea dimensiunii cererii sau reconfigurarea SHMMIN. <\/p>\n<p>Documenta\u021bia PostgreSQL con\u021bine mai multe informa\u021bii despre configurarea memoriei partajate. Procesul copil a ie\u0219it cu codul de ie\u0219ire 1<\/code><\/p>\n<p>\u00cen mod similar, pute\u021bi primi o eroare la pornirea serverului PostgreSQL folosind comanda <i>pg_ctl<\/i>.<\/p>\n<p><b>E\u0219ec pg_ctl<\/b><br \/>\n<code>DETALII: Apelul de sistem e\u0219uat a fost shmget(key=5432001, size=14385152, 03600).<\/p>\n<p>SUGESTIE: Aceast\u0103 eroare \u00eenseamn\u0103 de obicei c\u0103 cererea PostgreSQL pentru un segment de memorie partajat\u0103 a dep\u0103\u0219it parametrul SHMMAX al kernel-ului dumneavoastr\u0103.<\/p>\n<p>Pute\u021bi fie s\u0103 reduce\u021bi dimensiunea cererii, fie s\u0103 reconfigura\u021bi kernel-ul cu un SHMMAX mai mare. Pentru a reduce dimensiunea cererii (\u00een prezent 14385152 bytes), reduce\u021bi utilizarea memoriei partajate PostgreSQL, poate prin reducerea shared_buffers sau max_connections.<\/p>\n<p>Dac\u0103 dimensiunea cererii este deja mic\u0103, este posibil ca aceasta s\u0103 fie mai mic\u0103 dec\u00e2t parametrul SHMMIN al kernel-ului dumneavoastr\u0103, <br \/>\ncaz \u00een care este necesar\u0103 cre\u0219terea dimensiunii cererii sau reconfigurarea SHMMIN.<\/p>\n<p>Documenta\u021bia PostgreSQL con\u021bine mai multe informa\u021bii despre configurarea memoriei partajate.<\/code><\/p>\n<h3>\u00cen\u021belegerea diferen\u021belor \u00een defini\u021bii<\/h3>\n<p>\nDefini\u021bia parametrilor SHMMAX\/SHMALL variaz\u0103 pu\u021bin \u00een Linux \u0219i 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>\nComanda <i>sysctl<\/i> poate fi folosit pentru a schimba temporar valoarea. Pentru a stabili valori permanente, ad\u0103uga\u021bi o \u00eenregistrare \u00een <i>\/etc\/sysctl.conf<\/i>. Detalii sunt prezentate mai jos.<\/p>\n<p><b>Modificarea parametrilor kernel-ului pe 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>Modificarea parametrilor kernel-ului pe Linux<\/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>Nu uita\u021bi<\/b>: pentru a face modific\u0103rile permanente, ad\u0103uga\u021bi aceste valori \u00een \/etc\/sysctl.conf<\/p>\n<h2>Pagini mari (Huge Pages)<\/h2>\n<p>\n\u00cen Linux, capacitatea de memorie de 4 KB este utilizat\u0103 implicit, iar \u00een BSD \u2014 <i>Super Pages<\/i>, iar \u00een Windows \u2014 <i>Large Pages<\/i>. O pagin\u0103 este o parte a memoriei RAM alocat\u0103 unui proces. Un proces poate avea mai multe pagini \u00een func\u021bie de cerin\u021bele de memorie. Cu c\u00e2t un proces necesit\u0103 mai mult\u0103 memorie, cu at\u00e2t mai multe pagini \u00eei sunt alocate. SO-ul men\u021bine o tabel\u0103 de alocare a paginilor pentru procese. Cu c\u00e2t dimensiunea paginii este mai mic\u0103, cu at\u00e2t tabela este mai mare, ceea ce necesit\u0103 mai mult timp pentru a c\u0103uta o pagin\u0103 \u00een aceast\u0103 tabel\u0103 de pagini. Prin urmare, paginile mari permit utilizarea unei cantit\u0103\u021bi mari de memorie cu cheltuieli reduse; mai pu\u021bine vizualiz\u0103ri de pagini, mai pu\u021bine erori de pagini, opera\u021biuni de citire\/scriere mai rapide prin intermediul bufferelor mari. Ca rezultat \u2014 \u00eembun\u0103t\u0103\u021birea performan\u021bei.<\/p>\n<p>PostgreSQL suport\u0103 pagini mari doar pe Linux. \u00cen mod implicit, Linux folose\u0219te pagini de memorie de 4 KB, a\u0219a c\u0103 \u00een cazurile \u00een care sunt prea multe opera\u021biuni cu memoria, este necesar s\u0103 se seteze pagini de dimensiuni mai mari. Se observ\u0103 o cre\u0219tere a performan\u021bei atunci c\u00e2nd se utilizeaz\u0103 pagini mari de 2 MB \u0219i p\u00e2n\u0103 la 1 GB. Dimensiunea paginii mari poate fi setat\u0103 \u00een timpul \u00eenc\u0103rc\u0103rii. Pute\u021bi verifica cu u\u0219urin\u021b\u0103 parametrii paginilor mari \u0219i utilizarea acestora pe computerul dumneavoastr\u0103 Linux, folosind comanda <i>cat \/proc\/meminfo | grep -i huge<\/i>.<\/p>\n<p><b>Ob\u021binerea informa\u021biilor despre paginile mari (doar pe Linux)<\/b><\/p>\n<pre><code class=\"bash\">Not\u0103: Aceasta este doar pentru Linux, pentru alte sisteme de operare aceast\u0103 opera\u021biune este ignorat\u0103\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>\n\u00cen acest exemplu, de\u0219i dimensiunea paginii mari este setat\u0103 la 2048 (2 MB), num\u0103rul total de pagini mari are valoarea 0. Aceasta \u00eenseamn\u0103 c\u0103 paginile mari sunt dezactivate.<\/p>\n<h3>Script pentru determinarea num\u0103rului de pagini mari<\/h3>\n<p>\nAcesta este un script simplu care returneaz\u0103 num\u0103rul necesar de pagini mari. Rula\u021bi scriptul pe serverul dumneavoastr\u0103 Linux, \u00een timp ce PostgreSQL este activ. Asigura\u021bi-v\u0103 c\u0103 variabila de mediu <i>$PGDATA<\/i> este setat\u0103 pentru directorul de date PostgreSQL.<\/p>\n<p><b>Ob\u021binerea cifrei necesare de pagini mari<\/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>\nIe\u0219irea scriptului arat\u0103 astfel:<\/p>\n<p><b>Ie\u0219irea scriptului<\/b><\/p>\n<pre><code class=\"bash\">Pid:            12737\nVmPeak:        180932 kB\nHugepagesize:   2048 kB\nSet Huge Pages: 88<\/code><\/pre>\n<p>\nValoarea recomandat\u0103 pentru paginile mari este 88, a\u0219a c\u0103 trebuie s\u0103 seta\u021bi valoarea la 88.<\/p>\n<p><b>Setarea paginilor mari<\/b><\/p>\n<pre><code class=\"bash\">sysctl -w vm.nr_hugepages=88<\/code><\/pre>\n<p>\nVerifica\u021bi paginile mari acum, ve\u021bi vedea c\u0103 paginile mari nu sunt utilizate (HugePages_Free = HugePages_Total).<\/p>\n<p><b>Din nou informa\u021bii despre paginile mari (doar pe 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>\nAcum seta\u021bi parametrul huge_pages \u201eon\u201d \u00een $PGDATA\/postgresql.conf \u0219i reporni\u021bi serverul.<\/p>\n<p><b>\u0218i din nou informa\u021bii despre paginile mari (doar pe 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>\nAcum pute\u021bi vedea c\u0103 sunt utilizate foarte pu\u021bine pagini mari. S\u0103 \u00eencerc\u0103m acum s\u0103 ad\u0103ug\u0103m unele date \u00een baza de date.<\/p>\n<p><b>Unele opera\u021biuni cu baza de date pentru gestionarea paginilor mari<\/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>\nS\u0103 vedem dac\u0103 folosim acum mai multe pagini mari dec\u00e2t \u00eenainte.<\/p>\n<p><b>\u00cenc\u0103 o dat\u0103, informa\u021bii despre paginile mari (numai pe 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:       18\nHugePages_Rsvd:        1\nHugePages_Surp:       0\nHugepagesize:       2048 kB<\/code><\/pre>\n<p>\nAcum po\u021bi vedea c\u0103 majoritatea paginilor mari sunt utilizate.<\/p>\n<p>Not\u0103: valoarea aproximativ\u0103 pentru HugePages utilizat\u0103 aici este foarte mic\u0103, ceea ce nu este un lucru normal pentru un sistem \u00een mediu de produc\u021bie. Te rug\u0103m s\u0103 evaluezi num\u0103rul necesar de pagini pentru sistemul t\u0103u \u0219i s\u0103 le configurezi corespunz\u0103tor \u00een func\u021bie de \u00eenc\u0103rcare \u0219i resurse.<\/p>\n<h3>vm.swappiness<\/h3>\n<p>\n<b>vm.swappiness<\/b> \u2014 este un alt parametru al kernelului care poate influen\u021ba performan\u021ba bazei de date. Acest parametru este utilizat pentru a gestiona comportamentul swap-ului (swapiness) (schimbarea paginilor \u00een memorie \u0219i din memorie) \u00een Linux. Valoarea variaz\u0103 de la 0 la 100. Aceasta determin\u0103 c\u00e2t\u0103 memorie va fi desc\u0103rcat\u0103 sau golit\u0103. Zero \u00eenseamn\u0103 dezactivarea swap-ului, iar 100 \u00eenseamn\u0103 un swap agresiv.<\/p>\n<p>Po\u021bi ob\u021bine o performan\u021b\u0103 bun\u0103 set\u00e2nd valori mai mici.<\/p>\n<p>Setarea valorii 0 \u00een kernel-uri mai noi poate duce la faptul c\u0103 OOM Killer (procesul de cur\u0103\u021bare a memoriei \u00een Linux) va \u00eenchide procesul. Prin urmare, po\u021bi seta \u00een siguran\u021b\u0103 valoarea 1, dac\u0103 dore\u0219ti s\u0103 minimizezi swap-ul. Valoarea implicit\u0103 \u00een Linux este 60. O valoare mai mare face ca MMU (unitatea de gestionare a memoriei) s\u0103 foloseasc\u0103 mai mult spa\u021biu de swap dec\u00e2t RAM-ul, \u00een timp ce o valoare mai mic\u0103 p\u0103streaz\u0103 mai multe date\/cod \u00een memorie.<\/p>\n<p>O valoare mai mic\u0103 este o alegere bun\u0103 pentru \u00eembun\u0103t\u0103\u021birea performan\u021bei \u00een PostgreSQL.<\/p>\n<h3>vm.overcommit_memory \/ vm.overcommit_ratio<\/h3>\n<p>\nAplica\u021biile primesc memorie \u0219i o elibereaz\u0103 atunci c\u00e2nd nu mai este necesar\u0103. Dar, \u00een unele cazuri, aplica\u021bia prime\u0219te prea mult\u0103 memorie \u0219i nu o elibereaz\u0103. Acest lucru poate provoca OOM killer. Iat\u0103 posibilele valori ale parametrului <b>vm.overcommit_memory<\/b> cu descriere pentru fiecare:<\/p>\n<ol>\n<li> Overcommit heuristic (implicit); bazat pe o heuristic\u0103 a nucleului<\/li>\n<li> Permite overcommit \u00een orice caz<\/li>\n<li> Nu exagera, nu dep\u0103\u0219i coeficientul de 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 procentul de memorie RAM disponibil pentru suprasarcin\u0103. O valoare de 50% \u00eentr-un sistem cu 2 GB RAM poate aloca p\u00e2n\u0103 la 3 GB RAM.<\/p>\n<p>O valoare de 2 pentru vm.overcommit_memory asigur\u0103 o performan\u021b\u0103 mai bun\u0103 pentru PostgreSQL. Aceast\u0103 valoare maximizeaz\u0103 utilizarea memoriei RAM de c\u0103tre procesul serverului f\u0103r\u0103 un risc semnificativ de a fi oprit de procesul OOM killer. Aplica\u021bia va putea reporni, dar doar \u00een limitele suprasarcinii, ceea ce reduce riscul ca OOM killer s\u0103 opreasc\u0103 procesul. Prin urmare, o valoare de 2 ofer\u0103 o performan\u021b\u0103 mai bun\u0103 dec\u00e2t valoarea implicit\u0103 de 0. Cu toate acestea, fiabilitatea poate fi \u00eembun\u0103t\u0103\u021bit\u0103 prin faptul c\u0103 memoria dincolo de intervalul permis nu va fi suprasarcin\u0103. Acest lucru elimin\u0103 riscul ca procesul s\u0103 fie oprit de OOM-killer.<\/p>\n<p>\u00cen sistemele f\u0103r\u0103 swap, poate ap\u0103rea o problem\u0103 cu vm.overcommit_memory setat la 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 este procentul de memorie umplut\u0103 cu pagini murdare care trebuie scrise pe disc. Scrierea pe disc se face \u00een fundal. Valoarea acestui parametru variaz\u0103 \u00eentre 0 \u0219i 100; totu\u0219i, o valoare sub 5 poate fi ineficient\u0103, iar unele kerneluri nu o suport\u0103. 10 este valoarea implicit\u0103 \u00een majoritatea sistemelor Linux. Pute\u021bi \u00eembun\u0103t\u0103\u021bi performan\u021ba pentru opera\u021biunile cu scriere intens\u0103 cu un coeficient mai mic, ceea ce va \u00eensemna c\u0103 Linux va scrie paginile murdare \u00een fundal.<\/p>\n<p>Trebuie s\u0103 seta\u021bi valoarea <b>vm.dirty_background_bytes<\/b> \u00een func\u021bie de viteza discului dumneavoastr\u0103.<\/p>\n<p>Pentru ace\u0219ti doi parametri nu exist\u0103 valori \u201ebune\u201d, deoarece ambele depind de hardware. Cu toate acestea, setarea vm.dirty_background_ratio la 5 \u0219i vm.dirty_background_bytes la 25% din viteza discului \u00eembun\u0103t\u0103\u021be\u0219te performan\u021ba cu ~ 25% \u00een cele mai multe cazuri.<\/p>\n<h3>vm.dirty_ratio \/ dirty_bytes<\/h3>\n<p>\nEste acela\u0219i lucru cu <b>vm.dirty_background_ratio \/ dirty_background_bytes<\/b>, cu excep\u021bia faptului c\u0103 scrierea se efectueaz\u0103 \u00een sesiunea activ\u0103, bloc\u00e2nd aplica\u021bia. Prin urmare, vm.dirty_ratio ar trebui s\u0103 fie mai mare dec\u00e2t <b>vm.dirty_background_ratio<\/b>. Acest lucru garanteaz\u0103 c\u0103 procesele din fundal vor fi lansate mai devreme, pentru a evita blocarea maxim\u0103 a aplica\u021biei. Pute\u021bi ajusta diferen\u021ba dintre aceste dou\u0103 rapoarte \u00een func\u021bie de sarcina de intrare-ie\u0219ire a discului.<\/p>\n<h2>Rezultatul<\/h2>\n<p>\nPute\u021bi configura alte set\u0103ri pentru a cre\u0219te performan\u021ba, dar \u00eembun\u0103t\u0103\u021birile vor fi minime \u0219i nu ve\u021bi ob\u021bine beneficii semnificative. Trebuie s\u0103 ne amintim c\u0103 nu toate set\u0103rile se aplic\u0103 tuturor tipurilor de aplica\u021bii. Unele aplica\u021bii func\u021bioneaz\u0103 mai bine atunci c\u00e2nd ajust\u0103m anumite set\u0103ri, iar altele nu. Trebuie s\u0103 g\u0103si\u021bi echilibrul corect \u00eentre configura\u021biile acestor set\u0103ri pentru sarcina de lucru a\u0219teptat\u0103 \u0219i tipul de aplica\u021bie, iar la configurare trebuie s\u0103 lua\u021bi \u00een considerare comportamentul sistemului de operare. Configurarea parametrilor nucleului nu este la fel de simpl\u0103 ca ajustarea set\u0103rilor bazei de date: aici este mai complicat s\u0103 ofere\u021bi recomand\u0103ri.<br \/>\n<br \/>Sursa: <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.2 - 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\/ro\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Configurarea parametrilor nucleului Linux pentru optimizarea PostgreSQL | ProHoster","description":"Performan\u021b\u0103 optim\u0103.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/35920","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=35920"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/35920\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/26870"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=35920"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=35920"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=35920"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}