Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Нусхаи гузориши соли 2015 аз ҷониби Илья Космодемянский "Танзими Linux барои беҳтар кардани иҷрои PostgreSQL"

Радди масъулият: Ман қайд мекунам, ки ин гузориш моҳи ноябри соли 2015 аст - зиёда аз 4 сол гузашт ва вақти зиёд гузашт. Версияи 9.4, ки дар гузориш баррасӣ шудааст, дигар дастгирӣ намешавад. Дар давоми 4 соли охир 5 версияи нави PostgreSQL ва 15 версияи ядрои Linux бароварда шуданд. Агар шумо ин порчаҳоро аз нав нависед, шумо бо гузориши дигар хоҳед ёфт. Аммо дар ин ҷо мо танзими фундаменталии Linux-ро барои PostgreSQL баррасӣ мекунем, ки имрӯз ҳам аҳамият дорад.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский


Номи ман Илья Космодемьянский аст. Ман дар PostgreSQL-Consulting кор мекунам. Ва ҳоло ман каме дар бораи чӣ кор кардан бо Linux дар робита бо пойгоҳи додаҳо дар маҷмӯъ ва аз ҷумла PostgreSQL сӯҳбат хоҳам кард, зеро принсипҳо хеле монанданд.

Мо дар бораи чӣ сӯҳбат хоҳем кард? Агар шумо бо PostgreSQL муошират кунед, пас то андозае шумо бояд администратори UNIX бошед. Ин чӣ маъно дорад? Агар мо Oracle ва PostgreSQL-ро муқоиса кунем, пас дар Oracle шумо бояд 80% администратори пойгоҳи додаҳои DBA ва 20% администратори Linux бошед.

Бо PostgreSQL он каме мураккабтар аст. Бо PostgreSQL ба шумо лозим аст, ки фаҳмиши беҳтари кори Linux дошта бошед. Ва дар айни замон, каме паси тепловоз давед, зеро вақтҳои охир ҳама чиз хеле хуб нав карда шудааст. Ва ядроҳои нав бароварда мешаванд ва функсияҳои нав пайдо мешаванд, кор беҳтар мешавад ва ғайра.

Чаро мо дар бораи Linux гап мезанем? На аз он сабаб, ки мо дар конфронси Linux Питер ҳастем, балки аз он сабаб, ки дар шароити муосир яке аз системаҳои оператсионии асоснок барои истифодаи базаи маълумот дар маҷмӯъ ва махсусан PostgreSQL Linux мебошад. Зеро FreeBSD, мутаассифона, дар як самти хеле аҷиб рушд мекунад. Ва ҳам бо иҷроиш ва ҳам дар бисёр чизҳои дигар мушкилот хоҳад буд. Иҷрои PostgreSQL дар Windows умуман як масъалаи ҷиддии алоҳида аст, бар он асос ёфтааст, ки Windows як хотираи муштараки UNIX надорад, дар ҳоле ки PostgreSQL ҳама ба ин вобаста аст, зеро он як системаи бисёрҷанба аст.

Ва ман фикр мекунам, ки ҳама ба экзотикҳо ба монанди Solaris камтар таваҷҷӯҳ доранд, пас биёед биравем.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Тақсимоти муосири Linux дорои беш аз 1 имконоти syctl мебошад, вобаста аз он ки шумо ядроро чӣ тавр сохтаед. Дар баробари ин, агар мо ба чормағзҳои гуногун назар кунем, мо метавонем чизеро аз бисёр ҷиҳат танзим кунем. Параметрҳои системаи файлӣ барои насб кардани онҳо мавҷуданд. Агар шумо дар бораи чӣ гуна оғоз кардани он савол дошта бошед: чиро дар BIOS фаъол кардан, чӣ гуна танзим кардани сахтафзор ва ғайра.

Ин як ҳаҷми хеле калон аст, ки онро дар тӯли чанд рӯз баррасӣ кардан мумкин аст, на дар як гузориши кӯтоҳ, аммо ҳоло ман ба чизҳои муҳим тамаркуз хоҳам кард, ки чӣ гуна аз он ракеҳо канорагирӣ кардан мумкин аст, ки кафолат дода мешавад, ки шумо аз истифодаи хуби махзани шумо дар Linux пешгирӣ кунед, агар шумо онҳоро ислоҳ накунед. Ва дар айни замон, як нуктаи муҳим ин аст, ки бисёре аз параметрҳои пешфарз ба танзимот, ки барои пойгоҳи додаҳо дурустанд, дохил карда нашудаанд. Яъне, ба таври нобаёнӣ он бад кор мекунад ё тамоман кор намекунад.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Дар Linux кадом ҳадафҳои танзими анъанавӣ мавҷуданд? Ман фикр мекунам, ки азбаски шумо ҳама бо маъмурияти Linux сарукор доред, зарурати мушаххаси шарҳ додани ҳадафҳо вуҷуд надорад.

Шумо метавонед танзим кунед:

  • ВПМ - ВОҲИДИ ПАРДОЗИШИ МАРКАЗӢ.
  • Хотира.
  • Захира.
  • Дигар. Мо дар ин бора дар охир барои хӯрокхӯрӣ сӯҳбат хоҳем кард. Ҳатто, масалан, параметрҳо, аз қабили сиёсати сарфаи энергия, метавонанд ба фаъолият ба таври хеле пешгӯинашаванда таъсир расонанд ва на аз ҳама гуворо.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Хусусиятҳои PostgreSQL ва умуман пойгоҳи додаҳо кадомҳоянд? Мушкилот дар он аст, ки шумо наметавонед ягон чормағзи инфиродиро тағир диҳед ва бубинед, ки кори мо ба таври назаррас беҳтар шудааст.

Бале, чунин гаҷетҳо вуҷуд доранд, аммо пойгоҳи додаҳо як чизи мураккаб аст. Он бо тамоми захираҳое, ки сервер дорад, ҳамкорӣ мекунад ва то ҳадди имкон муошират карданро афзалтар медонад. Агар шумо ба тавсияҳои ҳозираи Oracle оид ба истифодаи системаи ҳост назар кунед, он ба шӯхӣ дар бораи он кайҳоннаварди муғул монанд хоҳад буд - сагро ғизо диҳед ва ба ҳеҷ чиз даст нарасонед. Ба база хамаи захирахоро дихем, худи база хама чизро ба тартиб медарорад.

Аслан, то андозае вазъият бо PostgreSQL комилан якхела аст. Фарқият дар он аст, ки пойгоҳи додаҳо ҳоло тамоми захираҳоро барои худ гирифта наметавонад, яъне дар ҷое дар сатҳи Linux шумо бояд ҳамаашро худатон ҷудо кунед.

