{"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\/hr\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","title":{"rendered":"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Prezentacija Ilje Kosmodemjanskoga iz 2015. godine \"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a\"<\/p>\n<p><\/p>\n<p>Odricanje: Napominjem da je ova prezentacija datirana novembrom 2015. godine \u2014 pro\u0161lo je vi\u0161e od 4 godine i mnogo se toga promenilo. Verzija 9.4 koja se razmatra u prezentaciji vi\u0161e nije podr\u017eana. Tokom protekle 4 godine objavljeno je 5 novih verzija PostgreSQL-a i 15 verzija Linux jezgra. Ako bismo prepisali ova mesta, to bi u kona\u010dnici postala druga prezentacija. No, ovde je razmatrano osnovno pode\u0161avanje Linux-a za PostgreSQL koje je i dalje aktuelno.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" 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=\"Pogledajte 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>Zovem se Ilja Kosmodemjanski. Radim u kompaniji PostgreSQL-Consulting. Sada \u0107u malo pri\u010dati o tome \u0161ta raditi sa Linux-om u vezi sa bazama podataka uop\u0161te i sa PostgreSQL-om posebno, jer su principi prili\u010dno sli\u010dni.<\/p>\n<p><\/p>\n<p>O \u010demu \u0107emo govoriti? Ako komunicirate sa PostgreSQL-om, do odre\u0111ene mere morate biti UNIX administrator. \u0160ta to zna\u010di? Ako uporedimo Oracle i PostgreSQL, u Oracle-u morate biti 80 % DBA administrator baze podataka i 20 % administrator Linux-a.<\/p>\n<p><\/p>\n<p>Sa PostgreSQL-om je malo slo\u017eenije. Sa PostgreSQL-om treba mnogo bolje razumeti kako Linux funkcioni\u0161e. I pritom treba malo juriti za vozom, jer se u poslednje vreme sve prili\u010dno brzo a\u017eurira. Na izlaz novog jezgra, novi funkcionalnosti se pojavljuju, performanse se pobolj\u0161avaju itd. <\/p>\n<p><\/p>\n<p>Za\u0161to govorimo o Linux-u? Ne zato \u0161to smo na Linux konferenciji u Peterburgu, ve\u0107 zato \u0161to je u savremenim uslovima jedan od najprikladnijih operativnih sistema za rad sa bazama podataka uop\u0161te, a posebno sa PostgreSQL-om \u2013 to je Linux. Na\u017ealost, FreeBSD se razvija u prili\u010dno \u010dudnom pravcu. I imat \u0107emo problema i sa performansama i sa mnogim drugim stvarima. <strong>Performanse PostgreSQL-a na Windows-u \u2013 to je uop\u0161te posebna tema koja se suo\u010dava s tim \u0161to Windows nema zajedni\u010dku memoriju kao UNIX, a kod PostgreSQL-a se sve oslanja na to, jer je to vi\u0161epostupkovni sistem.<\/strong> <\/p>\n<p><\/p>\n<p>I egzotika poput Solaris-a, mislim da zanima manje ljudi, zato idemo dalje. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/990133933bd1816895fc8f73edaf900e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Savremeni Linux distribucijski sistem ima vi\u0161e od 1,000 syctl parametara, zavisno od na\u010dina na koji je jezgro sastavljeno. Pritom, ako pogledamo jo\u0161 razli\u010dite stvari, mo\u017eemo na mnogo na\u010dina dodatno prilagoditi. Postoje parametri datote\u010dnih sistema, kako ih montirati. Ako imate pitanja, kako pokrenuti: \u0161ta uklju\u010diti u BIOS-u, kako postaviti opremu itd.<\/p>\n<p><\/p>\n<p>Ovo je vrlo velik volumen koji se mo\u017ee obja\u0161njavati nekoliko dana, a ne u jednom kratkom izlaganju, ali \u0107u se sada usredoto\u010diti na va\u017ene stvari, kako izbje\u0107i one zamke koje \u0107e vam sigurno onemogu\u0107iti dobru eksploataciju baze podataka na Linuxu, ako ih ne ispravite. Istovremeno, va\u017ena stvar je da su mnogi parametri po defaultu uklju\u010deni u postavke koje nisu ispravne za bazu podataka. Drugim rije\u010dima, prema zadanim postavkama \u0107e raditi lo\u0161e ili uop\u0107e ne\u0107e raditi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/189f6497c795a5e5fd5b458edfadb22f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Koji su tradicionalni ciljevi optimizacije u Linuxu? Mislim da, s obzirom na to da se svi bavite administracijom Linuxa, ne treba posebno obja\u0161njavati \u0161to su ciljevi. <\/p>\n<p><\/p>\n<p>Mo\u017eete optimizirati:<\/p>\n<p><\/p>\n<ul>\n<li>CPU.<\/li>\n<li>Memoriju.<\/li>\n<li>Skladi\u0161te.<\/li>\n<li>Ostalo. O tome \u0107emo razgovarati na kraju kao poslastica. \u010cak i, na primjer, takvi parametri kao \u0161to su politike u\u0161tede energije mogu na vrlo nepredvidljiv i neugodan na\u010din utjecati na performanse. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/92916aadaf123a3f836bed3a2c1bd95a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kakva je specifi\u010dnost PostgreSQL-a i op\u0107enito baza podataka? Problem je u tome \u0161to ne mo\u017eete optimizirati neku pojedina\u010dnu stvar i o\u010dekivati da \u0107e se performanse zna\u010dajno pobolj\u0161ati. <\/p>\n<p><\/p>\n<p>Da, takvih stvari ima, ali baza podataka je slo\u017eena. Ona komunicira sa svim resursima koje server ima i preferira punu interakciju. Ako pogledate moderne preporuke Oracle-a o tome kako koristiti host OS, to \u0107e biti poput viceva o onom mongolskom astronautu \u2013 nahranite psa i ne dirajte ni\u0161ta. Pru\u017eit \u0107emo bazi sve resurse, baza podataka \u0107e se sama sna\u0107i. <\/p>\n<p><\/p>\n<p>U na\u010delu, do neke mjere s PostgreSQL-om situacija je identi\u010dna. Razlika je u tome \u0161to baza ne mo\u017ee sama preuzeti sve resurse, tj. negdje je potrebno sve to samostalno razraditi na razini Linuxa. <\/p>\n<p><\/p>\n<p>Osnovna ideja je ne odabrati neki pojedina\u010dni cilj i po\u010deti ga optimizirati, primjerice, memoriju, CPU ili ne\u0161to sli\u010dno, ve\u0107 analizirati radno optere\u0107enje i poku\u0161ati maksimalno pobolj\u0161ati propusnost, kako bi kroz na\u0161u bazu podataka \u0161to u\u010dinkovitije prolazilo optere\u0107enje koje su nam stvorili dobri programeri, uklju\u010duju\u0107i i na\u0161e korisnike. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/2db6c11a6f612b8aecccfe126be4fd7f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ovo je slika koja obja\u0161njava \u0161to to\u010dno jest. Tu je Linux OS bafer, tu je dijeljena memorija i dijeljeni baferi PostgreSQL-a. PostgreSQL, za razliku od Oracla, radi isklju\u010divo preko bafera jezgre, tj. da bi stranica s diska u\u0161la u njegovu dijeljenu memoriju, mora pro\u0107i kroz kernel bafer i natrag, situacija je ista. <\/p>\n<p><\/p>\n<p>Pod ovim sustavom nalaze se diskovi. To sam nacrtao kao diskove. U stvarnosti tu mo\u017ee biti RAID kontroler itd. <\/p>\n<p><\/p>\n<p>Taj ulaz-izlaz se s jedne ili druge strane doga\u0111a kroz to.<\/p>\n<p><\/p>\n<p>PostgreSQL je klasi\u010dna baza podataka. Unutra su stranice. Sav ulaz-izlaz odvija se pomo\u0107u stranica. Mi u\u010ditavamo blokove u memoriju pomo\u0107u stranica. Ako se ni\u0161ta nije dogodilo, samo smo ih pro\u010ditali, tada postupno tonu iz tog ke\u0161a, iz dijeljenih bafera, i vra\u0107aju se natrag na disk. <\/p>\n<p><\/p>\n<p>Ako smo negdje ne\u0161to zamijenili, cijela stranica se ozna\u010dava kao prljava. Obojio sam ih ovdje plavom bojom. To zna\u010di da se ta stranica mora sinkronizirati s blokovnim spremi\u0161tem. Dakle, kada smo je u\u010dinili prljavom, napravili smo zapis u WAL-u. I u nekom trenutku do\u0161lo je do fenomena nazvanog checkpoint. U taj log upisana je informacija da je do\u0161ao. To zna\u010di da su sve prljave stranice koje su u tom trenutku bile u tim dijeljenim baferima sinkronizirane s diskom pomo\u0107u fsync-a kroz kernel bafer.<\/p>\n<p><\/p>\n<p>Za\u0161to se to radi? Ako nam nestane struje, ne \u017eelimo situaciju u kojoj su svi podaci nestali. Perzistentna memorija, o kojoj su nam svi pri\u010dali, trenutno je teorija baza podataka \u2014 to je svijetla budu\u0107nost kojoj te\u017eimo i svi\u0111a nam se, ali trenutno je to jo\u0161 uvijek 20 godina unazad. I, naravno, potrebno je sve to pratiti.<\/p>\n<p><\/p>\n<p>Cilj maksimiziranja propusnosti jest optimizirati na svim tim fazama kako bi sve to brzo putovalo naprijed-natrag. Dijeljena memorija je uglavnom stranicni ke\u0161. U PostgreSQL-u smo poslali select upit, on je izvukao te podatke s diska. Ti podaci su u\u0161li u dijeljene baferi. Stoga, kako bi to bolje radilo, potrebno je imati puno memorije.<\/p>\n<p><\/p>\n<p>Kako bi sve to radilo dobro i brzo, morate ispravno konfigurirati operacijski sustav na svim razinama. Tako\u0111er, potrebno je odabrati uravnote\u017een hardver, jer ako bude neravnote\u017ee negdje, mo\u017eete imati puno memorije, ali \u0107e se njome slu\u017eiti nedovoljnom brzinom. <\/p>\n<p><\/p>\n<p>Pro\u0107i \u0107emo kroz svaki od ovih to\u010daka.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/fe031218be39cd727f3a76b22563e101.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kako bi te stranice br\u017ee putovale naprijed-natrag, potrebno je posti\u0107i sljede\u0107e:<\/p>\n<p><\/p>\n<ul>\n<li>Prvo, trebate u\u010dinkovitije raditi s memorijom.<\/li>\n<li>Drugim rije\u010dima, ovaj prijelaz, kada stranice iz memorije prelaze na disk, treba biti u\u010dinkovitiji.<\/li>\n<li>I, tre\u0107e, trebaju biti dobri diskovi. <\/li>\n<\/ul>\n<p><\/p>\n<p>Ako imate 512 GB radne memorije u <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/hr\/server\/dts-dronten\/\"   title=\"serveru\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2587\">serveru<\/a> i sve to na kraju dolazi na SATA tvrdi disk bez ikakvog ke\u0161a, tada cijeli va\u0161 poslu\u017eitelj baze podataka postaje ne samo bundeva, ve\u0107 bundeva s SATA su\u010deljem. Direktno \u0107ete se suo\u010diti s tim problemom. Ni\u0161ta vas ne\u0107e spasiti.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/6630e445c96e94621ae670bc4aee8492.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0160to se ti\u010de prvog aspekta s memorijom, postoje tri stvari koje mogu zna\u010dajno ote\u017eati \u017eivot. <\/p>\n<p><\/p>\n<p>Prva od njih je NUMA. NUMA je stvorena da pobolj\u0161a performanse. Ovisno o optere\u0107enju, mo\u017eete optimizirati razli\u010dite stvari. U njenom novom obliku, nije ba\u0161 najbolja za aplikacije poput baze podataka koje intenzivno koriste dijeljeni predmemorijski sloj. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/8fcf2af82a96bd1ac52fb0a36bf0b0b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ukratko, kako prepoznati da ne\u0161to nije u redu s NUMA? Imate neki neugodan zvuk, iznenada jedan od CPU-a izgleda preoptere\u0107en. Dok analizirate upite u PostgreSQL-u, vidite da ni\u0161ta sli\u010dno tome ne postoji. Ti upiti ne bi trebali toliko intenzivno optere\u0107ivati CPU. Ovo mo\u017eete dugo uhvatiti. Lak\u0161e je od samog po\u010detka primijeniti ispravne preporuke za konfiguraciju NUMA za PostgreSQL.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/424b8677e5ae1382b9b49b288e045a3f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0160to se zapravo doga\u0111a? NUMA \u2013 to je Non-Uniform Memory Access. \u010cemu to slu\u017ei? Imate CPU, uz njega se nalazi njegova lokalna memorija. A ta memorija mo\u017ee povla\u010diti memoriju s drugih CPU-a preko me\u0111uspojnica.<\/p>\n<p><\/p>\n<p>Ako pokrenete <code>numactl --hardware<\/code>, dobit \u0107ete veliku listu. Me\u0111u ostalim, bit \u0107e tu polje udaljenosti. Bit \u0107e brojevi \u2013 10-20, ne\u0161to sli\u010dno tome. Ti brojevi predstavljaju broj skokova potrebnih za povla\u010denje te udaljene memorije za lokalnu upotrebu. U principu, dobra ideja. To zna\u010dajno pobolj\u0161ava performanse kod odre\u0111enih optere\u0107enja.<\/p>\n<p><\/p>\n<p>Zamislite sada da imate jedan CPU koji prvo poku\u0161ava koristiti svoju lokalnu memoriju, a zatim poku\u0161ava povu\u0107i drugu memoriju preko interconnecta za ne\u0161to. I na taj CPU dolazi cijeli va\u0161 page cache PostgreSQL \u2013 sve, nekoliko gigabajta. Uvijek dobijate najgori slu\u010daj jer CPU u ovom modulu memorije obi\u010dno ima malo prostora. A cijela memorija koja se koristi prolazi kroz te interconnecte. Postaje sporo i \u017ealosno. Imate procesor koji neprekidno opservira ovaj \u010dvor, stalno je preoptere\u0107en. A vrijeme pristupa toj memoriji je lo\u0161e, sporo. Ova situacija je ono \u0161to ne \u017eelite kada koristite ovo za bazu podataka. <\/p>\n<p><\/p>\n<p>Stoga je ispravnija opcija za bazu podataka da operacijski sustav Linux uop\u0107e ne zna \u0161to se doga\u0111a. Da se obra\u0107a memoriji onako kako se obra\u0107a. <\/p>\n<p><\/p>\n<p>Za\u0161to je to tako? \u010cinilo bi se da bi trebalo biti obrnuto. To se doga\u0111a iz jednog jednostavnog razloga, jer nam treba puno memorije za page cache \u2013 desetci, stotine gigabajta. <\/p>\n<p><\/p>\n<p>I ako smo sve to izdvojili i skastali na\u0161e podatke tamo, dobit od kori\u0161tenja cache-a \u0107e biti zna\u010dajno ve\u0107a nego dobit od takvog pametnog pristupa memoriji. Na ovaj na\u010din \u0107emo ostvariti dobit koja nije usporediva u odnosu na to da \u0107emo u\u010dinkovitije pristupati memoriji koriste\u0107i NUMA.<\/p>\n<p><\/p>\n<p>Dakle, postoji dva pristupa do sada, sve dok svijetla budu\u0107nost ne do\u0111e, i baza podataka ne zna sama na kojim CPU-ima se nalaze i odakle joj ne\u0161to treba povu\u0107i. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/218513d407ea77320057d57b447c54d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Pravi pristup je potpuno isklju\u010diti NUMA<\/strong>, na primjer, pri ponovnom pokretanju. U ve\u0107ini slu\u010dajeva dobitak je toliko velik da se ne postavlja pitanje koja je bolja opcija. <\/p>\n<p><\/p>\n<p>Postoji jo\u0161 jedna opcija. Otu\u017eni smo je vi\u0161e nego prvu, jer kada nam klijent do\u0111e na podr\u0161ku, ponovno pokretanje servera za njega je veliki posao. Njegov poslovanje se odvija. A problemi zbog NUMA su im poznati. Stoga se trudimo isklju\u010diti je manje invazivnim na\u010dinima, nego rebootom, ali ovdje budite pa\u017eljivi i provjerite da je zaista isklju\u010dena. Jer, kako iskustvo pokazuje, kada isklju\u010dujemo NUMA na roditeljskom procesu PostgreSQL-a, to je dobro, ali to nije nu\u017eno jamstvo da \u0107e to funkcionirati. Mora se provjeriti i vidjeti da je zaista isklju\u010dena. <\/p>\n<p><\/p>\n<p>Post koji je napisao Robert Haas je izvrstan. On je jedan od committera PostgreSQL-a. Klju\u010dni je developer svih niskonivoznih elemenata. I ako se pro\u0111e kroz linkove u ovom postu, opisane su neke zanimljive pri\u010de o tome kako su ljudima NUMA ote\u017eavali \u017eivot. Pogledajte, prou\u010dite popis koji treba postaviti na serveru kako bi na\u0161a baza podataka dobro radila. Ove postavke treba zabilje\u017eiti i provjeravati, jer u suprotnom ne\u0107e biti dobro. <\/p>\n<p><\/p>\n<p>Skre\u0107em pa\u017enju da se ovo odnosi na sve postavke o kojima \u0107u govoriti. Obi\u010dno se baze podataka organiziraju u na\u010dinu master-slave radi otpornosti na kvarove. Ne zaboravite unijeti ove postavke na slave, jer \u0107e u jednom trenutku do\u0107i do kvara, a vi \u0107ete se prebaciti na slave koji \u0107e postati master. <\/p>\n<p><\/p>\n<p>U hitnoj situaciji, kada je stanje kriti\u010dno, kada vam neprestano zvoni telefon i kada \u0161ef dolazi s velikom palicom, ne\u0107ete imati vremena razmi\u0161ljati o provjeri. A rezultati mogu biti vrlo nepovoljni.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/d2fdda7ad4570554b0e134758295f83e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sljede\u0107a tema su huge pages. Te\u017ee ih je testirati posebno, a ni nema smisla to raditi, iako postoje benchmarkovi koji to mogu. Lako se nalaze na internetu. <\/p>\n<p><\/p>\n<p>Koji je smisao? Imate server koji nije preskup a sadr\u017ei puno radne memorije, na primjer, vi\u0161e od 30 GB. Ne koristite huge pages. To zna\u010di da imate jasno preoptere\u0107enje u kori\u0161tenju memorije. A to preoptere\u0107enje nije nimalo ugodno. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/28c3c94390a6afef815f712ac9189c2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Za\u0161to je to tako? \u0160to se doga\u0111a? Operativni sustav se sje\u0107a memorije u malim dijelovima. To je zgodno, tako je historijski zapo\u010delo. Ako u\u0111emo u detalje, OS mora pretvarati virtualne adrese u fizi\u010dke. I to nije najjednostavniji proces, stoga OS rezultat te operacije pohranjuje u Translation Lookaside Buffer (TLB).<\/p>\n<p><\/p>\n<p>I s obzirom na to da je TLB cache, u toj situaciji nastaju svi problemi koje cache ima. Prvo, ako imate jako puno radne memorije koja je podijeljena u sitne dijelove, taj buffer postaje jako velik. A ako je cache velik, pretra\u017eivanje postaje sporije. Preoptere\u0107enje je zna\u010dajno i ono samo zauzima prostor, tj. ne\u0161to neprikladno koristi radnu memoriju. <\/p>\n<p><\/p>\n<p>Dva \u2013 \u0161to vi\u0161e cache raste u takvoj situaciji, to je ve\u0107a vjerojatnost da \u0107ete imati cache misses. I u\u010dinkovitost ovog cachea brzo pada s raste\u0107om veli\u010dinom. Stoga su operativni sustavi smislili jednostavan pristup. U Linuxu se to ve\u0107 dugo koristi. U FreeBSD-u se nedavno pojavilo. Ali govorimo o Linuxu. To su huge pages.<\/p>\n<p><\/p>\n<p>I ovdje treba napomenuti da su huge pages, kao ideja, prvotno promovirali zajednice koje su uklju\u010divale Oracle i IBM, tj. proizvo\u0111a\u010di baza podataka su ozbiljno razmi\u0161ljali o tome kako \u0107e ovo koristiti, uklju\u010duju\u0107i baze podataka. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/39a24536929fbcf551d8ba1c8e7faf32.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kako to povezati s PostgreSQL-om? Prvo, u Linux jezgru moraju biti uklju\u010dene huge pages.<\/p>\n<p><\/p>\n<p>Drugo, moraju biti izri\u010dito navedene sysctl parametrom \u2013 koliko ih ima. Brojevi ovdje dolaze s nekog starog servera. Mo\u017eete izra\u010dunati koliko vam otprilike treba shared buffers kako bi huge pages stale unutra. <\/p>\n<p><\/p>\n<p>I ako je cijeli server dodijeljen PostgreSQL-u, dobra polazna to\u010dka je ili 25 % RAM-a dodijeliti za shared buffers, ili 75 %, ako ste sigurni da \u0107e va\u0161a baza podataka sigurno stati u tih 75 %. Ovo je prva polazna to\u010dka. I izra\u010dunajte, ako imate 256 GB RAM-a, tada \u0107e vam otprilike 64 GB biti za shared buffers. Izra\u010dunajte s nekim marginama \u2013 koliko bi ta brojka trebala biti.<\/p>\n<p><\/p>\n<p>Do verzije 9.2 (ako se ne varam, od verzije 8.2) mogla se koristiti vanjska biblioteka za povezivanje PostgreSQL-a s huge pages. A to se uvijek treba raditi. Prvo, trebate da jezgro ispravno alocira huge pages. A drugo, aplikacija koja radi s njima mora mo\u0107i iskoristiti te strane. Samo tako ne\u0107e mo\u0107i. Budu\u0107i da je PostgreSQL alocirao memoriju u stilu system 5, to se moglo u\u010diniti pomo\u0107u libhugetlbfs \u2014 to je potpuno ime biblioteke.<\/p>\n<p><\/p>\n<p>U verziji 9.3 pobolj\u0161ana je izvedba PostgreSQL pri upravljanju memorijom i odustalo se od system 5 metode alokacije memorije. Svi su se jako obradovali, jer, ina\u010de, kada poku\u0161ate pokrenuti dva instanca PostgreSQL na jednoj ma\u0161ini, on ka\u017ee da mu nedostaje \u0161erirane memorije. I zahtijeva da se ispravi sysctl. A taj sysctl je takav da treba ponovo pokrenuti sistem i tako dalje. Uglavnom, svi su se obradovali. No, alokacija memorije preko mmap-a je pokvarila kori\u0161tenje ogromnih stranica. Ve\u0107ina na\u0161ih klijenata koristi velike \u0161erirane baferove. I sna\u017eno smo preporu\u010dili da se ne prelazi na 9.3, jer je tamo overhead po\u010dinjao u dobrim postotcima biti zna\u010dajan.<\/p>\n<p><\/p>\n<p>Ali, zajednica je obratila pa\u017enju na ovaj problem i u 9.4 su vrlo dobro preradili ovo rje\u0161enje. I u 9.4 je uvedena opcija u postgresql.conf, gdje se mo\u017ee uklju\u010diti try, on ili off.<\/p>\n<p><\/p>\n<p>Try je najbezbednija opcija. Prilikom pokretanja PostgreSQL-a, kada alocira \u0161eriranu memoriju, poku\u0161ava da dobije tu memoriju iz ogromnih stranica. I ako ne uspe, vra\u0107a se na uobi\u010dajenu alokaciju. I ako koristite FreeBSD ili Solaris, mo\u017eete postaviti try, to je uvek sigurno. <\/p>\n<p><\/p>\n<p>Ako je on, jednostavno se ne pokre\u0107e ako nije uspeo da alocira iz ogromnih stranica. Ovo je ve\u0107 isklju\u010divo stvar izbora. Ali ako imate try, proverite da li ste zaista alocirali ono \u0161to vam treba, jer postoji puno prostora za gre\u0161ke. Trenutno, ova funkcionalnost radi samo na Linuxu.<\/p>\n<p><\/p>\n<p>Jo\u0161 jedna mala napomena pre nego \u0161to pre\u0111emo dalje. Transparentne ogromne stranice jo\u0161 uvek nisu u PostgreSQL-u. Ne mo\u017ee ih pravilno iskoristiti. I pri transparentnim ogromnim stranicama, u situacijama gde je potreban veliki deo \u0161erirane memorije, prednosti se javljaju samo pri veoma velikim koli\u010dinama. Ako imate terabajte memorije, tada to mo\u017ee igrati ulogu. Kada govorimo o uobi\u010dajenim primenama, kada imate 32, 64, 128, 256 GB memorije na ma\u0161ini, tada su obi\u010dne ogromne stranice u redu, a transparentne jednostavno isklju\u010dujemo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/18cf3ace8876e55b42e66f617a24f1bc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I zadnja stvar koja se ti\u010de memorije, nije direktno povezana sa propusno\u0161\u0107u, ali mo\u017ee jako zakomplikovati \u017eivot. Cela propusnost \u0107e jako stradati zbog toga \u0161to server stalno prelazi u swap. <\/p>\n<p><\/p>\n<p>I to \u0107e biti vrlo neugodno u nizu situacija. Glavna neugodnost le\u017ei u tome \u0161to se pona\u0161anje modernih jezgri malo razlikuje od starijih Linux jezgri. Ovo je ne\u0161to na \u0161to je neugodno naletjeti, jer kada govorimo o radu sa swapom, zavr\u0161ava to s nepravovremenim dolaskom OOM-killera. A OOM-killer koji nije stigao na vrijeme i skinuo PostgreSQL, to je neprijatno. O tome \u0107e svi saznati, tj. do posljednjeg korisnika. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/c7c46ff0f4cd8cfcfb21978dd1da4c08.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0160to se doga\u0111a? Imate puno RAM-a, sve dobro funkcionira. No, iz nekog razloga, server se zamrzava u swapu i time usporava. Naizgled, ima dovoljno memorije, ali tako se doga\u0111a. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/24d19929f1506cd9768a836095a24dfb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ranije smo savjetovali da se vm.swappiness postavi na nulu, tj. da se isklju\u010di swap. Nekada se smatralo da 32 GB RAM-a i odgovaraju\u0107i shared bufferi predstavljaju ogromnu koli\u010dinu. Osnovna svrha swap-a je da bude mjesto gdje mo\u017eete smjestiti koru ako ispadnete. No, to vi\u0161e nije bila posebno ostvarena svrha. A \u0161to \u0107ete kasnije napraviti s tom korom? To postaje pitanje koje ne obja\u0161njava jasno za\u0161to je swap uop\u0107e potreban, pogotovo u toj veli\u010dini. <\/p>\n<p><\/p>\n<p>No, u modernijim, tj. tre\u0107im verzijama jezgri, pona\u0161anje se promijenilo. Ako isklju\u010dite swap, tj. postavite ga na nulu, pre ili kasnije, \u010dak i uz preostalu koli\u010dinu RAM-a, OOM-killer \u0107e do\u0107i da ubije najintenzivnije potro\u0161a\u010de. Jer \u0107e smatrati da uz takvo optere\u0107enje imamo jo\u0161 malo raspolo\u017eive memorije i da \u0107emo pasti, tj. ne\u0107e ubiti sistemski proces, ve\u0107 ne\u0161to manje va\u017eno. To \u0107e manje va\u017eno biti intenzivni potro\u0161a\u010d shared memorije, to jest postmaster. Nakon toga, bit \u0107e dobro ako bazu ne\u0107ete morati obnavljati. <\/p>\n<p><\/p>\n<p>Zato sada, koliko se sje\u0107am, ve\u0107ina distribucija postavlja podrazumijevano na oko 6, tj. u kojem trenutku po\u010deti koristiti swap ovisno o tome koliko je memorije preostalo. <strong>Sada savjetujemo da se postavi vm.swappiness = 1, jer to prakti\u010dki isklju\u010duje swap, ali ne dovodi do takvih efekata kao s nepredvi\u0111enim dolaskom OOM-killera koji sve to ubija.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/20f01dca0aff819abcbb687cea69ac74.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0160to dalje? Kada govorimo o performansama baza podataka i polako se pribli\u017eavamo diskovima, svi se hvataju za glavu. Jer istina da je disk spor, a memorija brza, svima je poznata od malih nogu. Svi znaju da \u0107e u bazi podataka biti problema s diskovnom performansom.<\/p>\n<p><\/p>\n<p>Glavni problem s performansama PostgreSQL, povezan s uzletima checkpoints-a, ne nastaje zbog sporosti diska. Umjesto toga, dolazi do nerazmjernosti izme\u0111u propusnosti memorije i diska. Ova nerazmjernost mo\u017ee se javljati na razli\u010ditim mjestima. PostgreSQL nije pravilno pode\u0161en, operativni sustav nije pode\u0161en, hardver nije postavljen i hardver nije ispravan. Ovaj problem se ne javlja samo kada se sve odvija ispravno, tj. ili nema optere\u0107enja, ili su postavke i hardver dobro odabrani. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/c4d841f9ed48bb5bb1b29bd9f189753f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0160to je to i kako to izgleda? Obi\u010dno, ljudi koji rade s PostgreSQL-om vi\u0161e puta su se suo\u010dili s tim problemom. Objasnit \u0107u. Kao \u0161to sam rekao, PostgreSQL povremeno pravi checkpoints kako bi prljave stranice u zajedni\u010dkoj memoriji prenio na disk. Ako imamo veliki kapacitet zajedni\u010dke memorije, checkpoint po\u010dinje intenzivno utjecati na disk, jer zapisuje te stranice putem fsync-a. Dolazi u kernel buffer i zapisuje se na diskove uz pomo\u0107 fsync-a. I ako je kapacitet ovog procesa velik, mo\u017eemo primijetiti neugodan u\u010dinak, to jest, vrlo visoku iskori\u0161tenost diskova.<\/p>\n<p><\/p>\n<p>Ovdje imam dvije slike. Sada \u0107u objasniti \u0161to je to. To su dva vremenski korelirana grafikona. Prvi grafikon prikazuje diskovnu iskori\u0161tenost. Ovdje dose\u017ee gotovo 90% u tom trenutku. Ako imate optere\u0107enje baze podataka s fizi\u010dkim diskovima, s RAID kontrolerom, i iskori\u0161tenost je pod 90%, to su lo\u0161e vijesti. To zna\u010di da \u0107e uskoro do\u0107i do 100% i ulaz-izlaz \u0107e se zaustaviti. <\/p>\n<p><\/p>\n<p>Ako imate diskovni niz, tada je pri\u010da malo druga\u010dija. Ovisi o tome kako je pode\u0161en, o kojoj se vrsti niza radi itd. <\/p>\n<p><\/p>\n<p>A ovdje je paralelno konfiguriran grafikon iz unutarnje postgresove prikaze koja pokazuje kako se odvija checkpoint. I zelenom bojom ovdje je prikazano koliko je buffera, ovih prljavih stranica, u tom trenutku stiglo u ovaj checkpoint za sinkronizaciju. To je najva\u017enije \u0161to ovdje trebate znati. Vidimo da imamo mnogo stranica koje su stigle i u nekom trenutku naletjeli smo na ograni\u010denje, tj. pisanje je trajalo dugo, ovdje je o\u010dito diskovni sustav vrlo zauzet. I na\u0161 checkpoint sna\u017eno utje\u010de na disk. U idealnom slu\u010daju situacija bi trebala izgledati ovako, tj. manje pisanja bi se odvijalo ovdje. A mi to mo\u017eemo ispraviti postavkama kako bismo tako nastavili. Tj. mala iskori\u0161tenost, ali negdje ipak ne\u0161to pi\u0161emo. <\/p>\n<p><\/p>\n<p>\u0160to trebate u\u010diniti kako biste pobijedili ovaj problem? Ako je IO pod bazom podataka stalo, to zna\u010di da \u0107e svi korisnici koji su do\u0161li izvr\u0161avati svoje upite \u010dekati. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/3efac5fe79443c32f56ec8da2f418116.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ako pogledamo iz perspektive Linuxa, ako ste nabavili dobar hardver, pravilno ga konfigurirali i ispravno podesili PostgreSQL kako bi rje\u0111e radio ove checkpointove, \u0161ire\u0107i ih me\u0111usobno po vremenu, onda \u0107ete se na\u0107i u zadanim parametrima Debiana. Za ve\u0107inu Linux distribucija ovakva je slika: vm.dirty_ratio=20, vm.dirty_background_ratio=10.<\/p>\n<p><\/p>\n<p>\u0160to to zna\u010di? S jezgre 2.6 pojavio se jedan demon za ispiranje. Pdglush ovisno o tome tko ga koristi, bavi se pozadinskim ispu\u0161tanjem prljavih stranica iz kernel buffera i ispu\u0161tanjem, kada god je to potrebno, prljavih stranica kada ve\u0107 pozadinsko ispu\u0161tanje ne poma\u017ee. <\/p>\n<p><\/p>\n<p>Kada dolazi do pozadine? Kada je 10 % od cijelog operativnog pam\u0107enja koje je dostupno na serveru zauzeto prljavim stranicama u kernel buffera, poziva se posebna funkcija za ispu\u0161tanje u pozadini. Za\u0161to je ona pozadinska? Kao parametar prihva\u0107a koliko stranica ispu\u0161tati. I, recimo, ispu\u0161ta N stranica. Na neko vrijeme ta stvar zaspi. A onda se ponovno pojavljuje i ispu\u0161ta jo\u0161 odre\u0111eni broj stranica. <\/p>\n<p><\/p>\n<p>Ovo je izuzetno jednostavna pri\u010da. Ovdje je zada\u0107a poput bazena, kada se u jednu cijev izlijeva, a u drugu ulijeva. Na\u0161 checkpoint je stigao i ako je poslao malo prljavih stranica na ispu\u0161tanje, postepeno \u0107e se iz kernel buffera pgflush sve to uredno razdvojiti. <\/p>\n<p><\/p>\n<p>Ako se ove prljave stranice nastave nakupljati, nakupljat \u0107e se do 20%, a nakon toga \u0107e operativni sustav prioritizirati preslikavanje na disk, jer \u0107e do\u0107i do gubitka napajanja, a sve \u0107e biti lo\u0161e. Izgubit \u0107emo te podatke, primjerice. <\/p>\n<p><\/p>\n<p>Koja je caka? <strong>Caka je u tome da su ovi parametri u modernom svijetu 20 i 10% od ukupne memorije koja postoji na ra\u010dunalu, jednostavno monstruozni s gledi\u0161ta propusnosti bilo kojeg diska koji imate.<\/strong> <\/p>\n<p><\/p>\n<p>Zamislite da imate 128 GB radne memorije. 12,8 GB dolazi u va\u0161 sustav za pohranu. I bez obzira na to kakav imate predmemorijski sustav ili polje, oni to ne\u0107e izdr\u017eati. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/1e4bab2fad7d3a05dc76cdd9d153f46c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Stoga preporu\u010dujemo odmah prilagoditi ove brojke prema mogu\u0107nostima va\u0161eg RAID kontrolera.<\/strong> Odmah imam preporuku za kontroler s 512 MB predmemorije. <\/p>\n<p><\/p>\n<p>Sve se vrlo jednostavno ra\u010duna. Mo\u017eete postaviti vm.dirty_background u bajtima. I ove postavke poni\u0161tavaju prethodne dvije. Bilo omjer prema zadanim postavkama ili aktivirani oni s bajtima, radit \u0107e oni s bajtima. Ali budu\u0107i da sam DBA konzultant i radim s razli\u010ditim klijentima, poku\u0161avam se osigurati, pa ako su u bajtima, neka budu u bajtima. Nitko nije dao nikakvo jamstvo da dobar administrator ne\u0107e dodati memoriju serveru, restartovati ga, a brojka \u0107e ostati ista. Samo izra\u010dunajte te brojke da sigurno sve stane unutra. <\/p>\n<p><\/p>\n<p>\u0160to \u0107e se dogoditi ako ne stane? Imam zapisano da se bilo kakvo ispu\u0161tanje u\u010dinkovito zaustavlja, ali zapravo je to samo fraza. Operativni sustav ima veliki problem \u2013 ima mnogo prljavih stranica, stoga u\u010dinkovito se zaustavlja ono ulaz\/izlaz koje generiraju va\u0161i klijenti, tj. aplikacija koja je poslala sql upit prema bazi, \u010deka. Bilo koji ulaz\/izlaz u nju ima najni\u017ei prioritet, jer je baza zauzeta checkpointom. I kada \u0107e ga zavr\u0161iti nije jasno. Kada ste postigli ne pozadinsko ispu\u0161tanje, to zna\u010di da je sav IO zauzet njime. I dok se to ne zavr\u0161i, ne\u0107ete mo\u0107i ni\u0161ta u\u010diniti. <\/p>\n<p><\/p>\n<p>Tamo su jo\u0161 dva va\u017ena trenutka koja nadma\u0161uju ovu prezentaciju. Ove postavke trebaju odgovarati postavkama u postgresql.conf, tj. postavkama checkpointa. A va\u0161 sustav za pohranu mora biti adekvatno konfiguriran. <strong>Ako imate cache na RAID-u, tada bi trebao imati bateriju.<\/strong> Ljudi kupuju RAID s dobrim cache-om bez baterije. <strong>Ako imate SSD u RAID-u, oni moraju biti serverni, trebali bi imati kondenzatore.<\/strong> Ovdje je op\u0161irna kontrolna lista. Na ovoj poveznici nalazi se moje izlaganje o tome kako pode\u0161avati performanse diska u PostgreSQL-u. Sve te kontrolne liste su tamo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/0ca13d550cb9eec4163f886467b2b3ea.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0160to jo\u0161 mo\u017ee ozbiljno zakomplicirati situaciju? To su dva parametra. Oni su relativno novi. Po defaultu mogu biti uklju\u010deni u razli\u010ditim aplikacijama. I mogu zakomplicirati \u017eivot jednako jako, ako su pogre\u0161no uklju\u010deni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/35aa98d67ff1f089a751a5fd808bd1b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Postoje dvije relativno nove stvari. Ve\u0107 su se pojavile u tre\u0107im jezgrama. To su sched_migration_cost u nanosekundama i sched_autogroup_enabled, koji je po defaultu samo jedan. <\/p>\n<p><\/p>\n<p>Kako to kvare \u017eivot? \u0160to je sched_migration_cost? Linux scheduler mo\u017ee migrirati proces s jednog CPU-a na drugi. I za PostgreSQL, koji izvr\u0161ava upite, migracija na drugi CPU potpuno je nejasna. <strong>S stanovi\u0161ta operativnog sustava, kada prebacujete prozore izme\u0111u OpenOffice-a i terminala, to mo\u017ee biti dobro, ali<\/strong> <strong>za bazu podataka \u2013 to je vrlo lo\u0161e.<\/strong> <\/p>\n<p><\/p>\n<p>Zato je razumna politika postaviti migration_cost na neku visoku vrijednost, barem nekoliko tisu\u0107a nanosekundi. <\/p>\n<p><\/p>\n<p>Druga stvar \u2013 to je autogroup. Postoji dobra ideja za specifi\u010dne radne optere\u0107enja, koja nisu vezana uz moderne baze podataka \u2013 to je grupiranje procesa prema virtualnom terminalu s kojeg su pokrenuti. To je prakti\u010dno za neke zadatke. <strong>U praksi, PostgreSQL je vi\u0161ekorisni\u010dka sistem s prefork arhitekturom, koji se pokre\u0107e iz jednog terminala. Imate lock writer, checkpoint, i svi va\u0161i klijentski zahtjevi bit \u0107e grupirani na jedan scheduler, na jedan CPU. I \u010dekat \u0107e zajedno da se oslobodi, ometaju\u0107i jedni druge i oduzimaju\u0107i mu vrijeme du\u017ee nego \u0161to bi trebali. To je situacija koja u slu\u010daju takvog optere\u0107enja nije potrebna i zato to treba isklju\u010diti.<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/55e829d1c1b69b7f6eaf5fc89dad30d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Moj kolega Aleksej Lesovski radio je testove s jednostavnim pgbench, gdje je pove\u0107avao migracijski tro\u0161ak i isklju\u010divao autogroup. <strong>Razlika na slabom hardveru bila je skoro 10%.<\/strong>Postoji rasprava na postgres mailing listi gdje ljudi dijele rezultate kako su sli\u010dne promjene utjecale na brzinu zahtjeva. <strong>utjecale na 50%.<\/strong>Takvih pri\u010da ima prili\u010dno mnogo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/b3d1983ec2a37f8b85129c93f2373644.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I na kraju, o politici \u0161tednje energije. Dobro je \u0161to sada Linux mo\u017eete koristiti na laptopu. I navodno \u0107e dobro tro\u0161iti bateriju. Ali iznenada se pokazuje da to mo\u017ee biti slu\u010daj i na serveru. <\/p>\n<p><\/p>\n<p>\u0160tovi\u0161e, ako iznajmljujete server od nekog hostera, \u201edobri\u201c <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/hr\/\"   title=\"hosting\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1200\">hosting<\/a> ne brinu o tome da va\u0161a performansa bude bolja. Njihov cilj je da iskoriste svoje hardverske resurse maksimalno efikasno. Stoga mogu u operativnom sistemu po defaultu uklju\u010diti laptop re\u017eim \u0161tednje energije.<\/p>\n<p><\/p>\n<p><strong>Ako koristite na serveru s bazom podataka pod intenzivnim optere\u0107enjem ovu stvar, va\u0161 izbor je acpi_cpufreq + performance. \u010cak \u0107e ve\u0107 s ondemandom biti problema.<\/strong> <\/p>\n<p><\/p>\n<p>Intel_pstate je ve\u0107 malo druga\u010diji drajver. Sada se preferira ovaj, kao novijeg i efikasnijeg.<\/p>\n<p><\/p>\n<p>I, sukladno tome, governor samo performance. Ondemand, powersave i sve drugo \u2013 to nije za vas. <\/p>\n<p><\/p>\n<p>Rezultati prema explain analyze PostgreSQL mogu se razlikovati za nekoliko redoslijeda ako uklju\u010dite powersave, jer \u0107e CPU pod va\u0161om bazom biti raspore\u0111en na potpuno nepredvidiv na\u010din.<\/p>\n<p><\/p>\n<p>Ove stvari mogu biti uklju\u010dene po defaultu. Pa\u017eljivo provjerite \u2013 nisu li uklju\u010dene po defaultu. To mo\u017ee biti zaista veliki problem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux pode\u0161avanje za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski\" src=\"\/wp-content\/uploads\/2020\/06\/ef32dafd9c8ea3403dc31c34ee2b5da8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I na kraju \u017eelim zahvaliti ekipi iz na\u0161e DBA tima PosgreSQL-Consulting, a posebno Maksu Boguku i Alekseju Lesovskom, koji svaki dan sti\u010du iskustvo u ovom poslu. Poku\u0161avamo u\u010diniti sve najbolje za na\u0161e klijente kako bi im sve ovo radilo. To je poput uputa za sigurnost u aviotransportu. Sve je napisano krvlju. Svaki od ovih vijaka otkriven je tijekom nekog problema. S rado\u0161\u0107u ih dijelim s vama.<\/p>\n<p><\/p>\n<p>Pitanja:<\/p>\n<p><\/p>\n<p><em>Hvala! Ako, na primjer, tvrtka \u017eeli u\u0161tedjeti i na jednom serveru smjestiti bazu podataka i aplikacijsku logiku ili, ako tvrtka slijedi modnu tendenciju mikroservisnih arhitektura, u kojima se PostgreSQL pokre\u0107e u kontejneru. U \u010demu je stvar? Sysctl globalno utje\u010de na cijelo jezgro. Nisam \u010duo da se sysctl na neki na\u010din virtualiziraju kako bi radili odvojeno u kontejneru. Postoji samo cgroup i kontrola postoji samo za dio. Kako s tim \u017eivjeti? Ili ako \u017eelite performanse, pokrenite PostgreSQL na odvojenom fizi\u010dkom serveru i optimizirajte ga?<\/em><\/p>\n<p><\/p>\n<p>Na va\u0161e pitanje smo odgovorili na otprilike tri na\u010dina. Ako se radi o fizi\u010dkom serveru koji se mo\u017ee optimizirati itd., opustite se, sve \u0107e dobro raditi bez tih postavki. Ako dobijete optere\u0107enje koje zahtijeva ove postavke, do fizi\u010dkog servera \u0107ete do\u0107i prije nego do ovih postavki.<\/p>\n<p><\/p>\n<p>Koji je problem? Ako je to virtualka, vjerojatno \u0107ete imati mnogo problema, na primjer, s tim da na ve\u0107ini virtualki postoji prili\u010dno neuskla\u0111eno ka\u0161njenje diska. \u010cak i ako je propusnost diskova dobra, jedna neuspje\u0161na transakcija operacije ulaza-izlaza, koja ne utje\u010de zna\u010dajno na prosje\u010dnu propusnost, koja se dogodila tijekom checkpointa ili zapisivanja u WAL, znatno \u0107e na\u0161tetiti bazi. I to \u0107ete primijetiti prije nego se suo\u010dite s tim problemima. <\/p>\n<p><\/p>\n<p>Ako imate NGINX na istom serveru, imat \u0107ete isti problem. Borit \u0107e se za zajedni\u010dku memoriju. I do problema opisanih ovdje ne\u0107ete do\u0107i.<\/p>\n<p><\/p>\n<p>No s druge strane, neki od ovih parametara \u0107e vam ipak biti relevantni. Na primjer, s sysctl postavite dirty_ratio kako ne bi bio prevelik \u2013 u svakom slu\u010daju, to \u0107e pomo\u0107i. Na ovaj ili onaj na\u010din, imat \u0107ete interakciju s diskom. I to \u0107e biti po pogre\u0161nom modelu. Ovo su u su\u0161tini defaultni parametri koje sam pokazao. I u svakom slu\u010daju, bolje ih je promijeniti. <\/p>\n<p><\/p>\n<p>Mogu\u0107i su problemi s NUMA. VmWare, primjerice, dobro radi s NUMA s potpuno suprotnim postavkama. I ovdje treba birati \u2013 fizi\u010dki server ili ne. <\/p>\n<p><\/p>\n<p><em>Imam pitanje vezano uz Amazon AWS. Imaju unaprijed konfigurirane slike. Jedna od njih zove se Amazon RDS. Ima li tamo nekih prilago\u0111enih postavki za njihov operativni sustav?<\/em><\/p>\n<p><\/p>\n<p>Ima postavki, ali to su druga\u010dije postavke. Ovdje konfiguriramo operativni sustav s obzirom na to kako \u0107e baza podataka to koristiti. A ondje postoje parametri koji odre\u0111uju kamo idemo, takvo oblikovanje. Dakle, trebamo toliko resursa, a sada \u0107emo ih tro\u0161iti. Nakon toga, Amazon RDS te resurse priklju\u010duje, i tu se performanse smanjuju. Ima pojedina\u010dnih pri\u010da o tome kako ljudi po\u010dinju s tim eksperimentirati. Ponekad \u010dak i prili\u010dno uspje\u0161no. No to nema veze s postavkama OS-a. To je kao hakiranje oblaka. To je druga pri\u010da.<\/p>\n<p><\/p>\n<p><em>Za\u0161to Transparent huge pages ne daju u\u010dinak u usporedbi s Huge TLB?<\/em><\/p>\n<p><\/p>\n<p>Ne daju. Ovo se mo\u017ee objasniti na mnogo na\u010dina. No, zapravo, oni jednostavno ne daju taj u\u010dinak. Kakva je pri\u010da s PostgreSQL? On pri pokretanju dodjeljuje veliki dio zajedni\u010dke memorije. Transparent, ili ne transparent \u2013 potpuno je neva\u017eno. \u010cinjenica da se dodjeljuju pri pokretanju obja\u0161njava sve. I ako je memorije jako puno i treba rekonstruirati shared_memory segment, tada \u0107e Transparent huge pages biti relevantni. U PostgreSQL-u je on jednostavno tijekom pokretanja dodijeljen ogromnoj komadu i to je to, a dalje se ne doga\u0111a ni\u0161ta posebno. Naravno, mo\u017ee se koristiti, ali postoji rizik od curruption shared_memory, kada \u0107e ne\u0161to ponovo dodijeliti. PostgreSQL o tome ne zna.<\/p>\n<p>Izvor: <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.5 - 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\/hr\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\/hr\/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\udd47Pode\u0161avanje Linuxa za pobolj\u0161anje performansi PostgreSQL-a. Ilja Kosmodemjanski | ProHoster","description":"Transkript izlaganja iz 2015. godine Ilje Kosmodemjanskog \"Pode\u0161avanje Linuxa za pobolj\u0161anje performansi PostgreSQL-a\" Odricanje: Napominjem da je ovo izlaganje datirano u studenom 2015. godine \u2013 pro\u0161lo je vi\u0161e od 4 godine i mnogo se promijenilo.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/84082","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=84082"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/84082\/revisions"}],"predecessor-version":[{"id":159869,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/84082\/revisions\/159869"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/84083"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=84082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=84082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=84082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}