{"id":84082,"date":"2020-06-05T07:42:28","date_gmt":"2020-06-05T05:42:28","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij"},"modified":"2020-06-05T07:42:28","modified_gmt":"2020-06-05T05:42:28","slug":"linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","title":{"rendered":"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Decodificarea raportului din 2015 al lui Ilia Cosmodyenski \"Linux tuning pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL\"<\/p>\n<p><\/p>\n<p>Avertisment: Men\u021bionez c\u0103 acest raport este din noiembrie 2015 \u2013 au trecut mai mult de 4 ani \u0219i s-au \u00eent\u00e2mplat multe. Versiunea 9.4 men\u021bionat\u0103 \u00een raport nu mai este suportat\u0103. \u00cen ultimii 4 ani, au fost lansate 5 versiuni noi de PostgreSQL \u0219i 15 versiuni de kernel Linux. Dac\u0103 ar trebui s\u0103 rescriem aceste p\u0103r\u021bi, am ob\u021bine, \u00een final, un alt raport. Totu\u0219i, aici este abordat\u0103 optimizarea fundamental\u0103 a Linux pentru PostgreSQL, care r\u0103m\u00e2ne relevant\u0103 \u0219i \u00een prezent.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/8292f74a7d004a9c13ff5f1393816340.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"V0M6YwWmMYM\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/V0M6YwWmMYM\/hqdefault.jpg\" alt=\"Reda\u021bi video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>M\u0103 numesc Ilya Kosmodemyansky. Lucrez la compania PostgreSQL-Consulting. \u0218i acum voi povesti pu\u021bin despre ce s\u0103 faci cu Linux \u00een leg\u0103tur\u0103 cu bazele de date \u00een general \u0219i cu PostgreSQL \u00een special, deoarece principiile sunt destul de asem\u0103n\u0103toare.<\/p>\n<p><\/p>\n<p>Despre ce vom vorbi? Dac\u0103 interac\u021biona\u021bi cu PostgreSQL, trebuie \u00eentr-o oarecare m\u0103sur\u0103 s\u0103 fi\u021bi un administrator UNIX. Ce \u00eenseamn\u0103 asta? Dac\u0103 compar\u0103m Oracle \u0219i PostgreSQL, atunci \u00een Oracle trebuie s\u0103 fii 80% administrator DBA al bazei de date \u0219i 20% administrator Linux.<\/p>\n<p><\/p>\n<p>Cu PostgreSQL este pu\u021bin mai complicat. Cu PostgreSQL trebuie s\u0103 ai o mai bun\u0103 \u00een\u021belegere a modului \u00een care func\u021bioneaz\u0103 Linux. \u0218i, \u00een acela\u0219i timp, trebuie s\u0103 fugi pu\u021bin dup\u0103 tren, pentru c\u0103, \u00een ultima vreme, totul se actualizeaz\u0103 destul de rapid. \u0218i noile kernel-uri sunt lansate, apare func\u021bionalitate nou\u0103, performan\u021ba se \u00eembun\u0103t\u0103\u021be\u0219te etc. <\/p>\n<p><\/p>\n<p>De ce discut\u0103m despre Linux? Nu pentru c\u0103 suntem la conferin\u021ba Linux din Petersburg, ci pentru c\u0103, \u00een condi\u021bii moderne, unul dintre cele mai justificate sisteme de operare pentru utilizarea cu baze de date \u00een general \u0219i cu PostgreSQL \u00een special este Linux. Deoarece FreeBSD, din p\u0103cate, se dezvolt\u0103 \u00eentr-o direc\u021bie destul de ciudat\u0103. Vor fi probleme at\u00e2t cu performan\u021ba, c\u00e2t \u0219i cu multe alte aspecte. <strong>Performan\u021ba PostgreSQL pe Windows este o tem\u0103 complet separat\u0103, care se bazeaz\u0103 pe faptul c\u0103 Windows nu are memorie \u00eemp\u0103rt\u0103\u0219it\u0103 ca UNIX, iar PostgreSQL se bazeaz\u0103 pe acest fapt, deoarece este un sistem multiproces.<\/strong> <\/p>\n<p><\/p>\n<p>\u0218i exotica precum Solaris, cred c\u0103 intereseaz\u0103 pe mult mai pu\u021bini, a\u0219a c\u0103 hai s\u0103 \u00eencepem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/990133933bd1816895fc8f73edaf900e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un sistem de distribu\u021bie Linux modern are peste 1.000 de parametri syctl, \u00een func\u021bie de cum este compilat kernel-ul. Dac\u0103 ne uit\u0103m \u0219i la diferite set\u0103ri, acolo putem ajusta \u0219i \u00een multe alte moduri. Exist\u0103 parametri pentru sisteme de fi\u0219iere, cum s\u0103 le monta\u021bi. Dac\u0103 ave\u021bi \u00eentreb\u0103ri, cum s\u0103 porni\u021bi: ce s\u0103 activa\u021bi \u00een BIOS, cum s\u0103 configura\u021bi hardware-ul etc.<\/p>\n<p><\/p>\n<p>Aceasta este o cantitate foarte mare despre care se poate vorbi zile \u00eentregi, nu \u00eentr-o scurt\u0103 prezentare, dar acum m\u0103 voi opri asupra lucrurilor importante, cum s\u0103 evita\u021bi acele capcane care cu siguran\u021b\u0103 nu v\u0103 vor permite s\u0103 exploata\u021bi bine baza de date pe Linux, dac\u0103 nu le corecta\u021bi. \u0218i un alt aspect important este c\u0103 multe set\u0103ri sunt activate implicit nu \u00een configura\u021bii corecte pentru baza de date. Adic\u0103, \u00een mod implicit, va func\u021biona prost sau nu va func\u021biona deloc. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/189f6497c795a5e5fd5b458edfadb22f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ce \u021binte tradi\u021bionale de optimizare exist\u0103 \u00een Linux? Cred c\u0103, deoarece to\u021bi ave\u021bi de-a face cu administrarea Linux, nu trebuie s\u0103 explic ce sunt \u021bintele. <\/p>\n<p><\/p>\n<p>Se poate optimiza:<\/p>\n<p><\/p>\n<ul>\n<li>CPU.<\/li>\n<li>Memorie.<\/li>\n<li>Stocare.<\/li>\n<li>Altele. Despre asta vom vorbi la final, ca un desert. Chiar \u0219i parametrii, cum ar fi politica de economisire a energiei, pot afecta performan\u021ba \u00eentr-un mod foarte imprevizibil \u0219i nepl\u0103cut. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/92916aadaf123a3f836bed3a2c1bd95a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Care este specificitatea PostgreSQL \u0219i a bazei de date \u00een general? Problema este c\u0103 nu po\u021bi optimiza doar un singur element \u0219i s\u0103 te a\u0219tep\u021bi c\u0103 performan\u021ba va \u00eembun\u0103t\u0103\u021bi semnificativ. <\/p>\n<p><\/p>\n<p>Da, exist\u0103 astfel de elemente, dar baza de date este un sistem complex. Aceasta interac\u021bioneaz\u0103 cu toate resursele disponibile pe server \u0219i prefer\u0103 s\u0103 interac\u021bioneze complet. Dac\u0103 prive\u0219ti recomand\u0103rile actuale ale Oracle despre cum s\u0103 utilizezi sistemul de operare gazd\u0103, va fi ca \u00een gluma despre acel cosmonaut mongol \u2013 s\u0103 hr\u0103ne\u0219ti c\u00e2inele \u0219i s\u0103 nu atingi nimic. S\u0103 d\u0103m bazei toate resursele, baza de date se va descurca singur\u0103. <\/p>\n<p><\/p>\n<p>\u00cen principiu, situa\u021bia cu PostgreSQL este exact aceea\u0219i \u00een mare m\u0103sur\u0103. Diferen\u021ba este c\u0103 baza de date nu este capabil\u0103 s\u0103 \u00ee\u0219i aloce toate resursele, adic\u0103 unele lucruri trebuie gestionate la nivel de Linux. <\/p>\n<p><\/p>\n<p>Ideea principal\u0103 este s\u0103 nu alegi o singur\u0103 \u021bint\u0103 \u0219i s\u0103 \u00eencepi s\u0103 o optimizezi, de exemplu, memoria, CPU sau ceva similar, ci s\u0103 analizezi sarcina de lucru \u0219i s\u0103 \u00eencerci s\u0103 \u00eembun\u0103t\u0103\u021be\u0219ti c\u00e2t mai mult l\u0103\u021bimea de band\u0103, astfel \u00eenc\u00e2t sarcina pe care buni programatori ne-au creat-o, inclusiv utilizatorii no\u0219tri, s\u0103 treac\u0103 prin baza noastr\u0103 de date c\u00e2t mai eficient. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/2db6c11a6f612b8aecccfe126be4fd7f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Iat\u0103 o imagine care explic\u0103 ce este aceasta. Exist\u0103 un buffer al sistemului de operare Linux, exist\u0103 memorie partajat\u0103 \u0219i exist\u0103 bufferi partaja\u021bi PostgreSQL. Spre deosebire de Oracle, PostgreSQL func\u021bioneaz\u0103 direct doar prin bufferul kernel-ului, adic\u0103 pentru ca o pagin\u0103 de pe disc s\u0103 ajung\u0103 \u00een memoria sa partajat\u0103, trebuie s\u0103 treac\u0103 prin bufferul kernel \u0219i \u00eenapoi exact aceea\u0219i situa\u021bie. <\/p>\n<p><\/p>\n<p>Sub acest sistem se afl\u0103 discurile. Le-am desenat ca discuri. De fapt, acolo poate fi un controler RAID etc. <\/p>\n<p><\/p>\n<p>\u0218i astfel, acest input-output se desf\u0103\u0219oar\u0103 \u00eentr-un fel sau altul prin aceasta.<\/p>\n<p><\/p>\n<p>PostgreSQL este o baz\u0103 de date clasic\u0103. Acolo se afl\u0103 paginile. \u0218i tot input-output se desf\u0103\u0219oar\u0103 cu ajutorul paginilor. Ridic\u0103m blocuri \u00een memorie cu paginile. \u0218i dac\u0103 nu s-a \u00eent\u00e2mplat nimic, le-am citit doar, atunci treptat acestea din cache, din bufferii partaja\u021bi, ajung \u00eenapoi pe disc. <\/p>\n<p><\/p>\n<p>Dac\u0103 undeva am \u00eenlocuit ceva, atunci \u00eentreaga pagin\u0103 este marcat\u0103 ca murdar\u0103. Le-am marcat aici cu culoarea albastr\u0103. \u0218i asta \u00eenseamn\u0103 c\u0103 aceast\u0103 pagin\u0103 trebuie s\u0103 fie sincronizat\u0103 cu stocarea pe bloc. Adic\u0103, c\u00e2nd am f\u0103cut-o murdar\u0103, am \u00eenregistrat-o \u00een WAL. \u0218i \u00eentr-un anumit moment, a ap\u0103rut un fenomen numit checkpoint. \u0218i \u00een acest log s-a \u00eenregistrat informa\u021bia c\u0103 a ap\u0103rut. \u0218i asta \u00eenseamn\u0103 c\u0103 toate paginile murdare care erau \u00een acel moment \u00een ace\u0219ti bufferi partaja\u021bi s-au sincronizat cu discul de stocare prin fsync prin bufferul kernel.<\/p>\n<p><\/p>\n<p>De ce se face aceasta? Dac\u0103 ne pierdem tensiunea, nu avem situa\u021bia \u00een care toate datele au disp\u0103rut. Memoria persistent\u0103, de care ne-au vorbit to\u021bi, este \u00een prezent, \u00een teoria bazelor de date \u2013 un viitor luminos, la care, desigur, aspir\u0103m \u0219i ne place, dar \u00een prezent ele mai tr\u0103iesc cu 20 de ani \u00een urm\u0103. \u0218i, desigur, trebuie s\u0103 \u021binem totul sub observa\u021bie.<\/p>\n<p><\/p>\n<p>Iar sarcina de maximizare a capacit\u0103\u021bii de transfer este s\u0103 ajust\u0103m toate aceste etape, astfel \u00eenc\u00e2t totul s\u0103 func\u021bioneze rapid. Memoria partajat\u0103 este \u00een principal un cache de pagini. \u00cen PostgreSQL am trimis o cerere select pentru ceva, a ob\u021binut aceste date de pe disc. Ele au ajuns \u00een bufferii partaja\u021bi. Prin urmare, pentru a func\u021biona mai bine, trebuie s\u0103 avem mult\u0103 memorie.<\/p>\n<p><\/p>\n<p>Pentru ca totul s\u0103 func\u021bioneze bine \u0219i rapid, trebuie s\u0103 configura\u021bi corect sistemul de operare \u00een toate etapele. De asemenea, trebuie s\u0103 alege\u021bi hardware-ul \u00een mod echilibrat, deoarece, dac\u0103 exist\u0103 un dezechilibru undeva, pute\u021bi avea foarte mult\u0103 memorie, dar aceasta va func\u021biona cu o vitez\u0103 insuficient\u0103. <\/p>\n<p><\/p>\n<p>Hai s\u0103 discut\u0103m despre fiecare dintre ace\u0219ti pa\u0219i.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/fe031218be39cd727f3a76b22563e101.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pentru ca aceste pagini s\u0103 c\u0103l\u0103toreasc\u0103 rapid de colo-colo, trebuie s\u0103 ob\u021binem urm\u0103toarele:<\/p>\n<p><\/p>\n<ul>\n<li>\u00cen primul r\u00e2nd, trebuie s\u0103 lucr\u0103m mai eficient cu memoria.<\/li>\n<li>\u00cen al doilea r\u00e2nd, trecerea acestora atunci c\u00e2nd paginile lejer din memorie intr\u0103 pe disc trebuie s\u0103 fie mai eficient\u0103.<\/li>\n<li>\u0218i, \u00een al treilea r\u00e2nd, trebuie s\u0103 avem discuri bune. <\/li>\n<\/ul>\n<p><\/p>\n<p>Dac\u0103 ave\u021bi 512 GB de memorie RAM \u00een <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/ro\/server\/dts-dronten\/\"   title=\"server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2587\">server<\/a> \u0219i totul ajunge \u00een final pe un disc dur SATA f\u0103r\u0103 niciun cache, atunci \u00eentregul server de baze de date se transform\u0103 nu doar \u00een dovleac, ci \u00eentr-un dovleac cu interfa\u021b\u0103 SATA. Vei \u00eent\u00e2lni acest lucru direct. \u0218i nimic nu te va salva.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/6630e445c96e94621ae670bc4aee8492.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cen ceea ce prive\u0219te primul punct despre memorie, sunt trei aspecte care pot complica foarte mult via\u021ba. <\/p>\n<p><\/p>\n<p>Primul dintre acestea este NUMA. NUMA este un concept creat pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba. \u00cen func\u021bie de sarcina de lucru, se pot optimiza diferite aspecte. \u0218i \u00een forma ei actual\u0103, pentru aplica\u021bii precum bazele de date care utilizeaz\u0103 intens cache-ul de pagini \u0219i buffer-ele partajate, nu este foarte eficient\u0103. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/8fcf2af82a96bd1ac52fb0a36bf0b0b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pe scurt. Cum \u00ee\u021bi dai seama c\u0103 ceva nu e \u00een regul\u0103 cu NUMA? Ai un zgomot nepl\u0103cut, iar brusc un procesor devine supra\u00eenc\u0103rcat. Totodat\u0103, analizezi cererile din PostgreSQL \u0219i vezi c\u0103 nu exist\u0103 nimic care s\u0103 semene cu asta. Aceste cereri nu ar trebui s\u0103 consume CPU at\u00e2t de intensiv. \u00ce\u021bi va lua mult timp s\u0103 identifici problema. E mai simplu s\u0103 urmezi din start recomandarea corect\u0103 despre cum s\u0103 configurezi NUMA pentru PostgreSQL.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/424b8677e5ae1382b9b49b288e045a3f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ce se \u00eent\u00e2mpl\u0103, de fapt? NUMA este Non-Uniform Memory Access. Despre ce este vorba? Ai un CPU, iar l\u00e2ng\u0103 el este memoria local\u0103. Aceast\u0103 memorie interconectat\u0103 poate accesa memoria de la alte CPU-uri.<\/p>\n<p><\/p>\n<p>Dac\u0103 rulezi <code>numactl --hardware<\/code>, va ap\u0103rea un \u0219ir lung de informa\u021bii. Printre altele, va fi un c\u00e2mp numit distan\u021be. Vor fi numere \u2013 10-20, ceva de genul. Aceste numere nu sunt altceva dec\u00e2t num\u0103rul de hop-uri necesare pentru a accesa aceast\u0103 memorie la distan\u021b\u0103 \u0219i a o utiliza local. \u00cen principiu, este o idee bun\u0103. Aceasta \u00eembun\u0103t\u0103\u021be\u0219te considerabil performan\u021ba pentru anumite sarcini de lucru.<\/p>\n<p><\/p>\n<p>Acum imagina\u021bi-v\u0103 c\u0103 ave\u021bi un CPU care \u00eencearc\u0103 mai \u00eent\u00e2i s\u0103 foloseasc\u0103 memoria sa local\u0103, apoi \u00eencearc\u0103 s\u0103 acceseze o alt\u0103 memorie prin interconectare pentru ceva. \u0218i pe acest CPU ajunge tot cache-ul de pagini PostgreSQL \u2013 c\u00e2teva gigabytes. \u00centotdeauna ob\u021bii cea mai proast\u0103 situa\u021bie, deoarece pe CPU, \u00een mod direct \u00een acest modul de memorie, exist\u0103 de obicei pu\u021bin. Iar toat\u0103 memoria care este accesat\u0103 trece prin aceste interconect\u0103ri. Devine lent \u0219i trist. \u0218i ai un procesor care deserve\u0219te acest nod, constant supra\u00eenc\u0103rcat. Iar timpul de acces la aceast\u0103 memorie este prost, lent. Aceasta este situa\u021bia pe care nu vrei s\u0103 o ai dac\u0103 folose\u0219ti acest lucru pentru o baz\u0103 de date. <\/p>\n<p><\/p>\n<p>Prin urmare, o variant\u0103 mai bun\u0103 pentru bazele de date este ca sistemul de operare Linux s\u0103 nu \u0219tie deloc ce se \u00eent\u00e2mpl\u0103 acolo. S\u0103 acceseze memoria a\u0219a cum ar trebui. <\/p>\n<p><\/p>\n<p>De ce a\u0219a? Ar p\u0103rea c\u0103 ar trebui s\u0103 fie invers. Se \u00eent\u00e2mpl\u0103 dintr-un singur motiv simplu, c\u0103 avem nevoie de mult\u0103 memorie pentru cache-ul de pagini \u2013 zeci, sute de gigabytes. <\/p>\n<p><\/p>\n<p>\u0218i dac\u0103 am alocat totul \u0219i ne-am cache-uit datele acolo, atunci c\u00e2\u0219tigul din utilizarea cache-ului va fi considerabil mai mare dec\u00e2t c\u00e2\u0219tigul dintr-o abordare complicat\u0103 a memoriei. Astfel, vom c\u00e2\u0219tiga \u00een mod necomparabil comparativ cu faptul c\u0103 vom accesa memoria mai eficient folosind NUMA.<\/p>\n<p><\/p>\n<p>Prin urmare, \u00een prezent exist\u0103 dou\u0103 abord\u0103ri, p\u00e2n\u0103 c\u00e2nd un viitor luminos va veni \u0219i baza de date nu va putea s\u0103-\u0219i dea seama singur\u0103 pe ce CPU func\u021bioneaz\u0103 \u0219i de unde ar trebui s\u0103 acceseze ceva. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/218513d407ea77320057d57b447c54d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Astfel, abordarea corect\u0103 este s\u0103 dezactiv\u0103m complet NUMA.<\/strong>, de exemplu, la repornire. \u00cen majoritatea cazurilor, c\u00e2\u0219tigurile sunt at\u00e2t de mari, \u00eenc\u00e2t nu mai exist\u0103 nicio \u00eentrebare despre ce este mai bine. <\/p>\n<p><\/p>\n<p>Exist\u0103 o alt\u0103 variant\u0103. O folosim mai des dec\u00e2t pe prima, deoarece, atunci c\u00e2nd avem un client care are nevoie de suport, pentru el repornirea serverului este un \u00eentreg proces. Are acolo o afacere \u00een desf\u0103\u0219urare. \u0218i ei au probleme din cauza NUMA. Prin urmare, \u00eencerc\u0103m s\u0103 dezactiv\u0103m \u00eentr-un mod mai pu\u021bin invaziv dec\u00e2t prin reboot, dar aici trebuie s\u0103 verifica\u021bi cu aten\u021bie c\u0103 aceasta s-a dezactivat. Pentru c\u0103, a\u0219a cum arat\u0103 experien\u021ba, dac\u0103 dezactiv\u0103m NUMA pentru procesul p\u0103rinte PostgreSQL, este bine, dar nu este deloc obligatoriu c\u0103 aceasta va func\u021biona. Trebuie s\u0103 verifici \u0219i s\u0103 te asiguri c\u0103 s-a dezactivat cu adev\u0103rat. <\/p>\n<p><\/p>\n<p>Exist\u0103 un articol interesant de Robert Haas. Este unul dintre commiters PostgreSQL. Unul dintre dezvoltatorii cheie ai tuturor aspectelor de baz\u0103. Dac\u0103 trece\u021bi prin linkurile din acest articol, ve\u021bi g\u0103si c\u00e2teva pove\u0219ti interesante despre cum NUMA le-a complicat via\u021ba oamenilor. Vede\u021bi, studia\u021bi lista de verificare pentru adminii de sistem, ce trebuie configurat pe server pentru a ne asigura c\u0103 baza de date func\u021bioneaz\u0103 bine. Aceste set\u0103ri trebuie notate \u0219i verificate, altfel va fi destul de nepl\u0103cut. <\/p>\n<p><\/p>\n<p>Atrag aten\u021bia c\u0103 acest lucru se refer\u0103 la toate set\u0103rile despre care voi vorbi. Dar, de obicei, bazele de date sunt configurate \u00een mod master-slave pentru redundan\u021b\u0103. Nu uita\u021bi s\u0103 face\u021bi aceste set\u0103ri \u0219i pe slave, deoarece la un moment dat s-ar putea s\u0103 ave\u021bi o avarie \u0219i ve\u021bi comuta pe slave, iar acesta va deveni master. <\/p>\n<p><\/p>\n<p>\u00centr-o situa\u021bie de urgen\u021b\u0103, c\u00e2nd totul este foarte r\u0103u, telefonul v\u0103 sun\u0103 constant \u0219i \u0219eful vine cu un baston mare, nu ve\u021bi avea timp s\u0103 v\u0103 g\u00e2ndi\u021bi s\u0103 verifica\u021bi. \u0218i rezultatele pot fi destul de dezastroase.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/d2fdda7ad4570554b0e134758295f83e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Urm\u0103torul aspect este huge pages. Huge pages sunt dificile de testat separat \u0219i nu are sens s\u0103 o face\u021bi, de\u0219i exist\u0103 benchmark-uri care pot face acest lucru. Ele sunt u\u0219or de g\u0103sit pe internet. <\/p>\n<p><\/p>\n<p>Care este ideea? Ave\u021bi un server relativ ieftin, cu mult\u0103 memorie RAM, de exemplu, mai mult de 30 GB. Nu folosi\u021bi huge pages. Asta \u00eenseamn\u0103 c\u0103 exist\u0103 cu siguran\u021b\u0103 overhead \u00een utilizarea memoriei. Iar acest overhead nu este deloc pl\u0103cut. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/28c3c94390a6afef815f712ac9189c2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De ce se \u00eent\u00e2mpl\u0103 asta? Ce se petrece? Sistemul de operare aloc\u0103 memorie \u00een buc\u0103\u021bi mici. Asa este convenabil, a\u0219a a fost istoric. \u0218i dac\u0103 detaliem, OS-ul trebuie s\u0103 transleze adresele virtuale \u00een cele fizice. \u0218i acest proces nu este cel mai simplu, de aceea OS-ul stocheaz\u0103 rezultatul acestei opera\u021bii \u00een Translation Lookaside Buffer (TLB).<\/p>\n<p><\/p>\n<p>\u0218i deoarece TLB-ul este un cache, \u00een astfel de situa\u021bii apar toate problemele specifice cache-ului. \u00cen primul r\u00e2nd, dac\u0103 ave\u021bi foarte mult\u0103 memorie RAM \u0219i aceasta este alocat\u0103 \u00een buc\u0103\u021bi mici, bufferul devine foarte mare. Iar dac\u0103 cache-ul este mare, c\u0103utarea devine mai lent\u0103. Overhead-ul este considerabil \u0219i acesta \u00een sine ocup\u0103 spa\u021biu, adic\u0103 memoria RAM este consumat\u0103 de ceva nepotrivit. Asta e una. <\/p>\n<p><\/p>\n<p>Dou\u0103 \u2013 cu c\u00e2t cache-ul se extinde mai mult \u00een aceast\u0103 situa\u021bie, cu at\u00e2t este mai mare \u0219ansa s\u0103 ave\u021bi cache misses. Eficien\u021ba acestui cache scade rapid pe m\u0103sur\u0103 ce dimensiunea sa cre\u0219te. De aceea, \u00een sistemele de operare a fost adoptat\u0103 o abordare simpl\u0103. \u00cen Linux, aceasta este utilizat\u0103 de mult timp. \u00cen FreeBSD a ap\u0103rut nu de mult. Dar vorbim despre Linux. Acestea sunt huge pages.<\/p>\n<p><\/p>\n<p>Trebuie men\u021bionat c\u0103 huge pages, ca idee, a fost ini\u021bial sus\u021binut\u0103 de comunit\u0103\u021bi care includeau Oracle \u0219i IBM, adic\u0103 produc\u0103torii de baze de date s-au g\u00e2ndit serios c\u0103 va fi util\u0103 \u0219i pentru baze de date. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/39a24536929fbcf551d8ba1c8e7faf32.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i cum s\u0103 le integr\u0103m cu PostgreSQL? \u00cen primul r\u00e2nd, \u00een kernel-ul Linux trebuie s\u0103 fie activate huge pages.<\/p>\n<p><\/p>\n<p>\u00cen al doilea r\u00e2nd, acestea trebuie specificate explicit printr-un parametru sysctl \u2013 c\u00e2te sunt. Numerele aici provin de la un server mai vechi. Pute\u021bi calcula c\u00e2te shared buffers ave\u021bi aproximativ, astfel \u00eenc\u00e2t huge pages s\u0103 \u00eencap\u0103 acolo. <\/p>\n<p><\/p>\n<p>Dac\u0103 \u00eentregul server este dedicat PostgreSQL, o bun\u0103 punct de plecare este fie s\u0103 aloca\u021bi 25 % din memoria RAM pentru shared buffers, fie 75 %, dac\u0103 sunte\u021bi sigur c\u0103 baza de date se va \u00eencadra \u00een aceste 75 %. Aceasta este prima punct de plecare. \u0218i calcula\u021bi, dac\u0103 ave\u021bi 256 GB de memorie RAM, atunci, conform calculului, ve\u021bi avea 64 GB pentru shared buffers. Face\u021bi calculul aproximativ cu un mic surplus \u2013 c\u00e2t ar trebui s\u0103 aib\u0103 aceast\u0103 cifr\u0103.<\/p>\n<p><\/p>\n<p>P\u00e2n\u0103 la versiunea 9.2 (dac\u0103 nu m\u0103 \u00een\u0219el, de la versiunea 8.2) era posibil s\u0103 integra\u021bi PostgreSQL cu huge pages printr-o bibliotec\u0103 extern\u0103. Aceasta este \u00eentotdeauna necesar. \u00cen primul r\u00e2nd, ave\u021bi nevoie ca nucleul s\u0103 poat\u0103 aloca corect huge pages. \u00cen al doilea r\u00e2nd, aplica\u021bia care lucreaz\u0103 cu acestea trebuie s\u0103 fie capabil\u0103 s\u0103 le utilizeze. Pur \u0219i simplu nu le va utiliza. Deoarece PostgreSQL aloca memorie \u00een stilul system 5, acest lucru se putea face prin libhugetlbfs \u2013 acesta este numele complet al bibliotecii.<\/p>\n<p><\/p>\n<p>\u00cen versiunea 9.3, a fost \u00eembun\u0103t\u0103\u021bit\u0103 performan\u021ba PostgreSQL \u00een ceea ce prive\u0219te gestionarea memoriei \u0219i s-a renun\u021bat la metoda de alocare a memoriei system 5. Toat\u0103 lumea a fost foarte \u00eenc\u00e2ntat\u0103, deoarece altfel, atunci c\u00e2nd \u00eencerci s\u0103 rulezi dou\u0103 instan\u021be PostgreSQL pe o ma\u0219in\u0103, prime\u0219ti mesajul c\u0103 nu ai suficient\u0103 memorie partajat\u0103. \u00ce\u021bi spune c\u0103 trebuie s\u0103 ajustezi sysctl. \u0218i acel sysctl este at\u00e2t de complicat \u00eenc\u00e2t trebuie s\u0103 te reinventezi \u0219i a\u0219a mai departe. \u00cen general, toat\u0103 lumea a fost bucuroas\u0103. Dar alocarea memoriei prin mmap a afectat utilizarea huge pages. Majoritatea clien\u021bilor no\u0219tri folosesc buffer-uri partajate mari. \u0218i am recomandat insistent s\u0103 nu se treac\u0103 la 9.3, deoarece overhead-ul \u00eencepea s\u0103 conteze serios \u00een procente.<\/p>\n<p><\/p>\n<p>\u00cens\u0103, comunitatea a observat aceast\u0103 problem\u0103 \u0219i \u00een versiunea 9.4 au reg\u00e2ndit foarte bine acest aspect. \u00cen 9.4 a ap\u0103rut un parametru \u00een postgresql.conf, care permite activarea op\u021biunii try, on sau off.<\/p>\n<p><\/p>\n<p>Try \u2013 este cel mai sigur parametru. La pornirea PostgreSQL, c\u00e2nd acesta aloc\u0103 memorie partajat\u0103, \u00eencearc\u0103 s\u0103 ob\u021bin\u0103 acea memorie din huge pages. \u0218i dac\u0103 nu reu\u0219e\u0219te, revine la alocarea obi\u0219nuit\u0103. Dac\u0103 utiliza\u021bi FreeBSD sau Solaris, pute\u021bi seta try, este \u00eentotdeauna sigur. <\/p>\n<p><\/p>\n<p>Dac\u0103 este on, nu va porni pur \u0219i simplu, dac\u0103 nu a reu\u0219it s\u0103 aloce din huge pages. Aici depinde doar de preferin\u021bele fiec\u0103ruia. Dar dac\u0103 a\u021bi ales try, verifica\u021bi c\u0103 a\u021bi ob\u021binut cu adev\u0103rat ceea ce trebuie alocat, deoarece sunt multe spa\u021bii pentru gre\u0219eli. Acest func\u021bionalitate func\u021bioneaz\u0103 doar pe Linux.<\/p>\n<p><\/p>\n<p>\u00cenc\u0103 o mic\u0103 observa\u021bie, \u00eenainte de a merge mai departe. Transparent huge pages \u2013 nu se refer\u0103, deocamdat\u0103, la PostgreSQL. Acesta nu poate beneficia de ele \u00een mod corespunz\u0103tor. \u0218i \u00een cazul Transparent huge pages, pentru un astfel de workload, c\u00e2nd este necesar\u0103 o por\u021biune mare de memorie partajat\u0103, avantajele apar doar la volume foarte mari. Dac\u0103 ave\u021bi terabytes de memorie, atunci acest lucru ar putea fi relevant. Dac\u0103 discut\u0103m despre utiliz\u0103ri mai obi\u0219nuite, c\u00e2nd ave\u021bi 32, 64, 128, 256 GB de memorie pe ma\u0219in\u0103, atunci huge pages obi\u0219nuite sunt acceptabile, iar Transparent trebuie pur \u0219i simplu dezactivat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/18cf3ace8876e55b42e66f617a24f1bc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i ultimul lucru, legat de memorie, care nu este direct asociat cu throughput-ul, poate afecta foarte mult experien\u021ba. \u00centreaga capacitate de procesare va fi foarte afectat\u0103 de faptul c\u0103 serverul constant swap-uie\u0219te. <\/p>\n<p><\/p>\n<p>\u0218i asta va fi foarte nepl\u0103cut \u00een mai multe momente. Principalul neajuns const\u0103 \u00een faptul c\u0103, \u00een nucleele moderne, comportamentul difer\u0103 pu\u021bin de cel al nuclelor Linux mai vechi. Acesta este un aspect pe care este destul de nepl\u0103cut s\u0103-l \u00eent\u00e2mpini, pentru c\u0103, atunci c\u00e2nd vorbim despre o anumit\u0103 lucrare cu swap-ul, se \u00eencheie cu sosirea tardiv\u0103 a OOM-killer-ului. Iar OOM-killer-ul care a sosit tardiv \u0219i a eliminat PostgreSQL este o nepl\u0103cere. Toat\u0103 lumea va afla despre asta, adic\u0103 p\u00e2n\u0103 la ultimul utilizator. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/c7c46ff0f4cd8cfcfb21978dd1da4c08.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ce se \u00eent\u00e2mpl\u0103? Ave\u021bi acolo o cantitate mare de memorie RAM, totul func\u021bioneaz\u0103 bine. Dar de ce serverul se blocheaz\u0103 \u00een swap \u0219i se \u00eencetine\u0219te din aceast\u0103 cauz\u0103? P\u0103rea c\u0103 este mult\u0103 memorie, dar se \u00eent\u00e2mpl\u0103 a\u0219a. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/24d19929f1506cd9768a836095a24dfb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cen trecut, sf\u0103tuiam s\u0103 set\u0103m vm.swappiness la zero, adic\u0103 s\u0103 dezactiv\u0103m swap-ul. Se p\u0103rea c\u0103 32 GB de memorie RAM \u0219i buffer-ele partajate corespunz\u0103toare reprezint\u0103 o cantitate imens\u0103. Principalul scop al swap-ului era s\u0103 existe un loc unde s\u0103 arunc\u0103m un snapshot, \u00een cazul \u00een care ne deconect\u0103m. Acesta nu \u00ee\u0219i mai \u00eendeplinea cu adev\u0103rat rolul. \u0218i ce vei face ulterior cu acel snapshot? Aceasta devine o problem\u0103, c\u00e2nd nu este clar de ce este necesar swap-ul, mai ales de o asemenea dimensiune. <\/p>\n<p><\/p>\n<p>Dar \u00een nucleele moderne, adic\u0103 \u00een versiunile a treia, comportamentul s-a schimbat. \u0218i dac\u0103 setezi swap-ul la zero, adic\u0103 \u00eel dezactivezi, mai devreme sau mai t\u00e2rziu, chiar \u0219i cu o cantitate de memorie RAM disponibil\u0103, OOM-killer-ul va veni s\u0103 ucid\u0103 cei mai mari consumatori. Pentru c\u0103 el va considera c\u0103, av\u00e2nd un astfel de volum de lucru, ne-a mai r\u0103mas pu\u021bin \u0219i vom ie\u0219i, adic\u0103 nu va ucide un proces sistemic, ci va elimina ceva mai pu\u021bin important. Acest lucru mai pu\u021bin important va fi un consumator intens de memorie partajat\u0103, adic\u0103 postmaster-ul. \u0218i dup\u0103 aceea, va fi bine dac\u0103 nu va trebui s\u0103 restaurezi baza de date. <\/p>\n<p><\/p>\n<p>Prin urmare, acum, conform informa\u021biilor pe care le am, majoritatea distribu\u021biilor setez\u0103 \u00een mod implicit cam 6, adic\u0103 \u00een ce moment \u00eencepe utilizarea swap-ului \u00een func\u021bie de cantitatea de memorie r\u0103mas\u0103. <strong>Acum recomand\u0103m s\u0103 set\u0103m vm.swappiness = 1, deoarece acest lucru practic \u00eel dezactiveaz\u0103, dar nu produce efectele pe care le cauzeaz\u0103 sosirea nea\u0219teptat\u0103 a OOM-killer-ului \u0219i tot acest proces de eliminare.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/20f01dca0aff819abcbb687cea69ac74.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ce urmeaz\u0103? Atunci c\u00e2nd discut\u0103m despre performan\u021ba bazelor de date \u0219i ne apropiem treptat de discuri, toat\u0103 lumea \u00eencepe s\u0103 se panicheze. Pentru c\u0103 adev\u0103rul c\u0103 discul este lent \u0219i memoria rapid\u0103 este bine cunoscut de to\u021bi. \u0218i toat\u0103 lumea \u0219tie c\u0103 \u00een baza de date vor ap\u0103rea probleme cu performan\u021ba discului.<\/p>\n<p><\/p>\n<p>Problema principal\u0103 cu performan\u021ba PostgreSQL, legat\u0103 de v\u00e2rfurile checkpoint-urilor, nu apare din cauza faptului c\u0103 discul este lent. Este mai degrab\u0103 pentru c\u0103 l\u0103\u021bimea de band\u0103 a memoriei \u0219i discului nu sunt echilibrate. Acestea pot fi dezechilibrate \u00een diferite loca\u021bii. PostgreSQL nu este configurat corect, sistemul de operare nu este configurat, hardware-ul nu este configurat \u0219i hardware-ul este gre\u0219it. Aceast\u0103 problem\u0103 nu apare doar dac\u0103 totul se desf\u0103\u0219oar\u0103 conform planului, adic\u0103 fie nu exist\u0103 \u00eenc\u0103rcare, fie configur\u0103rile \u0219i hardware-ul sunt bine corelate. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/c4d841f9ed48bb5bb1b29bd9f189753f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ce este asta \u0219i cum arat\u0103? De obicei, persoanele care lucreaz\u0103 cu PostgreSQL s-au implicat \u00een acest proces de mai multe ori. Voi explica. A\u0219a cum am spus, PostgreSQL face periodic checkpoint-uri pentru a salva paginile murdare din memoria partajat\u0103 pe disc. Dac\u0103 avem un volum mare de memorie partajat\u0103, atunci checkpoint-ul \u00eencepe s\u0103 afecteze intens discul, deoarece salveaz\u0103 aceste pagini cu fsync. Acesta ajunge \u00een buffer-ul kernel \u0219i este scris pe discuri cu ajutorul fsync. \u0218i dac\u0103 volumul acestui proces este mare, putem observa un efect nepl\u0103cut, \u0219i anume o utilizare foarte mare a discurilor.<\/p>\n<p><\/p>\n<p>Aici am dou\u0103 imagini. Voi explica acum ce este. Acestea sunt dou\u0103 grafice corelate \u00een timp. Primul grafic \u2013 este utilizarea discului. Aici atinge aproape 90% \u00een acest moment. Dac\u0103 ave\u021bi o baz\u0103 de date cu discuri fizice \u0219i cu un controler RAID, utilizarea aproape de 90% este o veste proast\u0103. \u00censeamn\u0103 c\u0103 \u00eenc\u0103 pu\u021bin \u0219i va ajunge la 100, iar intrarea-ie\u0219irea se va opri. <\/p>\n<p><\/p>\n<p>Dac\u0103 ave\u021bi un array de discuri, atunci este o alt\u0103 poveste. Asta depinde de modul \u00een care este configurat, ce tip de array \u0219i a\u0219a mai departe. <\/p>\n<p><\/p>\n<p>\u00cen paralel, aici este configurat un grafic dintr-o vedere intern\u0103 Postgres care arat\u0103 cum decurge checkpoint-ul. \u0218i cu verde este marcat num\u0103rul de buffere, adic\u0103 paginile murdare care \u00een acest moment au fost trimise \u00een acest checkpoint pentru sincronizare. Acesta este aspectul principal pe care trebuie s\u0103-l \u0219tim. Vedem c\u0103 aici avem multe pagini venind \u0219i, \u00eentr-un anumit moment, ne-am lovit de limit\u0103, adic\u0103 am scris continuu, iar sistemul de disc este evident foarte ocupat. \u0218i checkpoint-ul nostru influen\u021beaz\u0103 semnificativ discul. Ideal, situa\u021bia ar trebui s\u0103 arate mai degrab\u0103 a\u0219a, adic\u0103 ar trebui s\u0103 fie mai pu\u021bin\u0103 scriere. \u0218i putem ajusta set\u0103rile pentru a face ca situa\u021bia s\u0103 r\u0103m\u00e2n\u0103 astfel. Adic\u0103, utilizarea este mic\u0103, dar totu\u0219i scriem ceva aici. <\/p>\n<p><\/p>\n<p>Ce trebuie s\u0103 facem pentru a dep\u0103\u0219i aceast\u0103 problem\u0103? Dac\u0103 I\/O-ul pentru baza de date s-a oprit, asta \u00eenseamn\u0103 c\u0103 to\u021bi utilizatorii care au venit s\u0103 execute cererile lor vor fi \u00een a\u0219teptare. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/3efac5fe79443c32f56ec8da2f418116.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dac\u0103 ne uit\u0103m din perspectiva Linux-ului, dac\u0103 ai un hardware bun, l-ai configurat corect \u0219i ai configurat PostgreSQL astfel \u00eenc\u00e2t s\u0103 efectueze aceste checkpoint-uri mai rar, dispun\u00e2ndu-le \u00een timp, ajungi la parametrii impliciti ai Debian-ului. Pentru majoritatea distribu\u021biilor Linux, situa\u021bia este urm\u0103toarea: vm.dirty_ratio=20, vm.dirty_background_ratio=10.<\/p>\n<p><\/p>\n<p>Ce \u00eenseamn\u0103 asta? Cu kernel-ul 2.6 a ap\u0103rut un demon de flushing. Pgflush, \u00een func\u021bie de cine-l folose\u0219te, se ocup\u0103 cu desc\u0103rcarea paginilor murdare din buffer-ul kernel \u00een fundal \u0219i desc\u0103rcarea acestora c\u00e2nd este necesar, chiar \u0219i atunci c\u00e2nd desc\u0103rcarea \u00een fundal nu ajut\u0103. <\/p>\n<p><\/p>\n<p>C\u00e2nd apare fundalul? C\u00e2nd 10% din \u00eentreaga memorie RAM de pe server este ocupat\u0103 de paginile murdare din buffer-ul kernel, este apelat\u0103 o func\u021bie special\u0103 pentru desc\u0103rcarea \u00een fundal. De ce este aceasta fundal? Ea prime\u0219te ca parametru c\u00e2te pagini s\u0103 descarce. De exemplu, descarc\u0103 N pagini. \u0218i pentru o vreme, acest proces intr\u0103 \u00een starea de odihn\u0103. Apoi, revine \u0219i descarc\u0103 un alt num\u0103r de pagini. <\/p>\n<p><\/p>\n<p>Este o poveste extrem de simpl\u0103. Aici este o problem\u0103 similar\u0103 cu un bazin, c\u00e2nd \u00eentr-un \u021beav\u0103 se toarn\u0103 ap\u0103, \u00een cealalt\u0103 se umple. Aici a venit checkpoint-ul \u0219i, dac\u0103 nu a trimis suficiente pagini murdare la desc\u0103rcare, acestea vor fi absorbite treptat din buffer-ul kernel de pgflush. <\/p>\n<p><\/p>\n<p>Dac\u0103 aceste pagini murdare continu\u0103 s\u0103 acumulese, acestea ajung la 20%, dup\u0103 care sistemul de operare prioritizeaz\u0103 s\u0103 scrie toate acestea pe disc, deoarece dac\u0103 alimentarea pic\u0103, vom avea probleme. Vom pierde aceste date, de exemplu. <\/p>\n<p><\/p>\n<p>Care este trucul? <strong>Trucul const\u0103 \u00een faptul c\u0103 ace\u0219ti parametri, \u00een lumea modern\u0103, sunt 20% \u0219i 10% din toat\u0103 memoria RAM disponibil\u0103 pe ma\u0219in\u0103, sunt complet inacceptabili din punctul de vedere al l\u0103\u021bimii de band\u0103 a oric\u0103rei sisteme de disc pe care o ave\u021bi.<\/strong> <\/p>\n<p><\/p>\n<p>Imagina\u021bi-v\u0103 c\u0103 ave\u021bi 128 GB de memorie RAM. 12,8 GB ajung \u00een sistemul dumneavoastr\u0103 de discuri. Indiferent de cache-ul pe care \u00eel ave\u021bi acolo, indiferent de matricea pe care o ave\u021bi, acestea nu vor putea face fa\u021b\u0103. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/1e4bab2fad7d3a05dc76cdd9d153f46c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>De aceea, recomand\u0103m s\u0103 ajusta\u021bi aceste cifre \u00een func\u021bie de capacit\u0103\u021bile controller-ului dumneavoastr\u0103 RAID.<\/strong> Am aici o recomandare pentru un controller cu 512 MB de cache. <\/p>\n<p><\/p>\n<p>Se calculeaz\u0103 foarte simplu. Pute\u021bi seta vm.dirty_background \u00een bytes. Aceste set\u0103ri anuleaz\u0103 precedentele dou\u0103. Fie raportul implicit, fie cele activate \u00een bytes vor func\u021biona cele \u00een bytes. Dar, deoarece sunt consultant DBA \u0219i lucrez cu diferi\u021bi clien\u021bi, \u00eencerc s\u0103 m\u0103 protejez \u0219i, prin urmare, dac\u0103 este \u00een bytes, atunci \u00een bytes. Nimeni nu a dat nicio garan\u021bie c\u0103 un administrator binevoitor nu va ad\u0103uga memorie serverului, nu \u00eel va reporni, iar cifra va r\u0103m\u00e2ne aceea\u0219i. Calcula\u021bi aceste cifre astfel \u00eenc\u00e2t s\u0103 fie garantat c\u0103 totul se \u00eencadreaz\u0103. <\/p>\n<p><\/p>\n<p>Ce se va \u00eent\u00e2mpla dac\u0103 nu reu\u0219i\u021bi s\u0103 v\u0103 \u00eencadra\u021bi? Am scris c\u0103 orice flushing se opre\u0219te eficient, dar de fapt este o figur\u0103 de stil. Sistemul de operare are o problem\u0103 major\u0103 - are multe pagini murdare, a\u0219a c\u0103 efectiv se opre\u0219te IO, care este generat de clien\u021bii dumneavoastr\u0103, adic\u0103 aplica\u021bia sql trimite cererea c\u0103tre baza de date, a\u0219teapt\u0103. Orice input-output c\u0103tre aceasta este la cele mai joase priorit\u0103\u021bi, deoarece baza de date este ocupat\u0103 cu checkpoint-ul. \u0218i c\u00e2nd va termina acest lucru nu este deloc clar. \u0218i c\u00e2nd atinge\u021bi flushing-ul non-fond, non-background, atunci asta \u00eenseamn\u0103 c\u0103 tot IO-ul este ocupat de el. \u0218i p\u00e2n\u0103 nu se termin\u0103, nu ve\u021bi putea face nimic. <\/p>\n<p><\/p>\n<p>Aici sunt \u00eenc\u0103 dou\u0103 puncte importante care dep\u0103\u0219esc acest raport. Aceste set\u0103ri ar trebui s\u0103 se potriveasc\u0103 cu set\u0103rile din postgresql.conf, adic\u0103 set\u0103rile pentru checkpoints. \u0218i sistemul dumneavoastr\u0103 de discuri trebuie s\u0103 fie configurat corespunz\u0103tor. <strong>Dac\u0103 ave\u021bi un cache pe RAID, acesta ar trebui s\u0103 aib\u0103 o baterie.<\/strong> Oamenii cump\u0103r\u0103 RAID-uri cu cache bun f\u0103r\u0103 baterie. <strong>Dac\u0103 ave\u021bi SSD \u00een RAID, acestea ar trebui s\u0103 fie server-based, \u0219i ar trebui s\u0103 aib\u0103 condensatoare.<\/strong> Aici este o list\u0103 detaliat\u0103 de verficare. La acest link este raportul meu despre cum s\u0103 configura\u021bi performan\u021ba discului \u00een PostgreSQL. Toate aceste liste de verificare sunt acolo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/0ca13d550cb9eec4163f886467b2b3ea.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ce ar putea complica foarte mult via\u021ba? Acestea sunt dou\u0103 parametrii. Sunt relativ noi. Pot fi activate \u00een mod implicit \u00een diferite aplica\u021bii. \u0218i pot complica via\u021ba la fel de mult, dac\u0103 sunt activate gre\u0219it. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/35aa98d67ff1f089a751a5fd808bd1b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Exist\u0103 dou\u0103 lucruri relativ noi. Au ap\u0103rut deja \u00een nucleele a treia. Acestea sunt sched_migration_cost \u00een nanosecunde \u0219i sched_autogroup_enabled, care este activat implicit. <\/p>\n<p><\/p>\n<p>\u0218i cum le stric\u0103 via\u021ba? Ce este sched_migration_cost? Scheduler-ul Linux poate migra un proces de pe un CPU pe altul. \u0218i pentru PostgreSQL, care execut\u0103 interog\u0103ri, migrarea pe un alt CPU nu este deloc clar de ce ar fi necesar\u0103. Din punct de vedere al sistemului de operare, c\u00e2nd schimba\u021bi feronre\u021bele \u00eentre openoffice \u0219i terminal, poate fi bine, dar <strong>pentru baza de date - este foarte r\u0103u.<\/strong> <strong>Prin urmare, o politic\u0103 ra\u021bional\u0103 este s\u0103 seta\u021bi migration_cost la o valoare mare, cel pu\u021bin c\u00e2teva mii de nanosecunde.<\/strong> <\/p>\n<p><\/p>\n<p>Ce ar \u00eensemna asta pentru scheduler? Va considera c\u0103, pe durata acestui timp, acest proces este \u00eenc\u0103 activ. Adic\u0103, dac\u0103 ave\u021bi o tranzac\u021bie lung\u0103 care se ocup\u0103 de ceva, scheduler-ul va \u00een\u021belege asta. Va considera c\u0103 p\u00e2n\u0103 nu trece acea perioad\u0103 de timeout, nu este necesar s\u0103 migreze acel proces. Dac\u0103 \u00een acela\u0219i timp procesul face ceva, nu va fi migrarea, va continua lini\u0219tit pe CPU-ul care i-a fost alocat. Iar rezultatul este excelent. <\/p>\n<p><\/p>\n<p>Al doilea punct - este autogroup. Exist\u0103 o idee bun\u0103 pentru workload-uri specifice, care nu au leg\u0103tur\u0103 cu baza de date modern\u0103 - aceea de a grupa procesele \u00een func\u021bie de terminalul virtual de unde au fost lansate. Este convenabil pentru anumite sarcini. <strong>\u00cen practic\u0103, PostgreSQL este un sistem multi-proces cu prefork, care porne\u0219te dintr-un terminal. Ave\u021bi un lock writer, checkpoint \u0219i toate cererile clien\u021bilor se vor grupa pe un singur scheduler, pe un singur CPU. Acolo vor a\u0219tepta prietene\u0219te, c\u00e2nd acesta se va elibera, pentru a se perturb\u0103 reciproc \u0219i a-l ocupa mai mult. Aceasta este o situa\u021bie complet inutil\u0103 \u00een cazul unei astfel de \u00eenc\u0103rc\u0103ri \u0219i de aceea trebuie dezactivat\u0103.<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/55e829d1c1b69b7f6eaf5fc89dad30d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Colegul meu Alexey Lesovski a efectuat teste cu un simplu pgbench, unde a crescut cu un ordin migration_cost \u0219i a dezactivat autogroup. <strong>Diferen\u021ba pe un hardware slab a reie\u0219it aproape 10 %<\/strong>. Exist\u0103 o discu\u021bie \u00een mailing listul postgres, unde oamenii ofer\u0103 rezultate despre cum astfel de modific\u0103ri au influen\u021bat viteza interog\u0103rii <strong>cu 50 %<\/strong>. Aceste pove\u0219ti sunt destul de multe.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/b3d1983ec2a37f8b85129c93f2373644.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i \u00een cele din urm\u0103 despre politica de economisire a energiei. E bine c\u0103 acum Linux poate fi folosit pe laptopuri. \u0218i va consuma, chipurile, bine bateria. Dar se dovede\u0219te c\u0103 acest lucru poate fi adev\u0103rat \u0219i pentru servere. <\/p>\n<p><\/p>\n<p>Mai mult, dac\u0103 \u00eenchiria\u021bi servere de la un anumit hoster, atunci \u201ebuni\u201d <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/ro\/\"   title=\"hosting,\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1200\">hosting,<\/a> nu se ocup\u0103 de faptul c\u0103 ave\u021bi o performan\u021b\u0103 mai bun\u0103. Sarcina lor este s\u0103 se asigure c\u0103 hardware-ul lor este utilizat c\u00e2t mai eficient. De aceea, ei pot activa din start modul de economisire a energiei \u00een sistemul de operare.<\/p>\n<p><\/p>\n<p><strong>Dac\u0103 utiliza\u021bi pe un server cu o baz\u0103 de date sub o \u00eenc\u0103rcare intensiv\u0103 acest lucru, alegerea dumneavoastr\u0103 este acpi_cpufreq + performance. Chiar \u0219i cu ondemand vor ap\u0103rea deja probleme.<\/strong> <\/p>\n<p><\/p>\n<p>Intel_pstate este deja un driver ceva mai diferit. \u0218i acum se prefer\u0103 acest driver, considerat mai recent \u0219i mai eficient.<\/p>\n<p><\/p>\n<p>Prin urmare, guvernatorul trebuie s\u0103 fie doar performance. Ondemand, powersave \u0219i altele \u2013 nu sunt pentru dumneavoastr\u0103. <\/p>\n<p><\/p>\n<p>Rezultatele ob\u021binute prin explain analyze PostgreSQL pot varia cu c\u00e2teva ordine, dac\u0103 activa\u021bi powersave, deoarece practic CPU-ul va fi planificat de baz\u0103 \u00eentr-un mod complet imprevizibil.<\/p>\n<p><\/p>\n<p>Aceste lucruri pot fi activate implicit. Verifica\u021bi cu aten\u021bie \u2013 nu cumva au fost activate implicit. Aceasta ar putea fi realmente o problem\u0103 mare. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/ef32dafd9c8ea3403dc31c34ee2b5da8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i la final, a\u0219 dori s\u0103 le mul\u021bumesc b\u0103ie\u021bilor din echipa noastr\u0103 DBA PostgreSQL-Consulting, mai precis lui Max Boguc \u0219i Alexei Lesovski, care \u00ee\u0219i asum\u0103 zilnic provoc\u0103rile acestui domeniu. \u00cencerc\u0103m s\u0103 oferim clien\u021bilor no\u0219tri cele mai bune solu\u021bii pentru ca totul s\u0103 func\u021bioneze perfect. Aici e ca la instruc\u021biunile de siguran\u021b\u0103 aerian\u0103. Totul este scris \u00een s\u00e2nge. Fiecare dintre aceste probleme a fost descoperit\u0103 \u00een urma unor dificult\u0103\u021bi. Sunt bucuros s\u0103 le \u00eemp\u0103rt\u0103\u0219esc cu voi.<\/p>\n<p><\/p>\n<p>\u00centreb\u0103ri:<\/p>\n<p><\/p>\n<p><em>Mul\u021bumesc! De exemplu, dac\u0103 o companie dore\u0219te s\u0103 economiseasc\u0103 \u0219i s\u0103 g\u0103zduiasc\u0103 baza de date \u0219i logica aplica\u021biei pe acela\u0219i server, sau dac\u0103 compania urmeaz\u0103 tendin\u021ba modern\u0103 a arhitecturilor de microservicii, \u00een care PostgreSQL ruleaz\u0103 \u00eentr-un container. Care este cheia? Sysctl afecteaz\u0103 global toate nucleele. Nu am auzit s\u0103 fie sysctl virtualizate pentru a func\u021biona separat pe containere. Exist\u0103 doar cgroup \u0219i acolo exist\u0103 control doar pe o parte. Cum se poate convie\u021bui cu asta? Sau, dac\u0103 dori\u021bi performan\u021b\u0103, atunci rula\u021bi PostgreSQL pe un server fizic dedicat \u0219i optimiza\u021bi-l?<\/em><\/p>\n<p><\/p>\n<p>Am r\u0103spuns la \u00eentrebarea dvs. \u00een aproximativ trei moduri. Dac\u0103 nu este vorba despre un server fizic, care poate fi optimizat etc., atunci relaxa\u021bi-v\u0103, va func\u021biona bine f\u0103r\u0103 aceste set\u0103ri. Dac\u0103 ajunge\u021bi la o \u00eenc\u0103rcare at\u00e2t de mare \u00eenc\u00e2t s\u0103 fie necesare aceste set\u0103ri, atunci ve\u021bi ajunge mai repede la un server fizic dec\u00e2t la aceste set\u0103ri.<\/p>\n<p><\/p>\n<p>Care este problema? Dac\u0103 este o ma\u0219in\u0103 virtual\u0103, cel mai probabil ve\u021bi avea multe probleme, de exemplu, cu consisten\u021ba laten\u021bei discului, care este adesea inconsistent\u0103 pe majoritatea ma\u0219inilor virtuale. Chiar dac\u0103 l\u0103\u021bimea de band\u0103 a discurilor este bun\u0103, o tranzac\u021bie defectuoas\u0103 \u00een opera\u021biunile de intrare-ie\u0219ire, care nu afecteaz\u0103 semnificativ l\u0103\u021bimea de band\u0103 medie, poate ap\u0103rea \u00een timpul unui checkpoint sau \u00een timpul unei scrieri \u00een WAL, iar baza de date va suferi mult din aceast\u0103 cauz\u0103. Ve\u021bi observa aceste probleme \u00eenainte de a v\u0103 confrunta cu ele. <\/p>\n<p><\/p>\n<p>Dac\u0103 ave\u021bi NGINX pe acela\u0219i server, va ap\u0103rea aceea\u0219i problem\u0103. Se va lupta pentru memoria partajat\u0103. \u0218i nu ve\u021bi ajunge la problemele descrise aici.<\/p>\n<p><\/p>\n<p>Dar, pe de alt\u0103 parte, unele dintre aceste parametri tot vor fi relevan\u021bi pentru tine. De exemplu, po\u021bi seta dirty_ratio cu sysctl, astfel \u00eenc\u00e2t s\u0103 nu fie at\u00e2t de extrem \u2013 oricum, acest lucru va ajuta. \u00cen orice caz, interac\u021biunea ta cu discul va exista. \u0218i va fi pe o schem\u0103 gre\u0219it\u0103. Acestea sunt, de fapt, parametrii default pe care i-am ar\u0103tat. \u0218i \u00een orice caz, este mai bine s\u0103-i schimbi. <\/p>\n<p><\/p>\n<p>Dar cu NUMA pot ap\u0103rea probleme. VmWare, de exemplu, func\u021bioneaz\u0103 bine cu NUMA cu set\u0103rile exact opuse. Aici trebuie s\u0103 alegi \u2013 server fizic sau nu. <\/p>\n<p><\/p>\n<p><em>Am o \u00eentrebare legat\u0103 de Amazon AWS. Au imagini preconfigurate. Una dintre ele se nume\u0219te Amazon RDS. Exist\u0103 acolo set\u0103ri personalizate pentru sistemul lor de operare?<\/em><\/p>\n<p><\/p>\n<p>Exist\u0103 set\u0103ri, dar acestea sunt alte set\u0103ri. Aici configur\u0103m sistemul de operare din perspectiva modului \u00een care baza de date va folosi acest lucru. Acolo sunt parametrii care definesc \u00eencotro mergem acum, a\u0219a c\u0103 este un fel de shaping. Adic\u0103, avem nevoie de at\u00e2tea resurse, le vom consuma acum. Dup\u0103 aceea, Amazon RDS le ata\u0219eaz\u0103, iar performan\u021ba scade. Exist\u0103 pove\u0219ti \u00een care oamenii \u00eencep s\u0103 experimenteze cu acest lucru. Uneori chiar cu succes destul de mare. Dar aceasta nu are leg\u0103tur\u0103 cu set\u0103rile OS. Este un fel de hacking al cloud-ului. Este o alt\u0103 poveste.<\/p>\n<p><\/p>\n<p><em>De ce paginile mari transparente nu au efect comparativ cu Huge TLB?<\/em><\/p>\n<p><\/p>\n<p>Nu au. Acest lucru poate fi explicat \u00een multe feluri. Dar, de fapt, pur \u0219i simplu nu au efect. Care este povestea cu PostgreSQL? La start, acesta aloc\u0103 un mare bloc de memorie partajat\u0103. Fie c\u0103 sunt transparente sau nu \u2013 este complet irelevant. Faptul c\u0103 sunt alocate la start explic\u0103 totul. \u0218i dac\u0103 exist\u0103 foarte mult\u0103 memorie \u0219i trebuie s\u0103 reconstruie\u0219ti segmentul shared_memory, atunci paginile mari transparente vor fi relevante. La PostgreSQL, acesta este pur \u0219i simplu alocat ca un bloc uria\u0219 la start \u0219i nimic special nu se \u00eent\u00e2mpl\u0103 mai departe. Poate fi desigur utilizat, dar exist\u0103 riscul de corup\u021bie a shared_memory, c\u00e2nd va trebui s\u0103 realoce ceva. PostgreSQL nu \u0219tie despre acest lucru.<\/p>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/505108\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0432 \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0432\u0435\u0440\u0441\u0438\u044f 9.4 \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0417\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0435 4 \u0433\u043e\u0434\u0430 \u0432\u044b\u0448\u043b\u043e 5 \u043d\u043e\u0432\u044b\u0445 \u0440\u0435\u043b\u0438\u0437\u043e\u0432 PostgreSQL \u0432\u044b\u0448\u043b\u043e \u0438 15 \u0432\u0435\u0440\u0441\u0438\u0439 \u044f\u0434\u0440\u0430 Linux. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":84083,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-84082","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\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\udd47Linux tuning to improve PostgreSQL performance. \u0418\u043b\u044c\u044f \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u0438\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-06-05T05:42:28+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-05T05:42:28+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Tuning Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL. Ilia Kosmodemyansky | ProHoster","description":"Dezvoltarea raportului din 2015 a lui Ilia Kosmodemyansky \"Tuning Linux pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba PostgreSQL\" Disclaimer: Men\u021bionez c\u0103 acest raport este datat noiembrie 2015 \u2013 au trecut mai mult de 4 ani \u0219i s-au \u00eent\u00e2mplat multe.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","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\udd47Linux tuning to improve PostgreSQL performance. \u0418\u043b\u044c\u044f \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u0438\u0439 | ProHoster","og:description":"\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-06-05T05:42:28+00:00","article:modified_time":"2020-06-05T05:42:28+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"84082","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:05:32","updated":"2026-02-09 21:38:01","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/84082","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=84082"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/84082\/revisions"}],"predecessor-version":[{"id":159869,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/84082\/revisions\/159869"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/84083"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=84082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=84082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=84082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}