Идеяи асосӣ на интихоби як ҳадаф ва оғоз кардани танзими он, масалан, хотира, CPU ё чизи ба ин монанд, балки таҳлили сарбории кор ва кӯшиш кардан барои беҳтар кардани интиқол ба қадри имкон, то сарборие, ки барномасозони хуб онро эҷод карданд. барои мо, аз ҷумла истифодабарандагони мо.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Дар ин ҷо як расм барои фаҳмонидани он чӣ аст. Буфери Linux OS мавҷуд аст ва хотираи муштарак мавҷуд аст ва буферҳои муштараки PostgreSQL мавҷуданд. PostgreSQL, бар хилофи Oracle, мустақиман танҳо тавассути буфери ядро ​​​​кор мекунад, яъне, барои он ки саҳифа аз диск ба хотираи муштараки худ ворид шавад, он бояд аз буфери ядро ​​​​гузарад ва ҳамон ҳолатро бозпас гузаронад.

Дискҳо дар зери ин система зиндагӣ мекунанд. Ман инро ҳамчун дискҳо кашидам. Дар асл, метавонад як контролери RAID ва ғайра бошад.

Ва ин вуруду баромад ин ё он роҳ тавассути ин масъала сурат мегирад.

PostgreSQL пойгоҳи додаҳои классикӣ аст. Дар дохили он саҳифа вуҷуд дорад. Ва ҳама вуруд ва баромад бо истифода аз саҳифаҳо ба амал меоянд. Мо блокҳоро ба хотира бо саҳифаҳо мебардорем. Ва агар ҳеҷ чиз рӯй надиҳад, мо онҳоро танҳо мехонем, пас тадриҷан онҳо аз ин кэш, аз буферҳои муштарак нобуд мешаванд ва дар диск бармегарданд.

Агар мо ягон чизро иваз кунем, он гоҳ тамоми саҳифа ҳамчун ифлос қайд карда мешавад. Ман онҳоро дар ин ҷо бо ранги кабуд қайд кардам. Ва ин маънои онро дорад, ки ин саҳифа бояд бо нигаҳдории блок ҳамоҳанг карда шавад. Яъне, вақте ки мо онро ифлос кардем, мо дар WAL ворид кардем. Ва дар як лаҳзаи аҷибе, ки гузаргоҳ ном дошт, пайдо шуд. Ва дар ин журнал маълумоте сабт шуда буд, ки ӯ омадааст. Ва ин маънои онро дорад, ки ҳамаи саҳифаҳои ифлос, ки дар он лаҳза дар ин буферҳои муштарак буданд, бо диски нигаҳдорӣ бо истифода аз fsync тавассути буфери ядро ​​​​синхронизатсия карда шуданд.

Чаро ин кор карда мешавад? Агар мо шиддатро аз даст диҳем, пас мо вазъиятеро ба даст наовардем, ки ҳама маълумот гум шудааст. Хотираи доимӣ, ки ҳама дар бораи он ба мо нақл карданд, то имрӯз дар назарияи базаи маълумот мавҷуд аст - ин ояндаи дурахшон аст, ки мо, албатта, барои он кӯшиш мекунем ва ба мо маъқул аст, аммо ҳоло онҳо дар минус 20 сол зиндагӣ мекунанд. Ва, албатта, хамаи инро назорат кардан лозим аст.

Ва вазифаи ба ҳадди аксар расонидани иқтидор аз он иборат аст, ки дар ҳамаи ин марҳилаҳо дақиқ танзим карда шавад, то ҳамааш зуд ба пеш ва пеш ҳаракат кунанд. Хотираи муштарак асосан кэши саҳифа мебошад. Дар PostgreSQL мо як дархости интихобшуда ё чизе фиристодем, он ин маълумотро аз диск гирифт. Онҳо дар буферҳои муштарак анҷом ёфтанд. Мувофиқи он, барои беҳтар кор кардани ин, хотираи зиёд бояд бошад.

Барои он ки ҳамаи ин хуб ва зуд кор кунад, шумо бояд системаи оператсиониро дар ҳама марҳилаҳо дуруст танзим кунед. Ва сахтафзори мутавозинро интихоб кунед, зеро агар шумо дар ягон ҷой номутавозунӣ дошта бошед, шумо метавонед хотираи зиёдеро ба даст оред, аммо он бо суръати кофӣ хидмат намекунад.

Ва биёед ҳар яке аз ин нуктаҳоро аз назар гузаронем.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Барои зудтар ҳаракат кардани ин саҳифаҳо, шумо бояд ба чизҳои зерин ноил шавед:

  • Аввалан, шумо бояд бо хотира самараноктар кор кунед.
  • Дуюм, ин гузариш вақте ки саҳифаҳо аз хотира ба диск мегузаранд, бояд самараноктар бошад.
  • Ва сеюм, бояд дискҳои хуб дошта бошанд.

Агар шумо дар сервер 512 ГБ хотираи оперативӣ дошта бошед ва ҳамаи он дар диски сахти SATA бе ягон кэш ба охир мерасад, он гоҳ тамоми сервери пойгоҳи додаҳо на танҳо ба каду, балки ба каду бо интерфейси SATA табдил меёбад. Шумо бевосита ба он дучор хоҳед шуд. Ва ҳеҷ чиз шуморо наҷот дода наметавонад.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Дар робита ба нуқтаи аввал бо хотира, се чиз вуҷуд дорад, ки метавонанд ҳаётро хеле душвор созанд.

Аввалин онҳо NUMA мебошад. NUMA чизест, ки барои беҳтар кардани фаъолият сохта шудааст. Вобаста аз сарбории кор, чизҳои гуногунро метавон оптимизатсия кард. Ва дар шакли нави ҷорӣ, он барои барномаҳо ба монанди пойгоҳи додаҳо, ки буферҳои муштараки кэши саҳифаро ба таври пуршиддат истифода мебаранд, чандон хуб нест.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Дар мухтасар. Чӣ тавр шумо метавонед бифаҳмед, ки дар NUMA чизе нодуруст аст? Шумо як зарбаи ногувор доред, ногаҳон баъзе CPU пурбор мешавад. Ҳамзамон, шумо дархостҳоро дар PostgreSQL таҳлил мекунед ва мебинед, ки дар он ҷо ягон чизи монанд нест. Ин дархостҳо набояд аз CPU пуршиддат бошанд. Шумо метавонед инро муддати тӯлонӣ ба даст оред. Истифодаи тавсияи дуруст аз аввал дар бораи чӣ гуна танзим кардани NUMA барои PostgreSQL осонтар аст.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Дар ҳақиқат чӣ мешавад? NUMA маънои дастрасии ягонаи хотираро дорад. Гап дар чист? Шумо CPU доред, дар паҳлӯи он хотираи маҳаллии он мавҷуд аст. Ва ин пайвастҳои хотира метавонанд хотираи CPU-ҳои дигарро гиранд.

