{"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\/sk\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","title":{"rendered":"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Prezent\u00e1cia reportu z roku 2015 od I\u013eju Kosmodemjansk\u00e9ho \u201eLadenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL\u201c<\/p>\n<p><\/p>\n<p>Upozornenie: Upozor\u0148ujem, \u017ee t\u00e1to prezent\u00e1cia je datovan\u00e1 novembrom 2015 \u2014 uplynuli viac ako 4 roky, odkedy sa tak stalo. Verzia 9.4, ktor\u00fa prezent\u00e1cia pokr\u00fdva, u\u017e nie je podporovan\u00e1. Po uplynut\u00ed 4 rokov vy\u0161lo 5 nov\u00fdch verzi\u00ed PostgreSQL a 15 verzi\u00ed jadra Linux. Ak by sa tieto \u010dasti prepisovali, nakoniec by to bola \u00faplne in\u00e1 prezent\u00e1cia. Ale tu sa zaober\u00e1me z\u00e1kladn\u00fdm laden\u00edm Linuxu pre PostgreSQL, ktor\u00e9 je doteraz relevantn\u00e9.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" 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=\"Prehrajte 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>Vol\u00e1m sa I\u013eja Kosmodemjansk\u00fd. Pracujem v spolo\u010dnosti PostgreSQL-Consulting. A teraz v\u00e1m poviem nie\u010do o tom, \u010do robi\u0165 s Linuxom v kontexte datab\u00e1z v\u0161eobecne a PostgreSQL konkr\u00e9tne, preto\u017ee princ\u00edpy s\u00fa dos\u0165 podobn\u00e9.<\/p>\n<p><\/p>\n<p>O \u010dom bude re\u010d? Ak komunikujete s PostgreSQL, do ur\u010ditej miery je potrebn\u00e9 by\u0165 administr\u00e1torom UNIX-u. \u010co to znamen\u00e1? Ak porovn\u00e1me Oracle a PostgreSQL, v Oracle mus\u00edte by\u0165 z 80 % DBA datab\u00e1zy a z 20 % administr\u00e1torom Linuxu.<\/p>\n<p><\/p>\n<p>S PostgreSQL je to trochu zlo\u017eitej\u0161ie. S PostgreSQL je potrebn\u00e9 ma\u0165 omnoho lep\u0161ie predstavy o tom, ako Linux funguje. A pritom sa mus\u00edte trochu sna\u017ei\u0165 dr\u017ea\u0165 krok, preto\u017ee v poslednej dobe sa v\u0161etko r\u00fdchlo aktualizuje. Nov\u00e9 jadr\u00e1 sa vyd\u00e1vaj\u00fa, prich\u00e1dza nov\u00fd funk\u010dn\u00fd obsah, v\u00fdkon sa zlep\u0161uje at\u010f. <\/p>\n<p><\/p>\n<p>Pre\u010do hovor\u00edme o Linuxe? Nie kv\u00f4li tomu, \u017ee sme na konferencii Linux v Piter, ale preto, \u017ee za s\u00fa\u010dasn\u00fdch podmienok je jedn\u00fdm z najopr\u00e1vnenej\u0161\u00edch OS pre prev\u00e1dzku datab\u00e1z v\u0161eobecne a PostgreSQL konkr\u00e9tne \u2013 Linux. Preto\u017ee FreeBSD, \u017eia\u013e, sa rozv\u00edja ve\u013emi podivn\u00fdm smerom. A vznikn\u00fa probl\u00e9my ako s v\u00fdkonom, tak s mnoh\u00fdmi \u010fal\u0161\u00edmi vecami. <strong>V\u00fdkon PostgreSQL na Windows \u2013 to je \u00faplne in\u00e1 n\u00e1ro\u010dn\u00e1 t\u00e9ma, s\u00favisiaca s t\u00fdm, \u017ee Windows nem\u00e1 tak\u00fa zdie\u013ean\u00fa pam\u00e4\u0165 ako UNIX, a u PostgreSQL je to v\u0161etko na tom postaven\u00e9, preto\u017ee ide o viacprocesn\u00fd syst\u00e9m.<\/strong> <\/p>\n<p><\/p>\n<p>A exotika ako Solaris, mysl\u00edm, zauj\u00edma men\u0161inu, tak\u017ee po\u010fme \u010falej. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/990133933bd1816895fc8f73edaf900e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>So s\u00fa\u010dasn\u00fdm distrib\u00faciou Linuxu je viac ako 1 000 parameterov syctl, v z\u00e1vislosti od toho, ako je jadro zostaven\u00e9. Ak sa pozrieme e\u0161te na r\u00f4zne nastavenia, d\u00e1 sa to doladi\u0165 mnoh\u00fdmi sp\u00f4sobmi. Existuj\u00fa parametre s\u00faborov\u00fdch syst\u00e9mov, ako ich pripoji\u0165. Ak m\u00e1te ot\u00e1zky, ako spusti\u0165: \u010do zapn\u00fa\u0165 v BIOS-e, ako nastavi\u0165 hardware at\u010f.<\/p>\n<p><\/p>\n<p>Toto je naozaj ve\u013ek\u00fd objem, o ktorom sa d\u00e1 hovori\u0165 nieko\u013eko dn\u00ed, a nie za jeden kr\u00e1tky prejav, ale teraz sa zameriam na d\u00f4le\u017eit\u00e9 veci, ako sa vyhn\u00fa\u0165 t\u00fdm pasc\u00e1m, ktor\u00e9 ur\u010dite zabr\u00e1nia dobrej prev\u00e1dzke datab\u00e1zy na Linuxe, ak ich neoprav\u00edte. A pritom je d\u00f4le\u017eit\u00e9, \u017ee mnoh\u00e9 parametre s\u00fa predvolene nastaven\u00e9 na nespr\u00e1vne hodnoty pre datab\u00e1zu. T. j. z predpokladu bude fungova\u0165 zle alebo v\u00f4bec. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/189f6497c795a5e5fd5b458edfadb22f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ak\u00e9 tradi\u010dn\u00e9 ciele ladenia s\u00fa v Linuxe? Mysl\u00edm, \u017ee ke\u010f\u017ee sa v\u0161etci zaober\u00e1te administrat\u00edvou Linuxu, nie je potrebn\u00e9 osobitne vysvet\u013eova\u0165, \u010do s\u00fa ciele. <\/p>\n<p><\/p>\n<p>M\u00f4\u017eete ladit:<\/p>\n<p><\/p>\n<ul>\n<li>CPU.<\/li>\n<li>Pam\u00e4\u0165.<\/li>\n<li>Ulo\u017eenie.<\/li>\n<li>In\u00e9. O tom si povieme na konci, ako dezert. Napr\u00edklad aj tak\u00e9 parametre, ako politika \u00faspory energie, m\u00f4\u017eu ve\u013emi nepr\u00edjemne a nepredv\u00eddate\u013ene ovplyvni\u0165 v\u00fdkon. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/92916aadaf123a3f836bed3a2c1bd95a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ak\u00e1 je \u0161pecifik\u00e1cia PostgreSQL a datab\u00e1z v\u00f4bec? Probl\u00e9m je v tom, \u017ee nie je mo\u017en\u00e9 doladi\u0165 nejak\u00fa jednotliv\u00fa skrutku a pozrie\u0165 sa, \u010di sa v\u00fdkon v\u00fdrazne zlep\u0161il. <\/p>\n<p><\/p>\n<p>\u00c1no, tak\u00e9 skrutky existuj\u00fa, ale datab\u00e1za je zlo\u017eit\u00e1 vec. Interaguje so v\u0161etk\u00fdmi zdrojmi, ktor\u00e9 server m\u00e1, a uprednost\u0148uje pln\u00fa interakciu. Ak sa pozriete na modern\u00e9 odpor\u00fa\u010dania spolo\u010dnosti Oracle o tom, ako pou\u017e\u00edva\u0165 hostite\u013esk\u00fd opera\u010dn\u00fd syst\u00e9m, bude to ako v anekdote o mongolskom kozmonautovi \u2013 nak\u0155mi\u0165 psa a ni\u010d s t\u00fdm nepohybova\u0165. D\u00e1me datab\u00e1ze v\u0161etky zdroje, datab\u00e1za si to sama vyrovn\u00e1. <\/p>\n<p><\/p>\n<p>Vo v\u0161eobecnosti je situ\u00e1cia s PostgreSQL celkom podobn\u00e1. Rozdiel spo\u010d\u00edva v tom, \u017ee datab\u00e1za si nie v\u0161etky zdroje dok\u00e1\u017ee sama vzia\u0165, t. j. niekde je potrebn\u00e9 to v\u0161etko rie\u0161i\u0165 na \u00farovni Linuxu. <\/p>\n<p><\/p>\n<p>Hlavn\u00e1 my\u0161lienka je \u2013 nevybra\u0165 nejak\u00fd jednotn\u00fd cie\u013e a za\u010da\u0165 ho ladit, napr\u00edklad pam\u00e4\u0165, CPU alebo nie\u010do podobn\u00e9, ale analyzova\u0165 pracovn\u00fa z\u00e1\u0165a\u017e a pok\u00fasi\u0165 sa maxim\u00e1lne zlep\u0161i\u0165 priepustnos\u0165, aby pre na\u0161u datab\u00e1zu prech\u00e1dzala maxim\u00e1lne efekt\u00edvne t\u00e1 z\u00e1\u0165a\u017e, ktor\u00fa n\u00e1m dobrotiv\u00ed program\u00e1tori vytvorili, vr\u00e1tane na\u0161ich pou\u017e\u00edvate\u013eov. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/2db6c11a6f612b8aecccfe126be4fd7f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Toto je obr\u00e1zok na vysvetlenie, \u010do to znamen\u00e1. Existuje vyrovn\u00e1vacia pam\u00e4\u0165 syst\u00e9mu Linux a existuje zdie\u013ean\u00e1 pam\u00e4\u0165 a existuj\u00fa zdie\u013ean\u00e9 vyrovn\u00e1vacie pam\u00e4te PostgreSQL. PostgreSQL na rozdiel od Oraclu pracuje priamo iba cez vyrovn\u00e1vaciu pam\u00e4\u0165 jadra, t. j. aby sa str\u00e1nka z disku dostala do jeho zdie\u013eanej pam\u00e4te, mus\u00ed prejs\u0165 cez vyrovn\u00e1vaciu pam\u00e4\u0165 jadra a sp\u00e4\u0165, presne rovnak\u00e1 situ\u00e1cia. <\/p>\n<p><\/p>\n<p>Pod touto syst\u00e9mou sa nach\u00e1dzaj\u00fa disky. Nakreslil som to ako disky. V skuto\u010dnosti tam m\u00f4\u017ee by\u0165 RAID radi\u010d a pod. <\/p>\n<p><\/p>\n<p>A tento vstup-v\u00fdstup sa tak \u010di onak deje cez t\u00fato vec.<\/p>\n<p><\/p>\n<p>PostgreSQL je klasick\u00e1 datab\u00e1za. Dnu s\u00fa str\u00e1nky. A cel\u00fd vstup-v\u00fdstup sa deje pomocou str\u00e1nok. Skrze str\u00e1nky pren\u00e1\u0161ame bloky do pam\u00e4te. A ak sa ni\u010d nestalo a jednoducho sme ich pre\u010d\u00edtali, tak postupne mizn\u00fa z tohto cache, zo zdie\u013ean\u00fdch vyrovn\u00e1vac\u00edch pam\u00e4t\u00ed a dost\u00e1vaj\u00fa sa sp\u00e4\u0165 na disk. <\/p>\n<p><\/p>\n<p>Ak nie\u010do niekde nahrad\u00edme, cel\u00e1 str\u00e1nka sa ozna\u010duje ako zne\u010disten\u00e1. Tu som ich ozna\u010dil modrou farbou. To znamen\u00e1, \u017ee t\u00e1to str\u00e1nka mus\u00ed by\u0165 synchronizovan\u00e1 s blokov\u00fdm \u00falo\u017eiskom. T. j. ke\u010f sme ju urobili zne\u010distenou, vytvorili sme z\u00e1pis v WAL. A v nejakom kr\u00e1snom momente pri\u0161lo jav pod n\u00e1zvom checkpoint. A do tohto logu sa zap\u00edsala inform\u00e1cia o tom, \u017ee pri\u0161lo. A to znamen\u00e1, \u017ee v\u0161etky zne\u010disten\u00e9 str\u00e1nky, ktor\u00e9 tu v tom momente boli v t\u00fdchto zdie\u013ean\u00fdch vyrovn\u00e1vac\u00edch pam\u00e4tiach, sa synchronizovali s diskom \u00falo\u017eiska pomocou fsync cez vyrovn\u00e1vaciu pam\u00e4\u0165 jadra.<\/p>\n<p><\/p>\n<p>Pre\u010do sa to rob\u00ed? Ak by sme pri\u0161li o nap\u00e1janie, nemali by sme situ\u00e1ciu, \u017ee v\u0161etky d\u00e1ta zmizli. Persisten\u010dn\u00e1 pam\u00e4\u0165, o ktorej n\u00e1m v\u0161etci hovorili, to je zatia\u013e v te\u00f3rii datab\u00e1z \u2013 to je svetl\u00e1 bud\u00facnos\u0165, ku ktorej sa samozrejme sna\u017e\u00edme a p\u00e1\u010di sa n\u00e1m, ale zatia\u013e e\u0161te \u017eij\u00fa v m\u00ednus 20 rokoch. A samozrejme, za t\u00fdmto v\u0161etk\u00fdm je potrebn\u00e9 dba\u0165.<\/p>\n<p><\/p>\n<p>A \u00falohou maximaliz\u00e1cie priepustnosti je doladi\u0165 to na v\u0161etk\u00fdch t\u00fdchto etap\u00e1ch, aby to v\u0161etko fungovalo r\u00fdchlo. Zdie\u013ean\u00e1 pam\u00e4\u0165 je v\u00e4\u010d\u0161inou str\u00e1nkov\u00e1 vyrovn\u00e1vacia pam\u00e4\u0165. V PostgreSQL sme poslali dotaz select nie\u010do, z\u00edskal tieto \u00fadaje z disku. Dostali sa do zdie\u013ean\u00fdch vyrovn\u00e1vac\u00edch pam\u00e4t\u00ed. Zodpovedaj\u00facim sp\u00f4sobom, aby to fungovalo lep\u0161ie, mus\u00ed by\u0165 ve\u013ea pam\u00e4te.<\/p>\n<p><\/p>\n<p>Aby to v\u0161echno fungovalo dob\u0159e a rychle, mus\u00edte spr\u00e1vn\u011b nastavit opera\u010dn\u00ed syst\u00e9m ve v\u0161ech f\u00e1z\u00edch. A vybrat vyv\u00e1\u017een\u00fd hardware, proto\u017ee pokud budete m\u00edt n\u011bkde nerovnov\u00e1hu, m\u016f\u017eete m\u00edt spoustu pam\u011bti, ale bude dostupn\u00e1 s nedostate\u010dnou rychlost\u00ed. <\/p>\n<p><\/p>\n<p>Pod\u00edv\u00e1me se na ka\u017ed\u00fd z t\u011bchto bod\u016f.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/fe031218be39cd727f3a76b22563e101.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aby tyto str\u00e1nky cestovaly sem a tam rychleji, je pot\u0159eba dos\u00e1hnout n\u00e1sleduj\u00edc\u00edho:<\/p>\n<p><\/p>\n<ul>\n<li>Za prv\u00e9, je pot\u0159eba efektivn\u011bji pracovat s pam\u011bt\u00ed.<\/li>\n<li>Za druh\u00e9, mus\u00ed b\u00fdt efektivn\u011bj\u0161\u00ed p\u0159echod, kdy\u017e str\u00e1nky z pam\u011bti p\u0159ech\u00e1zej\u00ed na disk.<\/li>\n<li>A za t\u0159et\u00ed, m\u011bly by b\u00fdt kvalitn\u00ed disky. <\/li>\n<\/ul>\n<p><\/p>\n<p>Pokud m\u00e1te 512 GB opera\u010dn\u00ed pam\u011bti v <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sk\/server\/dts-dronten\/\"   title=\"serveri\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2587\">serveri<\/a> a v\u0161echno to nakonec kon\u010d\u00ed na SATA pevn\u00e9m disku bez jak\u00e9koli cache, prom\u011bn\u00ed se cel\u00fd datab\u00e1zov\u00fd server nejen v d\u00fdni, ale v d\u00fdni se SATA rozhran\u00edm. Budete s t\u00edm p\u0159\u00edmo narazit. A nic v\u00e1s nezachr\u00e1n\u00ed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/6630e445c96e94621ae670bc4aee8492.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pokud jde o prvn\u00ed bod s pam\u011bt\u00ed, existuj\u00ed t\u0159i v\u011bci, kter\u00e9 mohou \u017eivot zna\u010dn\u011b zkomplikovat. <\/p>\n<p><\/p>\n<p>Prvn\u00ed z nich je NUMA. NUMA je koncept, kter\u00fd je navr\u017een pro zlep\u0161en\u00ed v\u00fdkonu. V z\u00e1vislosti na pracovn\u00edm zat\u00ed\u017een\u00ed je mo\u017en\u00e9 optimalizovat r\u016fzn\u00e9 v\u011bci. A ve sv\u00e9m nov\u00e9m sou\u010dasn\u00e9m stavu nen\u00ed pro takov\u00e9 aplikace, jako jsou datab\u00e1ze, kter\u00e9 intenzivn\u011b pou\u017e\u00edvaj\u00ed page cache sd\u00edlen\u00e9 buffery, moc dobr\u00e1. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/8fcf2af82a96bd1ac52fb0a36bf0b0b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Stru\u010dn\u011b \u0159e\u010deno. Jak poznat, \u017ee s NUMA nen\u00ed n\u011bco v po\u0159\u00e1dku? M\u016f\u017eete m\u00edt n\u011bjak\u00e9 nep\u0159\u00edjemn\u00e9 zakol\u00eds\u00e1n\u00ed, n\u00e1hle m\u016f\u017ee b\u00fdt n\u011bjak\u00fd CPU p\u0159et\u00ed\u017een\u00fd. P\u0159i tom analyzujete dotazy v PostgreSQL a vid\u00edte, \u017ee nic podobn\u00e9ho tam nen\u00ed. Tyto dotazy by nem\u011bly tak intenzivn\u011b zat\u011b\u017eovat CPU. Chytat to m\u016f\u017eete dlouho. Snaz\u0161\u00ed je od za\u010d\u00e1tku vyu\u017e\u00edt spr\u00e1vn\u00e9 doporu\u010den\u00ed, jak nastavit NUMA pro PostgreSQL.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/424b8677e5ae1382b9b49b288e045a3f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Co se vlastn\u011b d\u011bje? NUMA je Non-Uniform Memory Access. O co jde? M\u00e1te CPU, vedle n\u011bj je jeho lok\u00e1ln\u00ed pam\u011b\u0165. A tato pam\u011b\u0165 m\u016f\u017ee p\u0159ipojovat pam\u011b\u0165 z jin\u00fdch CPU.<\/p>\n<p><\/p>\n<p>Pokud spust\u00edte <code>numactl --hardware<\/code>, dostanete velk\u00fd v\u00fdstup. Mezi jin\u00fdm bude pole distances. Budou tam \u010d\u00edsla \u2013 10-20, n\u011bco podobn\u00e9ho. Tato \u010d\u00edsla nejsou nic jin\u00e9ho ne\u017e po\u010det skok\u016f k p\u0159ipojen\u00ed t\u00e9to vzd\u00e1len\u00e9 pam\u011bti a jej\u00edmu vyu\u017eit\u00ed lok\u00e1ln\u011b. V z\u00e1sad\u011b je to dobr\u00fd n\u00e1pad. To podstatn\u011b zrychluje v\u00fdkon p\u0159i ur\u010dit\u00fdch zat\u00ed\u017een\u00edch.<\/p>\n<p><\/p>\n<p>Predstavte si, \u017ee m\u00e1te jeden CPU, ktor\u00fd najprv sk\u00fa\u0161a vyu\u017ei\u0165 svoju lok\u00e1lnu pam\u00e4\u0165, a potom sa sna\u017e\u00ed z\u00edska\u0165 \u010fal\u0161iu pam\u00e4\u0165 cez interconnect na nie\u010do. A na tento CPU sa dostane cel\u00fd v\u00e1\u0161 page cache PostgreSQL \u2013 v\u0161etky tie gigabajty. V\u017edy dost\u00e1vate najhor\u0161\u00ed pr\u00edpad, preto\u017ee na CPU je zvy\u010dajne m\u00e1lo pam\u00e4te priamo v tomto pam\u00e4\u0165ovom module. A v\u0161etka pam\u00e4\u0165, ktor\u00e1 je obsluhovan\u00e1, prech\u00e1dza cez tieto interconnects. Tak\u017ee je to pomal\u00e9 a smutn\u00e9. A m\u00e1te procesor, ktor\u00fd obsluhuje tento uzol, neust\u00e1le pre\u0165a\u017een\u00fd. A doba pr\u00edstupu k tejto pam\u00e4ti je zl\u00e1, pomal\u00e1. Toto je situ\u00e1cia, ktor\u00fa nechcete, ak pou\u017e\u00edvate toto pre datab\u00e1zu. <\/p>\n<p><\/p>\n<p>Preto je lep\u0161\u00edm rie\u0161en\u00edm pre datab\u00e1zu, aby opera\u010dn\u00fd syst\u00e9m Linux v\u00f4bec nevedel, \u010do sa tam deje. Aby pristupoval k pam\u00e4ti tak, ako by mal. <\/p>\n<p><\/p>\n<p>Pre\u010do tak? Zdalo by sa, \u017ee by to malo by\u0165 naopak. To sa deje z jedn\u00e9ho jednoduch\u00e9ho d\u00f4vodu, \u017ee potrebujeme ve\u013ea pam\u00e4te pre page cache \u2013 desiatky, stovky gigabajtov. <\/p>\n<p><\/p>\n<p>A ak sme toto v\u0161etko vyhradili a na\u0161ich d\u00e1t tam ulo\u017eili do cache, zisk z pou\u017e\u00edvania cache bude podstatne v\u00e4\u010d\u0161\u00ed ako zisk z tak\u00e9ho zlo\u017eit\u00fdch pr\u00edstupov k pam\u00e4ti. A t\u00fdmto sp\u00f4sobom z\u00edskame neporovnate\u013ene v\u00e4\u010d\u0161ie v\u00fdhody, ako keby sme efekt\u00edvnej\u0161ie pristupovali k pam\u00e4ti pomocou NUMA.<\/p>\n<p><\/p>\n<p>Preto s\u00fa tu v s\u00fa\u010dasnosti dva pr\u00edstupy, pokia\u013e nenastane svetl\u00e1 bud\u00facnos\u0165 a datab\u00e1za sa sama nenau\u010d\u00ed zisti\u0165, na ktor\u00fdch CPU pracuje a odkia\u013e \u010do potrebuje z\u00edska\u0165. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/218513d407ea77320057d57b447c54d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Preto je spr\u00e1vny pr\u00edstup jednoducho vypn\u00fa\u0165 NUMA<\/strong>, napr\u00edklad pri re\u0161tartovan\u00ed. Vo v\u00e4\u010d\u0161ine pr\u00edpadov s\u00fa zisky tak\u00e9 zna\u010dn\u00e9, \u017ee v\u00f4bec nie je ot\u00e1zka, ktor\u00e1 je lep\u0161ia. <\/p>\n<p><\/p>\n<p>Existuje in\u00e1 mo\u017enos\u0165. T\u00fa pou\u017e\u00edvame \u010dastej\u0161ie ako prv\u00fa, preto\u017ee, ke\u010f k n\u00e1m pr\u00edde klient na podporu, re\u0161tartova\u0165 server pre neho je ve\u013ek\u00e1 \u00faloha. Jeho podnikanie je tam v \u010dinnosti. A probl\u00e9my sp\u00f4soben\u00e9 NUMA za\u017e\u00edvaj\u00fa. Preto sa sna\u017e\u00edme vypn\u00fa\u0165 to menej invaz\u00edvnymi sp\u00f4sobmi, ako je reboot, ale tu si d\u00e1vajte pozor, aby ste skontrolovali, \u017ee sa naozaj vypnulo. Preto\u017ee, ako ukazuje prax, \u017ee pri vyp\u00ednan\u00ed NUMA na rodi\u010dovskom procese PostgreSQL je to dobr\u00e9, ale nie je v\u00f4bec zaru\u010den\u00e9, \u017ee to bude fungova\u0165. Je potrebn\u00e9 overi\u0165 a pozrie\u0165 sa, \u010di sa naozaj vypnulo. <\/p>\n<p><\/p>\n<p>Existuje dobr\u00fd pr\u00edspevok od Roberta Haasa. Je to jeden z v\u00fdvoj\u00e1rov PostgreSQL a k\u013e\u00fa\u010dov\u00fdch autorov v\u0161etk\u00fdch n\u00edzko\u00farov\u0148ov\u00fdch s\u00fa\u010dast\u00ed. Ak sa pozriete na odkazy v tomto pr\u00edspevku, n\u00e1jdete tam nieko\u013eko zauj\u00edmav\u00fdch pr\u00edbehov o tom, ako komplexnos\u0165 NUMA komplikovala \u017eivot. Pozrite sa, pre\u0161tudujte si kontroln\u00fd zoznam pre spr\u00e1vcu syst\u00e9mu, \u010do treba nastavi\u0165 na serveri, aby na\u0161a datab\u00e1za fungovala spr\u00e1vne. Tieto nastavenia by ste mali zaznamena\u0165 a kontrolova\u0165, preto\u017ee inak to nebude ve\u013emi dobr\u00e9. <\/p>\n<p><\/p>\n<p>Upozor\u0148ujem, \u017ee to plat\u00ed pre v\u0161etky nastavenia, o ktor\u00fdch budem hovori\u0165. Ale oby\u010dajne sa datab\u00e1zy konfigruj\u00fa v re\u017eime master-slave pre zabezpe\u010denie dostupnosti. Nezabudnite zahrn\u00fa\u0165 tieto nastavenia aj na slave, preto\u017ee v jeden pekn\u00fd de\u0148 m\u00f4\u017ee d\u00f4js\u0165 k hav\u00e1rii a prepnite na slave, ktor\u00fd sa stane majstrom. <\/p>\n<p><\/p>\n<p>V havarijnej situ\u00e1cii, ke\u010f je v\u0161etko zl\u00e9, v\u00e1m neust\u00e1le zvon\u00ed telef\u00f3n a v\u00e1\u0161 \u0161\u00e9f prich\u00e1dza s ve\u013ek\u00fdm palicou, nebudete ma\u0165 \u010das myslie\u0165 na to, aby ste to skontrolovali. A v\u00fdsledky m\u00f4\u017eu by\u0165 dos\u0165 \u017ealostn\u00e9.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/d2fdda7ad4570554b0e134758295f83e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010eal\u0161\u00edm bodom s\u00fa huge pages. Huge pages sa \u0165a\u017eko testuj\u00fa samostatne, ani to nem\u00e1 ve\u013ek\u00fd v\u00fdznam, hoci existuj\u00fa benchmarky, ktor\u00e9 to dok\u00e1\u017eu. Tie sa daj\u00fa \u013eahko vyh\u013eada\u0165. <\/p>\n<p><\/p>\n<p>O \u010do ide? M\u00e1te relat\u00edvne lacn\u00fd server s ve\u013ek\u00fdm mno\u017estvom opera\u010dnej pam\u00e4te, napr\u00edklad viac ne\u017e 30 GB. Nepou\u017e\u00edvate huge pages. To znamen\u00e1, \u017ee nevyhnutne m\u00e1te prebytok v pou\u017e\u00edvan\u00ed pam\u00e4te. A tento prebytok nie je pr\u00e1ve najpr\u00edjemnej\u0161\u00ed. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/28c3c94390a6afef815f712ac9189c2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pre\u010do je to tak? A \u010do sa deje? Opera\u010dn\u00fd syst\u00e9m pride\u013euje pam\u00e4\u0165 na mal\u00e9 k\u00fasky. Je to pohodln\u00e9, takto to historicky vzniklo. A ak by sme sa dostali do podrobnost\u00ed, OS mus\u00ed preklada\u0165 virtu\u00e1lne adresy na fyzick\u00e9. Tento proces nie je pr\u00e1ve najjednoduch\u0161\u00ed, a preto OS v\u00fdsledok tejto oper\u00e1cie cacheuje v Translation Lookaside Buffer (TLB).<\/p>\n<p><\/p>\n<p>A preto\u017ee TLB je cache, v tejto situ\u00e1cii sa objavuj\u00fa v\u0161etky probl\u00e9my, ktor\u00e9 s\u00fa s cache spojen\u00e9. Po prv\u00e9, ak m\u00e1te ve\u013emi ve\u013ea opera\u010dnej pam\u00e4te a v\u0161etka je pridelen\u00e1 na mal\u00e9 k\u00fasky, buffer sa st\u00e1va ve\u013emi ve\u013ek\u00fdm. A ak je cache ve\u013ek\u00e1, proces vyh\u013ead\u00e1vania je pomal\u0161\u00ed. Prebytok je zna\u010dn\u00fd a s\u00e1m o sebe zaber\u00e1 miesto, tj. opera\u010dn\u00e1 pam\u00e4\u0165 spotrebov\u00e1va nie\u010do nespr\u00e1vne. To je prv\u00e9. <\/p>\n<p><\/p>\n<p>Dve \u2013 \u010d\u00edm viac sa v takej situ\u00e1cii zv\u00e4\u010d\u0161uje cache, t\u00fdm v\u00e4\u010d\u0161ia je pravdepodobnos\u0165, \u017ee budete ma\u0165 cache misses. A efektivita tejto cache r\u00fdchlo kles\u00e1 s rastom jej ve\u013ekosti. Preto v opera\u010dn\u00fdch syst\u00e9moch vymysleli jednoduch\u00fd pr\u00edstup. V Linuxe sa u\u017e d\u00e1vno pou\u017e\u00edva. V FreeBSD sa ned\u00e1vno objavila. Ale hovor\u00edme o Linuxe. To s\u00fa huge pages.<\/p>\n<p><\/p>\n<p>A tu treba poznamena\u0165, \u017ee huge pages, ako my\u0161lienka, boli p\u00f4vodne presadzovan\u00e9 komunitami, ktor\u00e9 zah\u0155\u0148ali Oracle a IBM, t. j. v\u00fdrobcovia datab\u00e1z starostlivo zva\u017eovali, \u017ee to bude u\u017eito\u010dn\u00e9, aj pre datab\u00e1zy. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/39a24536929fbcf551d8ba1c8e7faf32.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A ako to zladi\u0165 s PostgreSQL? Po prv\u00e9, v linuxovom jadre musia by\u0165 povolen\u00e9 huge pages.<\/p>\n<p><\/p>\n<p>Po druh\u00e9, musia by\u0165 v\u00fdslovne uveden\u00e9 parametrom sysctl \u2013 ko\u013eko ich je. \u010c\u00edsla s\u00fa tu z nejak\u00e9ho star\u00e9ho servera. M\u00f4\u017eete si vypo\u010d\u00edta\u0165, ko\u013eko pribli\u017ene m\u00e1te shared buffers, aby sa huge pages tam zmestili. <\/p>\n<p><\/p>\n<p>A ak je cel\u00fd server vyhraden\u00fd pre PostgreSQL, dobr\u00fd v\u00fdchodiskov\u00fd bod je bu\u010f prerozdeli\u0165 25 % opera\u010dnej pam\u00e4te na shared buffers, alebo 75 %, ak ste si ist\u00ed, \u017ee do t\u00fdchto 75 % sa va\u0161a datab\u00e1za ur\u010dite zmest\u00ed. Prv\u00fd v\u00fdchodiskov\u00fd bod. A po\u010d\u00edtajte, ak m\u00e1te 256 GB opera\u010dnej pam\u00e4te, teda 64 GB bude pre shared buffers. Vypo\u010d\u00edtajte pribli\u017ene s nejakou rezervou \u2013 ak\u00fa hodnotu by ste mali ma\u0165 nastaven\u00fa.<\/p>\n<p><\/p>\n<p>Do verzie 9.2 (ak sa nem\u00fdlim, od verzie 8.2) bolo mo\u017en\u00e9 pomocou tretej strany kni\u017enice prepoji\u0165 PostgreSQL s huge pages. A to je v\u017edy potrebn\u00e9 robi\u0165. Po prv\u00e9, potrebujete, aby jadro vedelo spr\u00e1vne pride\u013eova\u0165 huge pages. A po druh\u00e9, aby aplik\u00e1cia, ktor\u00e1 s nimi pracuje, mohla vyu\u017ei\u0165 tieto str\u00e1nky. Bez toho to nebude fungova\u0165. Ke\u010f\u017ee PostgreSQL pride\u013eoval pam\u00e4\u0165 v \u0161t\u00fdle system 5, bolo to mo\u017en\u00e9 urobi\u0165 pomocou libhugetlbfs \u2014 to je cel\u00e9 meno kni\u017enice.<\/p>\n<p><\/p>\n<p>V verzii 9.3 sa zv\u00fd\u0161il v\u00fdkon PostgreSQL pri pr\u00e1ci s pam\u00e4\u0165ou a bolo zru\u0161en\u00e9 system 5 met\u00f3dy pride\u013eovania pam\u00e4te. V\u0161etci sa ve\u013emi pote\u0161ili, preto\u017ee inak sa sna\u017e\u00edte spusti\u0165 dva in\u0161tancie PostgreSQL na jednom stroji, a on hovor\u00ed, \u017ee mi ch\u00fdba zdie\u013ean\u00e1 pam\u00e4\u0165. A hovor\u00ed, \u017ee treba opravi\u0165 sysctl. A tam je tak\u00fd sysctl, \u017ee treba e\u0161te re\u0161tartova\u0165 at\u010f. V\u0161eobecne, v\u0161etci sa pote\u0161ili. Ale pride\u013eovanie pam\u00e4te mmap rozbilo pou\u017e\u00edvanie huge pages. V\u00e4\u010d\u0161ina na\u0161ich klientov pou\u017e\u00edva ve\u013ek\u00e9 zdie\u013ean\u00e9 buffery. A d\u00f4razne sme odpor\u00fa\u010dali neprejs\u0165 na 9.3, preto\u017ee tam overhead za\u010d\u00ednal v dobr\u00fdch percent\u00e1ch narasta\u0165.<\/p>\n<p><\/p>\n<p>Ale zato komunitn\u00e1 skupina venovala pozornos\u0165 tomuto probl\u00e9mu a vo verzii 9.4 to ve\u013emi dobre prepracovali. A vo verzii 9.4 sa objavil parameter v postgresql.conf, v ktorom je mo\u017en\u00e9 zapn\u00fa\u0165 try, on alebo off.<\/p>\n<p><\/p>\n<p>Try \u2013 je najbezpe\u010dnej\u0161\u00ed parameter. Pri \u0161tarte PostgreSQL, ke\u010f pride\u013euje zdie\u013ean\u00fa pam\u00e4\u0165, sa pok\u00fa\u0161a z\u00edska\u0165 t\u00fato pam\u00e4\u0165 z huge pages. A ak sa to nepodar\u00ed, vr\u00e1ti sa na be\u017en\u00e9 pride\u013eovanie. A ak m\u00e1te FreeBSD alebo Solaris, m\u00f4\u017eete nastavi\u0165 try, je to v\u017edy bezpe\u010dn\u00e9. <\/p>\n<p><\/p>\n<p>Ak je on, tak sa proste nespust\u00ed, ak sa mu nepodarilo z\u00edska\u0165 pam\u00e4\u0165 z huge pages. Tu u\u017e je to \u2013 komu a \u010do je mil\u0161ie. Ale ak m\u00e1te nastaven\u00e9 try, skontrolujte, \u010di ste naozaj dostali to, \u010do potrebujete, preto\u017ee priestor na chyby tam je ve\u013ea. Tento funk\u010dn\u00fd prvok moment\u00e1lne funguje iba na Linuxe.<\/p>\n<p><\/p>\n<p>E\u0161te jedno mal\u00e9 u\u013eah\u010denie, predt\u00fdm ako p\u00f4jdeme \u010falej. Transparent huge pages \u2013 to zatia\u013e nie je o PostgreSQL. Nem\u00f4\u017ee sa nimi norm\u00e1lne vyu\u017ei\u0165. A pri Transparent huge pages pre tak\u00fd workload, ke\u010f potrebujete ve\u013ek\u00fd kus zdie\u013eanej pam\u00e4te, pr\u00ednosy prich\u00e1dzaj\u00fa iba pri ve\u013emi ve\u013ek\u00fdch objemoch. Ak m\u00e1te terabajty pam\u00e4te, potom to m\u00f4\u017ee ma\u0165 v\u00fdznam. Ak hovor\u00edme o be\u017en\u00fdch aplik\u00e1ci\u00e1ch, ke\u010f m\u00e1te 32, 64, 128, 256 GB pam\u00e4te na stroji, tak be\u017en\u00e9 huge pages je v poriadku, a Transparent jednoducho vypneme. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/18cf3ace8876e55b42e66f617a24f1bc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A posledn\u00e1 vec, t\u00fdkaj\u00faca sa pam\u00e4te, priamo nes\u00favis\u00ed s priepustnos\u0165ou, m\u00f4\u017ee ve\u013emi skomplikova\u0165 \u017eivot. Cel\u00e1 priepustnos\u0165 bude ve\u013emi utrpen\u00e1 t\u00fdm, \u017ee server neust\u00e1le swapuje. <\/p>\n<p><\/p>\n<p>A to bude ve\u013emi nepr\u00edjemn\u00e9 v nieko\u013ek\u00fdch momentoch. Hlavn\u00fd probl\u00e9m spo\u010d\u00edva v tom, \u017ee spr\u00e1vanie sa modern\u00fdch jadier mierne l\u00ed\u0161i od star\u0161\u00edch jadier Linuxu. A toto je nie\u010do, na \u010do je dos\u0165 nepr\u00edjemn\u00e9 siaha\u0165, preto\u017ee ke\u010f hovor\u00edme o pr\u00e1ci so swapom, kon\u010d\u00ed to nedostato\u010dn\u00fdm pr\u00edchodom OOM-killera. A OOM-killer, ktor\u00fd pri\u0161iel neskoro a zabil PostgreSQL, je nepr\u00edjemn\u00e9. O tom sa dozvie ka\u017ed\u00fd, t. j. a\u017e po posledn\u00e9ho pou\u017e\u00edvate\u013ea. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/c7c46ff0f4cd8cfcfb21978dd1da4c08.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010co sa deje? M\u00e1te tam ve\u013ea opera\u010dnej pam\u00e4te, v\u0161etko funguje dobre. Ale z nejak\u00e9ho d\u00f4vodu server zamrzne v swape a kv\u00f4li tomu spoma\u013euje. Na prv\u00fd poh\u013ead sa zd\u00e1, \u017ee je pam\u00e4te dos\u0165, ale takto to prebieha. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/24d19929f1506cd9768a836095a24dfb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Predt\u00fdm sme odpor\u00fa\u010dali nastavi\u0165 vm.swappiness na nulu, t. j. vypn\u00fa\u0165 swap. Zdalo sa, \u017ee 32 GB opera\u010dnej pam\u00e4te a zodpovedaj\u00face zdie\u013ean\u00e9 buffery s\u00fa ohromuj\u00face mno\u017estvo. Hlavn\u00fd \u00fa\u010del swapa je ma\u0165 miesto, kam vlo\u017ei\u0165 proces, ak sa odpoj\u00ed. A to u\u017e ve\u013emi nefungovalo. A \u010do potom s t\u00fdmto procesom sprav\u00edte? To je \u00faloha, pri ktorej nie je jasn\u00e9, pre\u010do je swap potrebn\u00fd, najm\u00e4 tak\u00e9ho rozmeru. <\/p>\n<p><\/p>\n<p>Ale v modernej\u0161\u00edch, t. j. v tretej verzii jadra, sa spr\u00e1vanie zmenilo. A ak nastav\u00edte swap na nulu, t. j. vypnete ho, sk\u00f4r alebo nesk\u00f4r, aj pri zvy\u0161ku ur\u010ditej opera\u010dnej pam\u00e4te k v\u00e1m pr\u00edde OOM-killer, aby zabil najintenz\u00edvnej\u0161\u00edch spotrebite\u013eov. Preto\u017ee on si bude myslie\u0165, \u017ee pri takomto pracovnom za\u0165a\u017een\u00ed n\u00e1m zostalo e\u0161te tro\u0161ku a my sa prepadneme, t. j. nezabije syst\u00e9mov\u00fd proces, ale nie\u010do menej d\u00f4le\u017eit\u00e9. T\u00fdm menej d\u00f4le\u017eit\u00fdm bude intenz\u00edvny spotrebite\u013e zdie\u013eanej pam\u00e4te, konkr\u00e9tne postmaster. A po tom bude dobr\u00e9, ak nebude potrebn\u00e9 obnovova\u0165 datab\u00e1zu. <\/p>\n<p><\/p>\n<p>Preto teraz, pokia\u013e si pam\u00e4t\u00e1m, v\u00e4\u010d\u0161ina distrib\u00faci\u00ed m\u00e1 predvolen\u00e9 hodnoty okolo 6, t. j. v akom momente za\u010da\u0165 pou\u017e\u00edva\u0165 swap v z\u00e1vislosti od toho, ko\u013eko pam\u00e4te zostalo. <strong>Teraz odpor\u00fa\u010dame nastavi\u0165 vm.swappiness = 1, preto\u017ee to v podstate vyp\u00edna, ale ned\u00e1va tak\u00fd efekt, ako s ne\u010dakan\u00fdm pr\u00edchodom OOM-killera, ktor\u00fd v\u0161etko zahub\u00ed.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/20f01dca0aff819abcbb687cea69ac74.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010co \u010falej? Ke\u010f hovor\u00edme o v\u00fdkone datab\u00e1z a postupne sa dost\u00e1vame k diskov\u00fdm jednotk\u00e1m, v\u0161etci sa chytaj\u00fa za hlavu. Preto\u017ee pravda, \u017ee disk je pomal\u00fd a pam\u00e4\u0165 r\u00fdchla, je n\u00e1m v\u0161etk\u00fdm zn\u00e1ma u\u017e od detstva. A v\u0161etci vedia, \u017ee v datab\u00e1zach m\u00f4\u017eu vznikn\u00fa\u0165 probl\u00e9my s diskov\u00fdm v\u00fdkonom.<\/p>\n<p><\/p>\n<p>Hlavn\u00fd probl\u00e9m s v\u00fdkonom PostgreSQL, ktor\u00fd s\u00favis\u00ed s v\u00fdkyvmi v checkpointoch, nevznik\u00e1 kv\u00f4li pomal\u00e9mu disku. Je to sk\u00f4r preto, \u017ee priepustnos\u0165 pam\u00e4te a disku nie je vyv\u00e1\u017een\u00e1. M\u00f4\u017ee by\u0165 nevyv\u00e1\u017een\u00e1 na r\u00f4znych miestach. PostgreSQL nie je nakonfigurovan\u00e9, opera\u010dn\u00fd syst\u00e9m nie je nakonfigurovan\u00fd, hardv\u00e9r nie je nakonfigurovan\u00fd a hardv\u00e9r je nespr\u00e1vny. Tento probl\u00e9m nevznik\u00e1, iba ak v\u0161etko prebieha ako m\u00e1, to znamen\u00e1, \u017ee bu\u010f nie s\u00fa \u017eiadne z\u00e1\u0165a\u017ee, alebo nastavenia a hardv\u00e9r s\u00fa dobre prisp\u00f4soben\u00e9. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/c4d841f9ed48bb5bb1b29bd9f189753f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010co to je a ako to vyzer\u00e1? Zvy\u010dajne sa do tohto procesu zap\u00e1jaj\u00fa \u013eudia, ktor\u00ed pracuj\u00fa s PostgreSQL viackr\u00e1t. Vysvetl\u00edm. Ako som u\u017e spom\u00ednal, PostgreSQL pravidelne vykon\u00e1va checkpointy, aby presunulo zne\u010disten\u00e9 str\u00e1nky zo zdie\u013eanej pam\u00e4te na disk. Ak m\u00e1me ve\u013ek\u00fd objem zdie\u013eanej pam\u00e4te, checkpoint za\u010dne intenz\u00edvne p\u00f4sobi\u0165 na disk, preto\u017ee pres\u00fava tieto str\u00e1nky pomocou fsync. Prich\u00e1dza do kernel buffer a zapisuje sa na disky pomocou fsync. A ak je objem tohto procesu ve\u013ek\u00fd, m\u00f4\u017eeme pozorova\u0165 nepr\u00edjemn\u00fd efekt, a to ve\u013emi vysok\u00fa vyu\u017eite\u013enos\u0165 diskov.<\/p>\n<p><\/p>\n<p>Tu m\u00e1m dve obr\u00e1zky. Teraz vysvetl\u00edm, \u010do to je. Toto s\u00fa dva grafy, ktor\u00e9 s\u00fa korelovan\u00e9 v \u010dase. Prv\u00fd graf \u2013 to je vyu\u017eitie disku. V tomto momente dosahuje takmer 90 %. Ak m\u00e1te datab\u00e1zu s fyzick\u00fdmi diskami, a s RAID ovl\u00e1da\u010dom je vyu\u017eitie pod 90 %, to s\u00fa zl\u00e9 spr\u00e1vy. Znamen\u00e1 to, \u017ee e\u0161te chv\u00ed\u013eu a dosiahne to 100 a vstup-v\u00fdstup sa zastav\u00ed. <\/p>\n<p><\/p>\n<p>Ak m\u00e1te diskov\u00fd arzen\u00e1l, je to tro\u0161ku in\u00fd pr\u00edbeh. Z\u00e1vis\u00ed to od toho, ako je nastaven\u00fd, ak\u00fd arzen\u00e1l je a tak \u010falej. <\/p>\n<p><\/p>\n<p>A s\u00fa\u010dasne je tu nakonfigurovan\u00fd graf z intern\u00e9ho PostgreSQL poh\u013eadu, ktor\u00fd ukazuje, ako prebieha checkpoint. A zelenou farbou je tu zobrazen\u00e9, ko\u013eko bufferov, t\u00fdch \u0161pinav\u00fdch str\u00e1nok, pri\u0161lo v tomto checkpoint na synchroniz\u00e1ciu. A to je hlavn\u00e9, \u010do tu treba vedie\u0165. Vid\u00edme, \u017ee m\u00e1me ve\u013ea str\u00e1nok a v ur\u010ditom momente sme narazili na obmedzenie, t. j. p\u00edsali sme a zjavne je diskov\u00fd syst\u00e9m ve\u013emi zamestnan\u00fd. A n\u00e1\u0161 checkpoint m\u00e1 ve\u013emi siln\u00fd vplyv na disk. Ide\u00e1lne by situ\u00e1cia mala vyzera\u0165 sk\u00f4r takto, t. j. tu by bolo menej z\u00e1pisu. A m\u00f4\u017eeme to vyrie\u0161i\u0165 nastaveniami, aby to takto fungovalo. T. j. mal\u00e1 utilitiz\u00e1cia, ale nie\u010do tu predsa len zapisujeme. <\/p>\n<p><\/p>\n<p>\u010co treba urobi\u0165, aby sme tento probl\u00e9m prekonali? Ak v\u00e1m zastavilo IO pod datab\u00e1zou, znamen\u00e1 to, \u017ee v\u0161etci pou\u017e\u00edvatelia, ktor\u00ed pri\u0161li vykon\u00e1va\u0165 svoje po\u017eiadavky, bud\u00fa \u010daka\u0165. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/3efac5fe79443c32f56ec8da2f418116.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ak sa pozrieme z poh\u013eadu Linuxu, ak m\u00e1te dobr\u00fd hardware, spr\u00e1vne ho nastav\u00edte, norm\u00e1lne nakonfigurujete PostgreSQL, aby robil tieto checkpoints menej \u010dasto, rozlo\u017eil ich v \u010dase medzi sebou, potom sa dostanete na predvolen\u00e9 parametre Debianu. Pre v\u00e4\u010d\u0161inu distrib\u00faci\u00ed Linuxu je tak\u00fdto obraz: vm.dirty_ratio=20, vm.dirty_background_ratio=10.<\/p>\n<p><\/p>\n<p>\u010co to znamen\u00e1? S jadrom 2.6 sa objavil jeden d\u00e9mon pre vypr\u00e1zd\u0148ovanie. Pgflush, v z\u00e1vislosti od toho, kto \u010do pou\u017e\u00edva, ktor\u00fd sa zaober\u00e1 pozad\u00edm vypr\u00e1zd\u0148ovan\u00edm \u0161pinav\u00fdch str\u00e1nok z kernel bufferu a zaist\u00ed vypr\u00e1zdnenie, ke\u010f je potrebn\u00e9, bez oh\u013eadu na to, \u010do to znamen\u00e1. <\/p>\n<p><\/p>\n<p>Kedy nast\u00e1va pozadie? Ke\u010f 10 % z celej opera\u010dnej pam\u00e4te, ktor\u00e1 je na serveri, je obsaden\u00e9 \u0161pinav\u00fdmi str\u00e1nkami v kernel bufferi, potom sa vol\u00e1 \u0161peci\u00e1lna funkcia na vypr\u00e1zdnenie v pozad\u00ed. Pre\u010do je to pozad\u00ed? Prij\u00edma ako parameter, ko\u013eko str\u00e1nok vypr\u00e1zdni\u0165. A, povedzme, vypr\u00e1zd\u0148uje N str\u00e1nok. A na nejak\u00fd \u010das t\u00e1to funkcia zasp\u00ed. A potom sa op\u00e4\u0165 vr\u00e1ti a vypr\u00e1zd\u0148uje \u010fal\u0161ie mno\u017estvo str\u00e1nok. <\/p>\n<p><\/p>\n<p>To je extr\u00e9mne jednoduch\u00fd pr\u00edbeh. Tu je \u00faloha ako s baz\u00e9nom, ke\u010f do jednej r\u00farky sa vylieva, do druhej sa nalieva. N\u00e1\u0161 checkpoint pri\u0161iel a ak poslal m\u00e1lo \u0161pinav\u00fdch str\u00e1nok na vypr\u00e1zdnenie, postupne sa to v\u0161etko z kernel bufferu pgflush opatrne rozpt\u00fdli. <\/p>\n<p><\/p>\n<p>Ak sa tieto zne\u010disten\u00e9 str\u00e1nky na\u010falej hromadia, m\u00f4\u017eu dosiahnu\u0165 a\u017e 20 %, potom je opera\u010dn\u00fd syst\u00e9m don\u00faten\u00fd v\u0161etko toto zap\u00edsa\u0165 na disk, preto\u017ee d\u00f4jde k v\u00fdpadku nap\u00e1jania a v\u0161etko p\u00f4jde zle. Tieto \u00fadaje strat\u00edme, napr\u00edklad. <\/p>\n<p><\/p>\n<p>Ak\u00fd je trik? <strong>Trik spo\u010d\u00edva v tom, \u017ee tieto parametre, ktor\u00e9 predstavuj\u00fa 20 a 10 % z celkovej opera\u010dnej pam\u00e4te v po\u010d\u00edta\u010di, s\u00fa z h\u013eadiska priepustnosti ak\u00e9hoko\u013evek diskov\u00e9ho syst\u00e9mu, ktor\u00fd m\u00e1te, \u00faplne obludn\u00e9.<\/strong> <\/p>\n<p><\/p>\n<p>Predstavte si, \u017ee m\u00e1te 128 GB opera\u010dnej pam\u00e4te. 12,8 GB prich\u00e1dzaj\u00fa do v\u00e1\u0161ho diskov\u00e9ho syst\u00e9mu. A bez oh\u013eadu na to, ak\u00e1 vyrovn\u00e1vacia pam\u00e4\u0165 tam je alebo ak\u00fd pole m\u00e1te, nebud\u00fa to zvl\u00e1da\u0165. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/1e4bab2fad7d3a05dc76cdd9d153f46c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Preto odpor\u00fa\u010dame tieto \u010d\u00edsla nastavi\u0165 pod\u013ea mo\u017enost\u00ed v\u00e1\u0161ho RAID ovl\u00e1da\u010da.<\/strong> Tu m\u00e1m hne\u010f odpor\u00fa\u010danie pre ovl\u00e1da\u010d, ktor\u00fd m\u00e1 512 MB vyrovn\u00e1vacej pam\u00e4te. <\/p>\n<p><\/p>\n<p>V\u0161etko sa po\u010d\u00edta ve\u013emi jednoducho. M\u00f4\u017eete nastavi\u0165 vm.dirty_background v bajtoch. A tieto nastavenia zru\u0161ia predch\u00e1dzaj\u00face dve. Bu\u010f pomer predvolene, alebo ak s\u00fa povolen\u00e9 tie, ktor\u00e9 s\u00fa v bajtoch, bud\u00fa fungova\u0165 tie, ktor\u00e9 s\u00fa v bajtoch. Ale ke\u010f\u017ee som DBA konzultant a pracujem s r\u00f4znymi klientmi, sna\u017e\u00edm sa ma\u0165 veci pod kontrolou, a preto, ak v bajtoch, tak v bajtoch. Nikto nedal \u017eiadnu z\u00e1ruku, \u017ee dobr\u00fd admin neprid\u00e1 serveru pam\u00e4\u0165, neobnov\u00ed ho a \u010d\u00edslo zostane rovnak\u00e9. Jednoducho si vypo\u010d\u00edtajte tieto \u010d\u00edsla, aby sa s istotou v\u0161etko zmestilo. <\/p>\n<p><\/p>\n<p>\u010co sa stane, ak sa nezmest\u00edte? Nap\u00edsal som, \u017ee efekt\u00edvne sa zastav\u00ed ak\u00e9ko\u013evek ukladanie, ale v skuto\u010dnosti ide o fraz\u00e9. Opera\u010dn\u00fd syst\u00e9m m\u00e1 ve\u013ek\u00fd probl\u00e9m \u2013 m\u00e1 ve\u013ea zne\u010disten\u00fdch str\u00e1nok, preto sa efekt\u00edvne zastavuje ten IO, ktor\u00fd generuj\u00fa va\u0161i klienti, t. j. pri\u0161lo aplik\u00e1cia s SQL dotazom do datab\u00e1zy, \u010dak\u00e1. Ak\u00fdko\u013evek vstup\/v\u00fdstup do nej je na najni\u017e\u0161ej priorite, preto\u017ee datab\u00e1za je zanepr\u00e1zdnen\u00e1 checkpointom. A kedy ho dokon\u010d\u00ed, je \u00faplne nejasn\u00e9. A ke\u010f dosiahnete nie pozadie, nie pozadia flushingu, to znamen\u00e1, \u017ee v\u0161etko IO je st\u00e1le obsaden\u00e9 t\u00fdmto. A pokia\u013e to neskon\u010d\u00ed, ni\u010d neurob\u00edte. <\/p>\n<p><\/p>\n<p>Existuj\u00fa e\u0161te dva d\u00f4le\u017eit\u00e9 body, ktor\u00e9 presahuj\u00fa tento pr\u00edspevok. Tieto nastavenia by mali zodpoveda\u0165 nastaveniam v postgresql.conf, t. j. nastaveniam kontroln\u00fdch bodov. A v\u00e1\u0161 diskov\u00fd syst\u00e9m mus\u00ed by\u0165 adekv\u00e1tne nastaven\u00fd. <strong>Ak m\u00e1te RAID cache, mala by obsahova\u0165 bat\u00e9riu.<\/strong> \u013dudia kupuj\u00fa RAID s dobr\u00fdm cashom bez bat\u00e9rie. <strong>Ak m\u00e1te SSD v RAID, mali by to by\u0165 serverov\u00e9, mali by ma\u0165 kondenz\u00e1tory.<\/strong> Tu je podrobn\u00fd kontroln\u00fd zoznam. Na tomto odkaze je moja predn\u00e1\u0161ka o tom, ako nastavi\u0165 v\u00fdkon disku v PostgreSQL. Obsahuje v\u0161etky tieto kontroln\u00e9 zoznamy. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/0ca13d550cb9eec4163f886467b2b3ea.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010co e\u0161te m\u00f4\u017ee ve\u013emi skomplikova\u0165 \u017eivot? To s\u00fa dva parametre. S\u00fa relat\u00edvne nov\u00e9. M\u00f4\u017eu by\u0165 predvolene zapnut\u00e9 v r\u00f4znych aplik\u00e1ci\u00e1ch. A m\u00f4\u017eu ve\u013emi skomplikova\u0165 \u017eivot, ak s\u00fa zapnut\u00e9 nespr\u00e1vne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/35aa98d67ff1f089a751a5fd808bd1b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Existuj\u00fa dve relat\u00edvne nov\u00e9 veci. Objavili sa u\u017e v tre\u0165om jadre. Je to sched_migration_cost v nanosekund\u00e1ch a sched_autogroup_enabled, ktor\u00fd je predvolene zapnut\u00fd. <\/p>\n<p><\/p>\n<p>A ako komplikuj\u00fa \u017eivot? \u010co je to sched_migration_cost? Linuxov\u00fd pl\u00e1nova\u010d m\u00f4\u017ee migrova\u0165 proces z jedn\u00e9ho CPU na druh\u00fd. A pre PostgreSQL, ktor\u00fd vykon\u00e1va dotazy, migr\u00e1cia na in\u00fd CPU je \u00faplne nepochopite\u013en\u00e1. Z poh\u013eadu opera\u010dn\u00e9ho syst\u00e9mu, ke\u010f prep\u00ednate okn\u00e1 medzi OpenOffice a termin\u00e1lom, to m\u00f4\u017ee by\u0165 dobr\u00e9, ale <strong>pre datab\u00e1zu \u2013 to je ve\u013emi zl\u00e9.<\/strong> <strong>Preto rozumn\u00e1 politika je nastavi\u0165 migration_cost na nejak\u00fa vysok\u00fa hodnotu, aspo\u0148 nieko\u013eko tis\u00edc nanosek\u00fand.<\/strong> <\/p>\n<p><\/p>\n<p>\u010co to znamen\u00e1 pre pl\u00e1nova\u010d? Bude pova\u017eova\u0165, \u017ee po\u010das tejto doby je tento proces st\u00e1le hor\u00faci. T. j. ak m\u00e1te nejak\u00fa dlh\u00fa transakciu, ktor\u00e1 nie\u010d\u00edm zaober\u00e1, pl\u00e1nova\u010d to pochop\u00ed. Bude si myslie\u0165, \u017ee pokia\u013e neprejde tento \u010dasov\u00fd limit, migr\u00e1cia tohto procesu nie je potrebn\u00e1. Ak sa proces nie\u010doho dot\u00fdka, nebude nikam migr\u00e1cia a pokojne dokon\u010d\u00ed na tom CPU, ktor\u00e9 mu bolo pridelen\u00e9. A v\u00fdsledok je v\u00fdborn\u00fd. <\/p>\n<p><\/p>\n<p>Druh\u00fd aspekt \u2013 to je autogroup. Existuje dobr\u00fd n\u00e1pad pre \u0161pecifick\u00e9 pracovn\u00e9 za\u0165a\u017eenia, ktor\u00e9 nemaj\u00fa vz\u0165ah k modern\u00fdm datab\u00e1zam \u2013 to je skupinov\u00e1 procesy pod\u013ea virtu\u00e1lneho termin\u00e1lu, z ktor\u00e9ho boli spusten\u00e9. Je to pohodln\u00e9 pre niektor\u00e9 \u00falohy. <strong>V praxi je PostgreSQL viacprocesov\u00fd syst\u00e9m s predpreparovan\u00edm (prefork), ktor\u00fd sa sp\u00fa\u0161\u0165a z jedn\u00e9ho termin\u00e1lu. M\u00e1te z\u00e1mok pre zapisovanie, kontroln\u00fd bod a v\u0161etky va\u0161e klientsk\u00e9 po\u017eiadavky sa zoskupuj\u00fa do jedn\u00e9ho pl\u00e1nova\u010da, na jeden CPU. A bud\u00fa tam spolu \u010daka\u0165, kedy sa uvo\u013en\u00ed, aby si navz\u00e1jom prek\u00e1\u017eali a viedli ho \u010do najdlh\u0161ie. Toto je situ\u00e1cia, ktor\u00e1 nie je potrebn\u00e1 pri takomto za\u0165a\u017een\u00ed, a preto je potrebn\u00e9 to vypn\u00fa\u0165.<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/55e829d1c1b69b7f6eaf5fc89dad30d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00f4j kolega Alexej Lesovsk\u00fd vykonal testy s jednoduch\u00fdm pgbenchom, kde zvy\u0161oval poradie migration_cost a vyp\u00ednal autogroup. <strong>Rozdiel na slabom hardv\u00e9ri bol takmer 10 %.<\/strong>Existuje diskusia v mailing liste PostgreSQL, kde \u013eudia zdie\u013eaj\u00fa v\u00fdsledky, ako tak\u00e9to zmeny ovplyvnili r\u00fdchlos\u0165 po\u017eiadaviek. <strong>ovplyvnili o 50 %.<\/strong>Tak\u00fdchto pr\u00edbehov je pomerne ve\u013ea.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/b3d1983ec2a37f8b85129c93f2373644.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A nakoniec o politike \u0161etrenia energie. Dobr\u00e9 je, \u017ee teraz mo\u017eno pou\u017e\u00edva\u0165 Linux na laptopoch. A mal by \u00fadajne dobre hospod\u00e1ri\u0165 s bat\u00e9riou. Ale zrazu sa ukazuje, \u017ee na serveroch to m\u00f4\u017ee by\u0165 tie\u017e. <\/p>\n<p><\/p>\n<p>Navy\u0161e, ak si prenaj\u00edmate servery od nejak\u00e9ho poskytovate\u013ea, tak \"hodn\u00ed\" <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sk\/\"   title=\"hostitel\u00e9\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1200\">hostitel\u00e9<\/a> sa nestaraj\u00fa o to, aby ste mali lep\u0161\u00ed v\u00fdkon. Ich \u00falohou je zabezpe\u010di\u0165, aby sa hardv\u00e9r maximalizoval efekt\u00edvne. Preto m\u00f4\u017eu ma\u0165 predvolene v opera\u010dnom syst\u00e9me zapnut\u00fd re\u017eim \u00faspory energie pre laptopy.<\/p>\n<p><\/p>\n<p><strong>Ak na serveri s datab\u00e1zou pod intenz\u00edvnym za\u0165a\u017een\u00edm pou\u017eijete toto, va\u0161a vo\u013eba je acpi_cpufreq + performance. U\u017e s ondemand bud\u00fa probl\u00e9my.<\/strong> <\/p>\n<p><\/p>\n<p>Intel_pstate je u\u017e tro\u0161ku in\u00fd ovl\u00e1da\u010d. A teraz sa preferuje tento, preto\u017ee je nov\u0161\u00ed a lep\u0161ie funguje.<\/p>\n<p><\/p>\n<p>A teda, guvern\u00e9r len performance. Ondemand, powersave a v\u0161etko ostatn\u00e9 \u2013 to nie je pre v\u00e1s. <\/p>\n<p><\/p>\n<p>V\u00fdsledky po explain analyze PostgreSQL sa m\u00f4\u017eu l\u00ed\u0161i\u0165 o nieko\u013eko poriadkov, ak zapnete powersave, preto\u017ee pod datab\u00e1zou sa CPU pl\u00e1nuje \u00faplne nepredv\u00eddate\u013en\u00fdm sp\u00f4sobom.<\/p>\n<p><\/p>\n<p>Tieto veci m\u00f4\u017eu by\u0165 zapnut\u00e9 predvolene. Pozorne sa pozrite \u2013 nezapli ich predvolene. M\u00f4\u017ee to by\u0165 naozaj ve\u013ek\u00fd probl\u00e9m. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjanskij\" src=\"\/wp-content\/uploads\/2020\/06\/ef32dafd9c8ea3403dc31c34ee2b5da8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na z\u00e1ver by som chcel po\u010fakova\u0165 chlapcom z n\u00e1\u0161ho DBA t\u00edmu PosgreSQL-Consulting, najm\u00e4 Maxovi Bohuku a Alexejovi Lesovsk\u00e9mu, ktor\u00ed sa ka\u017ed\u00fd de\u0148 pot\u00fdkaj\u00fa s probl\u00e9mami v tejto oblasti. A pre na\u0161ich klientov sa sna\u017e\u00edme zabezpe\u010di\u0165, aby to v\u0161etko fungovalo \u010do najlep\u0161ie. Je to ako s pokynmi na bezpe\u010dnos\u0165 letectva. V\u0161etko je nap\u00edsan\u00e9 krvou. Ka\u017ed\u00fd z t\u00fdchto skrutiek bol objaven\u00fd po\u010das niektor\u00e9ho probl\u00e9mu. R\u00e1d sa o ne s vami del\u00edm.<\/p>\n<p><\/p>\n<p>Ot\u00e1zky:<\/p>\n<p><\/p>\n<p><em>\u010eakujem! Ak napr\u00edklad firma chce u\u0161etri\u0165 a umiestni\u0165 datab\u00e1zu a aplika\u010dn\u00fa logiku na jednom serveri, alebo ak firma ide s modern\u00fdm trendom mikroslu\u017eieb, kde sa PostgreSQL sp\u00fa\u0161\u0165a v kontejnere. O \u010do ide? Sysctl vpl\u00fdva glob\u00e1lne na cel\u00e9 jadro. Nevedel som o tom, \u017ee by sa sysctl nejak\u00fdm sp\u00f4sobom virtualizovali, aby fungovali v kontejnere oddelene. Existuje len cgroup a tam je iba \u010diasto\u010dn\u00e1 kontrola. Ako je mo\u017en\u00e9 s t\u00fdm existova\u0165? Alebo ak chcete v\u00fdkon, tak spustite PostgreSQL na samostatnom fyzickom serveri a doladte ho?<\/em><\/p>\n<p><\/p>\n<p>Na va\u0161u ot\u00e1zku sme odpovedali pribli\u017ene tromi sp\u00f4sobmi. Ak ide o fyzick\u00fd server, ktor\u00fd m\u00f4\u017eete doladi\u0165 at\u010f., tak sa uvo\u013enite, v\u0161etko bude bez t\u00fdchto nastaven\u00ed fungova\u0165 dobre. Ak m\u00e1te tak\u00fa z\u00e1\u0165a\u017e, \u017ee potrebujete tieto nastavenia, fyzick\u00e9mu serveru sa dostanete sk\u00f4r, ako k t\u00fdmto nastaveniam.<\/p>\n<p><\/p>\n<p>Ak\u00fd je probl\u00e9m? Ak je to virtu\u00e1lka, pravdepodobne budete ma\u0165 ve\u013ea probl\u00e9mov, napr\u00edklad s t\u00fdm, \u017ee na v\u00e4\u010d\u0161ine virtu\u00e1lok je dos\u0165 nekonzistentn\u00e1 latencia disku. Aj ke\u010f je priepustnos\u0165 diskov dobr\u00e1, jedna zlyh\u00e1vaj\u00faca transakcia vstupno-v\u00fdstupnej oper\u00e1cie, ktor\u00e1 v\u00fdrazne neovplyv\u0148uje priemern\u00fa priepustnos\u0165, sa m\u00f4\u017ee vyskytn\u00fa\u0165 v momente checkpointu alebo pri z\u00e1pise do WAL, a datab\u00e1za to bude zn\u00e1\u0161a\u0165 \u0165a\u017eko. A toto si v\u0161imnete sk\u00f4r, ako sa dostanete k t\u00fdmto probl\u00e9mom. <\/p>\n<p><\/p>\n<p>Ak budete ma\u0165 NGINX na tom istom serveri, tie\u017e budete ma\u0165 ten ist\u00fd probl\u00e9m. Bude s\u00fa\u0165a\u017ei\u0165 o zdie\u013ean\u00fa pam\u00e4\u0165. A ku probl\u00e9mom, ktor\u00e9 s\u00fa tu op\u00edsan\u00e9, sa nedostanete.<\/p>\n<p><\/p>\n<p>Na druhej strane, niektor\u00e9 z t\u00fdchto parametrov bud\u00fa pre v\u00e1s st\u00e1le relevantn\u00e9. Napr\u00edklad, s pomocou parametra sysctl si nastavte dirty_ratio na ni\u017e\u0161iu hodnotu, aby to nebolo tak\u00e9 extr\u00e9mne \u2013 v ka\u017edom pr\u00edpade to pom\u00f4\u017ee. Tak \u010di onak, interakcia s diskom bude nevyhnutn\u00e1. A t\u00e1to interakcia bude na nespr\u00e1vnej sch\u00e9me. To, \u010do som uk\u00e1zal, s\u00fa predvolen\u00e9 parametre. A v ka\u017edom pr\u00edpade je lep\u0161ie ich zmeni\u0165. <\/p>\n<p><\/p>\n<p>S NUMA m\u00f4\u017eu by\u0165 probl\u00e9my. VmWare, napr\u00edklad, dobre funguje s NUMA s presne opa\u010dn\u00fdmi nastaveniami. A tu je potrebn\u00e9 sa rozhodn\u00fa\u0165 \u2013 fyzick\u00fd server alebo nefyzick\u00fd. <\/p>\n<p><\/p>\n<p><em>M\u00e1m ot\u00e1zku t\u00fdkaj\u00facu sa Amazon AWS. Maj\u00fa predkonfigurovan\u00e9 image. Jeden z nich sa vol\u00e1 Amazon RDS. Existuj\u00fa tam nejak\u00e9 vlastn\u00e9 nastavenia pre ich opera\u010dn\u00fd syst\u00e9m?<\/em><\/p>\n<p><\/p>\n<p>Existuj\u00fa nastavenia, ale s\u00fa to in\u00e9 nastavenia. Tu nastavujeme opera\u010dn\u00fd syst\u00e9m z poh\u013eadu toho, ako datab\u00e1za bude t\u00fato situ\u00e1ciu vyu\u017e\u00edva\u0165. A tam s\u00fa parametre, ktor\u00e9 ur\u010duj\u00fa, ak\u00fdm smerom ideme, ak\u00e9 zdroje potrebujeme a ako ich teraz vyu\u017eijeme. Po tomto Amazon RDS tie zdroje prirad\u00ed, a tam v\u00fdkon kles\u00e1. S\u00fa samostatn\u00e9 pr\u00edbehy, ako sa niektor\u00ed \u013eudia s t\u00fdmto zaobch\u00e1dzaj\u00fa. Niekedy aj celkom \u00faspe\u0161ne. Ale to nes\u00favis\u00ed s nastaveniami OS. To je sk\u00f4r hacking v cloude. To je in\u00fd pr\u00edbeh.<\/p>\n<p><\/p>\n<p><em>Pre\u010do transparentn\u00e9 obrovsk\u00e9 str\u00e1nky nemaj\u00fa efekt v porovnan\u00ed s obrovsk\u00fdm TLB?<\/em><\/p>\n<p><\/p>\n<p>Nemaj\u00fa. Toto m\u00f4\u017eeme vysvetli\u0165 mnoh\u00fdmi sp\u00f4sobmi. Ale v skuto\u010dnosti jednoducho nemaj\u00fa efekt. Ak\u00fd je pr\u00edbeh PostgreSQL? Pri spusten\u00ed si vyhrad\u00ed ve\u013ek\u00fd kus zdie\u013eanej pam\u00e4te. \u010ci s\u00fa transparentn\u00e9 alebo nie \u2013 nie je to v\u00f4bec d\u00f4le\u017eit\u00e9. Fakt, \u017ee sa vy\u010dlenia pri \u0161tarte, vysvet\u013euje v\u0161etko. A ak je pam\u00e4te ve\u013emi ve\u013ea a treba prestava\u0165 segment zdie\u013eanej pam\u00e4te, potom bud\u00fa transparentn\u00e9 obrovsk\u00e9 str\u00e1nky relevantn\u00e9. U PostgreSQL je to jednoducho pri \u0161tarte vy\u010dlenen\u00e9 ako ve\u013ek\u00fd kus a hotovo, a \u010falej sa u\u017e ni\u010d mimoriadne nedeje. Samozrejme, m\u00f4\u017eete ich pou\u017ei\u0165, ale existuje riziko z\u00edskania po\u0161kodenia zdie\u013eanej pam\u00e4te, ke\u010f sa nie\u010do bude prealokov\u00e1va\u0165. PostgreSQL o tom v\u0161ak nevie.<\/p>\n<p>Zdroj: <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.4 - 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\/sk\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\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\/sk\/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\udd47Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL. I\u013eja Kosmodemjansk\u00fd | ProHoster","description":"Prepis predn\u00e1\u0161ky z roku 2015 od I\u013eji Kosmodemjansk\u00e9ho \"Ladenie Linuxu na zlep\u0161enie v\u00fdkonu PostgreSQL\" Upozornenie: Upozor\u0148ujem, \u017ee t\u00e1to predn\u00e1\u0161ka je datovan\u00e1 novembrom 2015 \u2013 uplynulo viac ako 4 roky a udialo sa ve\u013ea vec\u00ed.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/84082","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=84082"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/84082\/revisions"}],"predecessor-version":[{"id":159869,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/84082\/revisions\/159869"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/84083"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=84082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=84082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=84082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}