Агар шумо давед numactl --hardware, он гоҳ шумо чунин варақи калон мегиред. Дар байни чизҳои дигар, майдони масофа вуҷуд хоҳад дошт. Рақамҳо хоҳанд буд - 10-20, чизе монанди ин. Ин рақамҳо чизе беш аз шумораи hops барои гирифтани ин хотираи дурдаст ва истифода аз он дар маҳаллӣ нест. Дар асл, як фикри хуб. Ин корро дар доираи як қатор сарбориҳои корӣ суръат мебахшад.

Акнун тасаввур кунед, ки шумо як CPU доред, аввал кӯшиш кунед, ки хотираи маҳаллии худро истифода баред ва сипас кӯшиш кунед, ки хотираи дигарро тавассути пайвастшавӣ барои чизе бигиред. Ва ин CPU тамоми кэши саҳифаи PostgreSQL-и шуморо мегирад - ин як чанд гигабайт аст. Шумо ҳамеша ҳолати бадтаринро мегиред, зеро дар CPU одатан дар худи ин модул хотираи кам мавҷуд аст. Ва тамоми хотирае, ки ба хидмат расонида мешавад, тавассути ин пайвасткунакҳо мегузарад. Он суст ва ғамгин мешавад. Ва протсессори шумо, ки ба ин гиреҳ хидмат мекунад, доимо пурбор аст. Ва вақти дастрасии ин хотира бад, суст аст. Ин ҳолатест, ки шумо намехоҳед, агар шумо инро барои пойгоҳи додаҳо истифода баред.

Аз ин рӯ, як варианти дурусттар барои пойгоҳи додаҳо он аст, ки системаи амалиётии Linux намедонад, ки дар он ҷо чӣ рӯй дода истодааст. То он даме, ки он ба хотира дастрасӣ пайдо мекунад.

Барои чӣ ин? Чунин ба назар мерасад, ки ин бояд баръакс бошад. Ин бо як сабаби оддӣ рӯй медиҳад: мо барои кэши саҳифа хотираи зиёд лозим аст - даҳҳо, садҳо гигабайт.

Ва агар мо ҳамаи инро ҷудо карда, маълумоти худро дар он ҷо кэш кунем, пас фоида аз истифодаи кэш аз фоида аз чунин дастрасии душвор ба хотира ба таври назаррас зиёдтар хоҳад буд. Ва аз ин рӯ, мо дар муқоиса бо он, ки мо бо истифода аз NUMA ба хотира самараноктар дастрасӣ хоҳем кард, ба таври қобили муқоиса манфиат хоҳем гирифт.

Аз ин рӯ, дар айни замон дар ин ҷо ду равиш вуҷуд дорад, то он даме, ки ояндаи дурахшон фаро расад ва худи пойгоҳи дода наметавонад бифаҳмад, ки он дар кадом CPU кор мекунад ва аз куҷо чизеро кашидан лозим аст.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Аз ин рӯ, муносибати дуруст ин комилан ғайрифаъол кардани NUMA мебошад, масалан, ҳангоми бозоғозӣ. Дар аксари мавридҳо, бурдҳо ба дараҷае баробаранд, ки саволи кадоме беҳтар аст, тамоман ба миён намеояд.

Варианти дигар вуҷуд дорад. Мо онро нисбат ба аввалинаш бештар истифода мебарем, зеро вақте ки муштарӣ барои дастгирӣ ба мо меояд, бозоғозкунии сервер барои ӯ кори бузург аст. Дар он ҷо тиҷорат дорад. Ва онҳо аз сабаби NUMA мушкилот доранд. Аз ин рӯ, мо кӯшиш мекунем, ки онро бо роҳҳои камтар инвазивӣ нисбат ба бозсозӣ хомӯш кунем, аммо бодиққат тафтиш кунед, ки он ғайрифаъол аст. Зеро, тавре ки таҷриба нишон медиҳад, хуб аст, ки мо NUMA-ро дар раванди волидайни PostgreSQL ғайрифаъол кунем, аммо кор кардани он тамоман зарур нест. Мо бояд тафтиш кунем ва бубинем, ки вай воқеан хомӯш шудааст.

Як паёми хуби Роберт Хаас мавҷуд аст. Ин яке аз комиссарони PostgreSQL мебошад. Яке аз таҳиягарони калидии ҳама гиблетҳои сатҳи паст. Ва агар шумо истинодҳои ин постро пайгирӣ кунед, онҳо якчанд ҳикояҳои рангорангро дар бораи он, ки чӣ тавр NUMA зиндагии мардумро мушкил кардааст, тасвир мекунанд. Инак, рӯйхати администратори системаро омӯзед, ки чӣ бояд дар сервер танзим карда шавад, то базаи мо хуб кор кунад. Ин танзимотҳо бояд навишта шаванд ва тафтиш карда шаванд, зеро дар акси ҳол он хеле хуб нахоҳад буд.

Лутфан қайд кунед, ки ин ба ҳама танзимот дахл дорад, ки ман дар бораи он сӯҳбат мекунам. Аммо одатан пойгоҳи додаҳо дар режими усто-ғулом барои таҳаммулпазирии хато ҷамъ карда мешаванд. Фаромӯш накунед, ки ин танзимотро дар банда насб кунед, зеро рӯзе ба садама дучор мешавед ва шумо ба ғулом мегузаред ва он усто мешавад.

Дар ҳолати фавқулодда, вақте ки ҳама чиз хеле бад аст, телефони шумо доимо занг мезанад ва сардоратон бо чӯбчаи калон давида меояд, шумо вақт намеёбед, ки дар бораи тафтиш фикр кунед. Ва натиҷаҳо метавонанд хеле фалокатбор бошанд.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Нуктаи навбатӣ саҳифаҳои бузург аст. Саҳифаҳои азимро алоҳида санҷидан душвор аст ва ин кор ҳеҷ маъно надорад, гарчанде ки меъёрҳое мавҷуданд, ки ин корро карда метавонанд. Онҳо ба Google осонанд.

Гап дар чист? Шумо сервери на он қадар гаронбаҳо доред, ки RAM-и зиёд дорад, масалан, зиёда аз 30 ГБ. Шумо саҳифаҳои бузургро истифода намебаред. Ин маънои онро дорад, ки шумо бешубҳа аз нуқтаи назари истифодаи хотира сарборӣ доред. Ва ин сармо аз гуворотарин дур аст.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Барои чӣ ин? Пас, чӣ мешавад? Системаи оператсионӣ хотираро ба қисмҳои хурд тақсим мекунад. Ин хеле қулай аст, он дар таърих чӣ гуна рух додааст. Ва агар мо ба тафсилот равем, OS бояд суроғаҳои виртуалиро ба суроғаҳои физикӣ тарҷума кунад. Ва ин раванд соддатарин нест, бинобар ин OS натиҷаи ин амалиётро дар буфери Translation Lookaside (TLB) кэш мекунад.

Ва азбаски TLB кэш аст, дар ин вазъият ҳама мушкилоте, ки ба кэш хосанд, ба миён меоянд. Аввалан, агар шумо миқдори зиёди RAM дошта бошед ва он ҳама дар қисмҳои хурд тақсим карда шуда бошад, пас ин буфер хеле калон мешавад. Ва агар кэш калон бошад, пас ҷустуҷӯ тавассути он сусттар аст. Сари боло солим аст ва худаш ҷойро ишғол мекунад, яъне RAM аз ҷониби ягон чизи нодуруст истеъмол карда мешавад. Дар ҳамин вақт.

Ду - чӣ қадаре ки кэш дар чунин вазъият афзоиш ёбад, ҳамон қадар эҳтимолияти гум шудани кэш вуҷуд дорад. Ва самаранокии ин кэш бо афзоиши андозаи он зуд коҳиш меёбад. Аз ин рӯ, системаҳои оператсионӣ як равиши оддӣ пайдо карданд. Он дар Linux муддати тӯлонӣ истифода мешавад. Он чанде пеш дар FreeBSD пайдо шуд. Аммо мо дар бораи Linux гап мезанем. Инҳо саҳифаҳои бузурганд.

Ва дар ин ҷо бояд қайд кард, ки саҳифаҳои азим ҳамчун идея дар аввал аз ҷониби ҷомеаҳое, ки Oracle ва IBM-ро дар бар мегирифтанд, тела дода мешуданд, яъне истеҳсолкунандагони пойгоҳи додаҳо сахт фикр мекарданд, ки ин барои пойгоҳи додаҳо муфид хоҳад буд.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Ва чӣ гуна онро бо PostgreSQL дӯстӣ кардан мумкин аст? Аввалан, саҳифаҳои бузург бояд дар ядрои Linux фаъол карда шаванд.

Дуюм, онҳо бояд бо параметри sysctl ба таври возеҳ муайян карда шаванд - чанд нафар ҳастанд. Рақамҳо дар ин ҷо аз баъзе серверҳои кӯҳна мебошанд. Шумо метавонед ҳисоб кунед, ки шумо чанд буфери муштарак доред, то саҳифаҳои азим дар он ҷо ҷойгир шаванд.

Ва агар тамоми сервери шумо ба PostgreSQL бахшида шуда бошад, пас нуқтаи хуби ибтидоӣ ҷудо кардани 25% RAM барои буферҳои муштарак ё 75% аст, агар шумо боварӣ дошта бошед, ки пойгоҳи додаи шумо бешубҳа ба ин 75% мувофиқат мекунад. Нуқтаи ибтидоӣ як. Ва фикр кунед, ки агар шумо 256 ГБ хотираи оперативӣ дошта бошед, мутаносибан шумо 64 ГБ буферҳои калон хоҳед дошт. Тақрибан бо каме маржа ҳисоб кунед - ин рақам бояд ба чӣ муқаррар карда шавад.

Пеш аз версияи 9.2 (агар хато накунам, аз версияи 8.2), метавон PostgreSQL-ро бо саҳифаҳои азим бо истифода аз китобхонаи тарафи сеюм пайваст кард. Ва ин бояд ҳамеша анҷом дода шавад. Аввалан, ба шумо ядро ​​лозим аст, то саҳифаҳои азимро дуруст тақсим карда тавонед. Ва, дуюм, то барномае, ки бо онҳо кор мекунад, онҳоро истифода барад. Он на танҳо ин тавр истифода мешавад. Азбаски PostgreSQL хотираро дар услуби система 5 ҷудо кардааст, онро метавон бо истифода аз libhugetlbfs анҷом дод - ин номи пурраи китобхона аст.

Дар 9.3, иҷрои PostgreSQL ҳангоми кор бо хотира беҳтар карда шуд ва усули тақсимоти хотираи система 5 даст кашида шуд. Ҳама хеле хурсанд буданд, зеро дар акси ҳол шумо кӯшиш мекунед, ки ду мисоли PostgreSQL-ро дар як мошин иҷро кунед ва ӯ мегӯяд, ки ман хотираи муштарак надорам. Ва ӯ мегӯяд, ки sysctl бояд ислоҳ карда шавад. Ва чунин sysctl вуҷуд дорад, ки шумо ба ҳар ҳол лозим аст, ки аз нав ба кор дароред ва ғайра. Умуман, ҳама хурсанд буданд. Аммо тақсимоти хотираи mmap истифодаи саҳифаҳои азимро вайрон кард. Аксарияти мизоҷони мо буферҳои калони муштаракро истифода мебаранд. Ва мо ба таври қатъӣ тавсия медиҳем, ки ба 9.3 нагузарем, зеро дар он ҷо хароҷоти изофӣ бо фоизи хуб ҳисоб карда шуд.

Аммо ахли чамъият ба ин проблема эътибор дода, дар 9.4 ин ходисаро хеле хуб кор карда баромад. Ва дар 9.4 дар postgresql.conf параметр пайдо шуд, ки дар он шумо метавонед кӯшиш кунед, фаъол ё хомӯш кунед.

Кӯшиш кунед, ки беҳтарин вариант аст. Вақте ки PostgreSQL оғоз мешавад, вақте ки он хотираи муштаракро ҷудо мекунад, он мекӯшад, ки ин хотираро аз саҳифаҳои бузург гирад. Ва агар он кор накунад, он ба интихоби муқаррарӣ бармегардад. Ва агар шумо FreeBSD ё Solaris дошта бошед, пас шумо метавонед кӯшиш кунед, ки он ҳамеша бехатар аст.

Агар фаъол бошад, пас он танҳо оғоз намешавад, агар он аз саҳифаҳои азим интихоб карда натавонад. Дар ин ҷо аллакай дар бораи кӣ ва чӣ зеботар аст. Аммо агар шумо кӯшиш карда бошед, пас санҷед, ки шумо воқеан он чизеро, ки ба шумо лозим аст, таъкид кардаед, зеро барои иштибоҳ ҷои зиёде вуҷуд дорад. Дар айни замон ин функсия танҳо дар Linux кор мекунад.

Як ёддошти хурди дигар пеш аз он ки мо ба пеш равем. Саҳифаҳои бузурги шаффоф ҳанӯз дар бораи PostgreSQL нестанд. Вай онхоро муътадил истифода бурда наметавонад. Ва бо саҳифаҳои азими Transparent барои чунин сарбории корӣ, вақте ки як порчаи бузурги хотираи муштарак лозим аст, фоидаҳо танҳо бо ҳаҷми хеле калон меоянд. Агар шумо терабайтҳои хотира дошта бошед, ин метавонад ба кор ояд. Агар мо дар бораи замимаҳои ҳаррӯзаи бештар сухан ронем, вақте ки шумо дар мошини худ 32, 64, 128, 256 ГБ хотира доред, пас саҳифаҳои маъмулии бузург хуб аст ва мо танҳо Шаффофро ғайрифаъол мекунем.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Ва охирин чизе, ки дар бораи хотира аст, бевосита ба fruitut вобаста нест, он дар ҳақиқат метавонад ҳаёти шумо хароб. Ҳама интиқол аз он, ки сервер доимо иваз карда мешавад, таъсир мерасонад.

Ва ин аз як қатор роҳҳо хеле ногувор хоҳад буд. Ва мушкили асосӣ дар он аст, ки ядроҳои муосир аз ядроҳои кӯҳнаи Linux каме фарқ мекунанд. Ва ин чиз ба пеш гузоштан хеле ногувор аст, зеро вақте ки мо дар бораи ягон намуди кор бо своп гап мезанем, он бо сари вақт омадани ООМ-куш хотима меёбад. Ва OOM-қотил, ки сари вақт нарасид ва PostgreSQL-ро партофтааст, ногувор аст. Ҳама дар ин бора, яъне то корбари охирин огоҳ хоҳанд шуд.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Чӣ мегузарад? Шумо дар он ҷо миқдори зиёди RAM доред, ҳама чиз хуб кор мекунад. Аммо бо баъзе сабабҳо сервер дар своп овезон мешавад ва аз ин сабаб суст мешавад. Чунин ба назар мерасад, ки хотираи зиёд вуҷуд дорад, аммо ин рӯй медиҳад.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Пештар, мо тавсия дода будем, ки vm.swappiness-ро ба сифр муқаррар кунем, яъне свопро ғайрифаъол созем. Пештар ба назар чунин менамуд, ки 32 ГБ хотираи оперативӣ ва буферҳои муштараки мувофиқ маблағи бузург аст. Мақсади асосии своп он аст, ки дар сурати афтидан ҷои партофтани қадре. Ва он дигар махсусан иҷро нашуд. Ва он гоҳ шумо бо ин қишр чӣ кор кардан мехоҳед? Ин вазифаест, ки дар он чандон равшан нест, ки чаро своп лозим аст, махсусан чунин андоза.

Аммо дар муосиртар, яъне версияҳои сеюми ядро, рафтор тағйир ёфт. Ва агар шумо свопро ба сифр муқаррар кунед, яъне онро хомӯш кунед, пас дер ё зуд, ҳатто агар каме RAM боқӣ монда бошад, қотили OOM ба назди шумо меояд, то истеъмолкунандагони пуршиддатро кушед. Зеро вай ба назар хоҳад гирифт, ки бо чунин сарбории кор мо ҳанӯз каме боқӣ мондаем ва мо берун мебароем, яъне на ба нохун задани раванди система, балки чизи камтар муҳимро мехкӯб мекунем. Ин чизи камтар муҳим истеъмолкунандаи пуршиддати хотираи муштарак хоҳад буд, яъне мудири почта. Ва баъд аз ин хуб мешавад, агар пойгоҳ барқарор карда нашавад.

Аз ин рӯ, ҳоло пешфарз, то ҷое ки ман дар ёд дорам, аксари тақсимотҳо тақрибан 6 мебошанд, яъне дар кадом лаҳза шумо бояд истифодаи свопро вобаста ба он ки чӣ қадар хотира боқӣ мондааст, оғоз кунед. Мо ҳоло тавсия медиҳем, ки vm.swappiness = 1 гузорем, зеро ин амалан онро хомӯш мекунад, аммо ҳамон эффектҳоеро ба мисли қотили OOM, ки ба таври ғайричашмдошт омада, ҳама чизро кушт, намедиҳад.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Баъд чӣ? Вақте ки мо дар бораи иҷрои пойгоҳи додаҳо гап мезанем ва оҳиста-оҳиста ба дискҳо мегузарем, ҳама сари худро ба даст меоранд. Зеро хакикати суст будани диск ва тез будани хотира ба хар кас аз хурдй шинос аст. Ва ҳама медонанд, ки пойгоҳи додаҳо мушкилоти иҷрои дискро доранд.

Мушкилоти асосии иҷрои PostgreSQL, ки бо пошидани нуқтаҳои назорат алоқаманд аст, рух намедиҳад, зеро диск суст аст. Ин эҳтимол аз он вобаста аст, ки хотира ва фарохмаҷрои диск мутавозин нестанд. Бо вуҷуди ин, онҳо метавонанд дар ҷойҳои гуногун мутавозин бошанд. PostgreSQL танзим нашудааст, OS танзим нашудааст, сахтафзор танзим нашудааст ва сахтафзор нодуруст аст. Ва ин мушкилот на танҳо дар сурате рӯй медиҳад, ки ҳама чиз тавре ки лозим аст, рӯй диҳад, яъне ё сарборӣ нест, ё танзимот ва сахтафзор хуб интихоб карда шудаанд.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Он чӣ гуна аст ва он чӣ гуна аст? Одатан одамоне, ки бо PostgreSQL кор мекунанд, зиёда аз як маротиба ба ин масъала ворид шудаанд. Ман шарҳ медиҳам. Тавре ки ман гуфтам, PostgreSQL давра ба давра нуқтаҳои гузаргоҳро барои партофтани саҳифаҳои ифлос дар хотираи муштарак ба диск месозад. Агар мо миқдори зиёди хотираи муштарак дошта бошем, пас нуқтаи назорат ба диск таъсири пуршиддат мерасонад, зеро он ин саҳифаҳоро бо fsync партояд. Он ба буфери ядро ​​меояд ва бо истифода аз fsync ба дискҳо навишта мешавад. Ва агар ҳаҷми ин тиҷорат калон бошад, пас мо метавонем таъсири ногуворро мушоҳида кунем, яъне истифодаи хеле зиёди дискҳо.

Дар ин ҷо ман ду тасвир дорам. Ҳоло ман мефаҳмонам, ки он чӣ аст. Ин ду графики бо вақт алоқаманданд. Графикаи якум истифодаи диск мебошад. Дар ин ҷо он дар айни замон қариб ба 90% мерасад. Агар шумо нокомии пойгоҳи додаҳо бо дискҳои физикӣ дошта бошед, бо истифодаи контроллери RAID 90%, пас ин хабари бад аст. Ин маънои онро дорад, ки каме бештар ва он ба 100 мерасад ва I/O қатъ мешавад.

Агар шумо массиви диск дошта бошед, ин як ҳикояи каме дигар аст. Ин аз он вобаста аст, ки он чӣ гуна конфигуратсия шудааст, он чӣ гуна массив аст ва ғайра.

Ва дар баробари ин, дар ин ҷо як график аз намуди дохилии postgres танзим карда шудааст, ки чӣ гуна пайдо шудани нуқтаи гузарро нишон медиҳад. Ва ранги сабз дар ин ҷо нишон медиҳад, ки чӣ қадар буферҳо, ин саҳифаҳои ифлос дар ҳамон лаҳза ба ин гузаргоҳ барои ҳамоҳангсозӣ расиданд. Ва ин чизи асосӣест, ки шумо бояд дар ин ҷо донед. Мо мебинем, ки мо дар ин ҷо саҳифаҳои зиёд дорем ва дар як вақт мо ба тахта мезанем, яъне мо навиштем ва навиштем, дар ин ҷо системаи диск хеле банд аст. Ва пункти назорати мо ба диск таъсири хеле сахт дорад. Идеалӣ, вазъият бояд бештар ба ин монанд бошад, яъне мо дар ин ҷо камтар сабт кардем. Ва мо метавонем онро бо танзимот ислоҳ кунем, то ин тавр идома ёбад. Яъне, коркарди такрорӣ хурд аст, аммо дар ҷое мо дар ин ҷо чизе менависем.

Барои бартараф кардани ин мушкилот чӣ кор кардан лозим аст? Агар шумо IO-ро дар пойгоҳи додаҳо қатъ карда бошед, ин маънои онро дорад, ки ҳамаи корбароне, ки барои иҷрои дархостҳои худ омадаанд, интизор мешаванд.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Агар шумо аз нуқтаи назари Linux назар кунед, агар шумо сахтафзори хуб гирифта бошед, онро дуруст танзим карда бошед, PostgreSQL-ро ба таври муқаррарӣ конфигуратсия кунед, то ин нуқтаҳои назоратро камтар кунад ва бо мурури замон байни ҳамдигар паҳн кунад, пас шумо ба параметрҳои пешфарзи Debian қадам мегузоред. Барои аксари тақсимоти Linux ин расм аст: vm.dirty_ratio=20, vm.dirty_background_ratio=10.

Ин чӣ маъно дорад? Як деви шуста аз ядрои 2.6 пайдо шуд. Pdglush, вобаста аз он, ки кӣ кадомашро истифода мебарад, ки бо партофтани заминаҳои саҳифаҳои ифлос аз буфери ядро ​​​​ва партофт, вақте ки лозим аст, партови саҳифаҳои ифлос новобаста аз он, вақте ки партови заминавӣ кӯмак намекунад.

Замина кай меояд? Вақте ки 10% аз ҳаҷми умумии RAM мавҷуд дар сервер саҳифаҳои ифлоси буфери ядроро ишғол мекунанд, дар замина функсияи махсуси хаттӣ даъват карда мешавад. Чаро он замина аст? Ҳамчун параметр, он ба инобат мегирад, ки чанд саҳифаро аз ҳисоб хориҷ кардан лозим аст. Ва, биёед бигӯем, ки ӯ N саҳифа менависад. Ва муддате ин чиз хоб меравад. Ва он гоҳ вай боз меояд ва чанд саҳифаи дигарро нусхабардорӣ мекунад.

Ин як ҳикояи хеле оддӣ аст. Мушкилот дар ин ҷо мисли ҳавзи шиноварӣ аст, вақте ки он ба як қубур мерезад, ба дигараш ҷорӣ мешавад. Нуқтаи гузаргоҳи мо расид ва агар он чанд саҳифаи ифлосро барои партофтан фиристода бошад, пас тадриҷан ҳама чиз аз буфери ядрои pgflush ба таври дақиқ ҳал карда мешавад.

Агар ин саҳифаҳои ифлос идома диҳанд, онҳо то 20% ҷамъ мешаванд, пас аз он афзалияти ОС ин аст, ки ҳама чиз ба диск сабт карда шавад, зеро қувваи барқ ​​қатъ мешавад ва ҳама чиз барои мо бад мешавад. Мо ин маълумотро аз даст медиҳем, масалан.

Чӣ ҳиллаест? Ҳилла дар он аст, ки ин параметрҳо дар ҷаҳони муосир 20 ва 10% аз ҳаҷми умумии RAM, ки дар мошин ҷойгиранд, мебошанд, онҳо аз нуқтаи назари интиқоли ҳама гуна системаи диске, ки шумо доред, комилан даҳшатоваранд.

Тасаввур кунед, ки шумо 128 ГБ хотираи оперативӣ доред. 12,8 ГБ ба системаи диски шумо меояд. Ва новобаста аз он ки шумо дар кадом кэш дар он ҷо доред, новобаста аз он ки кадом массив дар он ҷо доред, онҳо он қадар тӯл намекашанд.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Аз ин рӯ, мо тавсия медиҳем, ки шумо фавран ин рақамҳоро дар асоси имкониятҳои контролери RAID-и худ танзим кунед. Ман дарҳол дар ин ҷо барои контроллере тавсия додам, ки 512 МБ кэш дорад.

Ҳама чиз хеле оддӣ ҳисобида мешавад. Шумо метавонед vm.dirty_background-ро дар байт гузоред. Ва ин танзимот дуи қаблиро бекор мекунанд. Ё таносуб ба таври нобаёнӣ аст, ё онҳое, ки байт доранд, фаъол мешаванд, пас онҳое, ки байт доранд, кор мекунанд. Аммо азбаски ман як мушовири DBA ҳастам ва бо муштариёни гуногун кор мекунам, ман кӯшиш мекунам, ки кохҳоро кашам ва аз ин рӯ, агар дар байт бошад, пас дар байт. Ҳеҷ кас кафолат намедиҳад, ки администратори хуб ба сервер хотираи бештар зам намекунад, онро аз нав оғоз мекунад ва рақам бетағйир мемонад. Танҳо ин рақамҳоро ҳисоб кунед, то ҳама чиз бо кафолат мувофиқат кунад.

Чӣ мешавад, агар шумо мувофиқат накунед? Ман навиштаам, ки ҳама гуна оббозӣ ба таври муассир қатъ карда мешавад, аммо дар асл ин як рақам аст. Системаи оператсионӣ мушкилоти калон дорад - он дорои саҳифаҳои зиёди ифлос аст, бинобар ин IO, ки мизоҷони шумо тавлид мекунанд, ба таври муассир қатъ карда мешавад, яъне барнома барои фиристодани дархости sql ба пойгоҳи додаҳо омадааст, он интизор аст. Ҳама гуна вуруд/баромад ба он афзалияти пасттарин дорад, зеро базаи маълумотро нуқтаи назорат ишғол мекунад. Ва кай ба итмом мерасад, комилан номаълум аст. Ва ҳангоме ки шумо оббозии ғайри замина ба даст овардед, ин маънои онро дорад, ки тамоми IO-и шумо онро ишғол мекунад. Ва то ба охир расидани он, шумо ҳеҷ коре нахоҳед кард.

Дар ин ҷо боз ду нуктаи муҳиме ҳаст, ки аз доираи ин гузориш берунанд. Ин танзимотҳо бояд ба танзимоти postgresql.conf мувофиқат кунанд, яъне танзимоти нуқтаҳои назоратӣ. Ва системаи диски шумо бояд ба таври мувофиқ танзим карда шавад. Агар шумо дар RAID кэш дошта бошед, пас он бояд батарея дошта бошад. Одамон RAID-ро бо кэши хуб бидуни батарея мехаранд. Агар шумо дар RAID SSD дошта бошед, онҳо бояд серверҳои сервер бошанд, дар он ҷо конденсаторҳо мавҷуданд. Дар ин ҷо як рӯйхати муфассал аст. Ин истинод гузориши маро дар бораи чӣ гуна танзим кардани диски иҷроиш дар PostgreSQL дар бар мегирад. Дар он ҷо ҳамаи ин рӯйхатҳо мавҷуданд.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Боз чӣ метавонад ҳаётро хеле душвор созад? Ин ду параметр мебошанд. Онҳо нисбатан нав мебошанд. Бо нобаёнӣ, онҳо метавонанд ба барномаҳои гуногун дохил карда шаванд. Ва онҳо метавонанд ҳаётро душвор созанд, агар онҳо нодуруст фурӯзон шаванд.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Ду чизи нисбатан нав вуҷуд дорад. Онҳо аллакай дар ядрои сеюм пайдо шудаанд. Ин sched_migration_cost дар наносонияҳо ва sched_autogroup_enabled аст, ки ба таври пешфарз як аст.

Ва чӣ тавр онҳо ҳаёти шуморо вайрон мекунанд? Арзиши ҷадвали_мигратсия чист? Дар Linux, барномасоз метавонад равандро аз як CPU ба дигараш интиқол диҳад. Ва барои PostgreSQL, ки дархостҳоро иҷро мекунад, интиқол ба CPU дигар комилан норавшан аст. Аз нуқтаи назари системаи амалиётӣ, вақте ки шумо тирезаҳоро байни openoffice ва терминал иваз мекунед, ин метавонад хуб бошад, аммо барои базаи маълумот ин хеле бад аст. Аз ин рӯ, сиёсати оқилона ин муқаррар кардани migration_cost ба арзиши калон, ҳадди аққал чанд ҳазор наносония мебошад.

Ин барои нақшакаш чӣ маъно хоҳад дошт? Ба назар гирифта мешавад, ки дар ин муддат процесс хануз гарм аст. Яъне, агар шумо муомилоти дарозмуддат дошта бошед, ки муддати тӯлонӣ коре карда буд, нақшакаш инро мефаҳмад. Вай тахмин мекунад, ки то он даме, ки ин тайм-аут бигзарад, зарурати интиқоли ин раванд ба ҷое нест. Агар дар айни замон раванд коре кунад, он гоҳ он ба ҳеҷ ҷо интиқол дода намешавад, он оромона дар CPU, ки ба он ҷудо карда шудааст, кор мекунад. Ва натиҷа аъло аст.

Нуктаи дуюм автогруппа мебошад. Як идеяи хуб барои сарбории кори мушаххасе вуҷуд дорад, ки ба пойгоҳи додаҳои муосир алоқаманд нестанд - ин гурӯҳбандии равандҳо аз рӯи терминали маҷозӣ мебошад, ки онҳо аз он оғоз мешаванд. Ин барои баъзе вазифаҳо қулай аст. Дар амал, PostgreSQL як системаи бисёрҷанбаи дорои префоркест, ки аз як терминал кор мекунад. Шумо як нависандаи қулф, нуқтаи назорат доред ва ҳамаи дархостҳои муштарии шумо дар як нақшакаш барои як CPU гурӯҳбандӣ карда мешаванд. Ва онҳо дар он ҷо якдилона мунтазир хоҳанд шуд, ки ӯ озод бошад, то ба якдигар халал расонанд ва ӯро дарозтар банд кунанд. Ин достоне аст, ки дар сурати чунин сарборӣ комилан нолозим аст ва аз ин рӯ, онро хомӯш кардан лозим аст.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Ҳамкасби ман Алексей Лесовский бо як pgbench оддӣ озмоишҳо анҷом дод, ки дар он ҷо хароҷоти мигратсияро бо тартиби миқёс зиёд кард ва автогруппаро хомӯш кард. Тафовут дар сахтафзори бад қариб 10% буд. Дар рӯйхати почтаи электронии postgres баҳс вуҷуд дорад, ки одамон дар бораи суръати дархост натиҷаҳои тағироти шабеҳро медиҳанд таъсир 50%. Чунин ҳикояҳо хеле зиёданд.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Ва ниҳоят, дар бораи сиёсати сарфаи барқ. Чизи хуб он аст, ки ҳоло Linux метавонад дар ноутбук истифода шавад. Ва он гӯё батареяро хуб истифода мебарад. Аммо ногаҳон маълум мешавад, ки ин метавонад дар сервер рӯй диҳад.

Ғайр аз он, агар шумо серверҳоро аз ягон хостинг иҷора гиред, пас хостерҳои "хуб" парво надоранд, ки шумо иҷрои беҳтаре доред. Вазифаи онхо аз он иборат аст, ки охани онхо харчи бештар самаранок истифода бурда шавад. Аз ин рӯ, бо нобаёнӣ онҳо метавонанд режими сарфаи нерӯи ноутбукро дар системаи оператсионӣ фаъол созанд.

Агар шумо ин маводро дар сервер бо пойгоҳи додаҳо зери бори вазнин истифода баред, пас интихоби шумо acpi_cpufreq + permormance аст. Ҳатто бо дархост мушкилот хоҳад буд.

Intel_pstate як драйвери каме дигар аст. Ва ҳоло ба ин афзалият дода мешавад, зеро он дертар аст ва беҳтар кор мекунад.

Ва, мувофиқан, ҳоким танҳо иҷрои аст. Талабот, сарфаи барқ ​​ва ҳама чизи дигар дар бораи шумо нестанд.

Натиҷаҳои таҳлили шарҳи PostgreSQL метавонанд аз рӯи чанд фармоиши бузургӣ фарқ кунанд, агар шумо сарфаи барқро фаъол созед, зеро амалан CPU дар пойгоҳи додаҳои шумо ба таври комилан пешгӯинашаванда кор мекунад.

Ин ашёҳо метавонанд бо нобаёнӣ дохил карда шаванд. Бодиққат назар кунед, то бубинед, ки оё онҳо онро бо нобаёнӣ фаъол кардаанд. Ин метавонад як мушкили воқеан бузург бошад.

Танзими Linux барои беҳтар кардани иҷрои PostgreSQL. Илья Космодемьянский

Ва дар охир ман мехостам ба бачаҳои дастаи DBA PosgreSQL-Consulting мо, аз ҷумла Макс Богук ва Алексей Лесовский, ки ҳар рӯз дар ин масъала пешравӣ мекунанд, ташаккур гӯям. Ва мо мекӯшем, ки барои мизоҷони худ ҳар кори аз дастамон меомадаро кунем, то ин ҳама барои онҳо кор кунад. Он ба дастурҳои бехатарии ҳавопаймо монанд аст. Дар ин ҷо ҳама чиз бо хун навишта шудааст. Ҳар яке аз ин чормағзҳо дар ҷараёни ягон мушкилот пайдо мешаванд. Ман хурсандам, ки онҳоро бо шумо мубодила мекунам.

саволҳои:

Сипос! Агар, масалан, ширкат мехоҳад пулро сарфа кунад ва пойгоҳи додаҳо ва мантиқи барномаҳоро дар як сервер ҷойгир кунад ё ширкат ба тамоюли мӯди меъмории микросервис, ки дар он PostgreSQL дар як контейнер кор мекунад, пайравӣ кунад. Чӣ ҳиллаест? Sysctl ба тамоми ядро ​​​​дар саросари ҷаҳон таъсир мерасонад. Ман нашунидам, ки системаҳои системаҳо ба тариқи виртуализатсия карда шудаанд, то онҳо дар як контейнер алоҳида кор кунанд. Дар он ҷо танҳо як гурӯҳ вуҷуд дорад ва танҳо як қисми назорат вуҷуд дорад. Чӣ тавр шумо бо ин зиндагӣ карда метавонед? Ё агар шумо хоҳед, ки иҷроиш дошта бошед, PostgreSQL-ро дар сервери сахтафзори алоҳида иҷро кунед ва онро танзим кунед?

Мо ба саволи шумо тақрибан се роҳ ҷавоб додем. Агар мо дар бораи сервери сахтафзоре, ки онро танзим кардан мумкин аст ва ғайра сухан нагӯем, пас истироҳат кунед, ҳама чиз бе ин танзимот хуб кор мекунад. Агар шумо чунин сарборе дошта бошед, ки ин танзимотро ба шумо лозим аст, пас шумо ба сервери оҳанӣ пештар аз ин танзимот меоед.

Мушкил чист? Агар ин як мошини маҷозӣ бошад, пас эҳтимоли зиёд шумо мушкилоти зиёде хоҳед дошт, масалан, бо он, ки дар аксари мошинҳои виртуалӣ таъхири диск комилан номувофиқ аст. Ҳатто агар гузариши диск хуб бошад ҳам, пас як транзаксияи нокомии воридот / баромад, ки ба интиқоли миёнаи ҳангоми гузаргоҳ ё ҳангоми навиштан ба WAL рухдода чандон таъсир намерасонад, он гоҳ пойгоҳи додаҳо аз ин хеле зарар мебинанд. Ва шумо пеш аз он ки ба ин мушкилот дучор шавед, инро мушоҳида хоҳед кард.

Агар шумо дар як сервер NGINX дошта бошед, шумо низ ҳамин мушкилотро хоҳед дошт. Вай барои хотираи муштарак мубориза хоҳад бурд. Ва шумо ба мушкилоти дар ин ҷо тавсифшуда даст нахоҳед дод.

Аммо аз тарафи дигар, баъзе аз ин параметрҳо то ҳол ба шумо мувофиқ хоҳанд буд. Масалан, dirty_ratio -ро бо sysctl насб кунед, то он қадар девона набошад - дар ҳар сурат, ин кӯмак мекунад. Бо ин ё он роҳ, шумо бо диск ҳамкорӣ хоҳед кард. Ва он аз рӯи намунаи нодуруст хоҳад буд. Ин одатан барои параметрҳое, ки ман нишон додам, пешфарз аст. Ва дар ҳар сурат беҳтар аст, ки онҳоро иваз кунед.

Аммо бо NUMA мушкилот вуҷуд дорад. Масалан, VmWare бо NUMA бо танзимоти комилан муқобил хуб кор мекунад. Ва дар ин ҷо шумо бояд интихоб кунед - сервери оҳанӣ ё бе оҳан.

Ман саволе дорам, ки бо Amazon AWS алоқаманд аст. Онҳо тасвирҳои пешакӣ танзимшуда доранд. Яке аз онҳо Amazon RDS номида мешавад. Оё ягон танзимоти фармоишии системаи оператсионии онҳо вуҷуд дорад?

Дар он ҷо танзимот мавҷуданд, аммо онҳо танзимоти гуногун доранд. Дар ин ҷо мо системаи пардозандаро дар робита ба он танзим мекунем, ки пойгоҳи додаҳо ин чизро чӣ гуна истифода мебаранд. Ва параметрҳое ҳастанд, ки муайян мекунанд, ки мо бояд ҳоло ба куҷо биравем, ба монанди шакл додан. Яъне ба мо ин қадар захираҳо лозиманд, ҳоло онҳоро мехӯрем. Пас аз ин, Amazon RDS ин захираҳоро сахттар мекунад ва кор дар он ҷо коҳиш меёбад. Ҳикояҳои инфиродӣ вуҷуд доранд, ки чӣ тавр одамон бо ин масъала саркашӣ мекунанд. Баъзан ҳатто хеле бомуваффақият. Аммо ин ба танзимоти OS ҳеҷ рабте надорад. Ин мисли шикастани абр аст. Ин як ҳикояи дигар аст.

Чаро саҳифаҳои бузурги шаффоф дар муқоиса бо бузурги TLB таъсире надоранд?

надихед. Инро аз бисьёр чихат шарх додан мумкин аст. Аммо дар асл онҳо онро намедиҳанд. Таърихи PostgreSQL чист? Ҳангоми оғозёбӣ, он як қисми зиёди хотираи муштаракро ҷудо мекунад. Новобаста аз он ки онҳо шаффофанд ё не, комилан аҳамият надорад. Далели он, ки онҳо дар ибтидо фарқ мекунанд, ҳама чизро мефаҳмонад. Ва агар хотираи зиёд мавҷуд бошад ва ба шумо лозим аст, ки сегменти shared_memory -ро аз нав созед, пас саҳифаҳои бузурги шаффоф мувофиқ хоҳанд буд. Дар PostgreSQL, он танҳо дар як порчаи бузург тақсим карда мешавад ва ҳамин тавр аст, ва он гоҳ ҳеҷ чизи махсусе рӯй намедиҳад. Шумо метавонед, албатта, аз он истифода баред, аммо ҳангоми аз нав ҷудо кардани чизе, эҳтимоли вайрон шудани shared_memory вуҷуд дорад. PostgreSQL дар ин бора намедонад.

Манбаъ: will.com

Илова Эзоҳ