Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Sengoloa sa tlaleho ea 2015 ea Ilya Kosmodemyansky "Tuning ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL"

Disclaimer: Замечу что доклад этот датирован ноябрем 2015 года — прошло больше 4 лет и прошло много времени. Рассматриваемая в докладе версия 9.4 уже не поддерживается. За прошедшие 4 года вышло 5 новых релизов PostgreSQL вышло и 15 версий ядра Linux. Если переписывать эти места, то получится в итоге другой доклад. Но здесь рассмотрен фундаментальный тюнинг Linux для PostgreSQL, который актуален и сейчас.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky


Меня зовут Илья Космодемьянский. Я работаю в компании PostgreSQL-Consulting. И сейчас буду рассказывать немножко про то, что делать с Linux применительно к базам данных вообще и к PostgreSQL в частности, потому что принципы довольно схожие.

Re tla bua ka eng? Haeba o buisana le PostgreSQL, ho isa bohōleng bo itseng o hloka ho ba molaoli oa UNIX. E bolelang? Haeba re bapisa Oracle le PostgreSQL, joale ho Oracle o hloka ho ba 80% DBA database admin le 20% Linux admin.

Ka PostgreSQL e rarahane haholoanyane. Ka PostgreSQL o hloka ho ba le kutloisiso e betere ea hore na Linux e sebetsa joang. 'Me ka nako e ts'oanang, matha hanyane ka mor'a terene, hobane morao tjena ntho e' ngoe le e 'ngoe e ntlafalitsoe hantle. 'Me li-kernel tse ncha lia lokolloa,' me ts'ebetso e ncha e hlaha, ts'ebetso e ntlafala, joalo-joalo.

Hobaneng re bua ka Linux? Eseng ho hang hobane re le kopanong ea Linux Peter, empa hobane maemong a sejoale-joale e 'ngoe ea litsamaiso tse sebetsang ka ho fetesisa tsa ho sebelisa li-database ka kakaretso le PostgreSQL haholo-holo ke Linux. Hobane FreeBSD, ka bomalimabe, e ntse e tsoela pele ka tsela e makatsang haholo. Mme ho tla ba le mathata ka ts'ebetso le ka lintho tse ling tse ngata. Ts'ebetso ea PostgreSQL ho Windows ka kakaretso ke taba e tebileng e arohaneng, e ipapisitseng le taba ea hore Windows ha e na mohopolo o arolelanoang joalo ka UNIX, athe PostgreSQL kaofela e hokahane le sena, hobane ke sistimi e sebetsanang le mefuta e mengata.

И экзотика типа Solaris, я думаю, в меньшей степени всех интересует, поэтому поехали.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Kabo ea sejoale-joale ea Linux e na le likhetho tse fetang 1 tsa syctl, ho latela hore na u theha kernel joang. Ka nako e ts'oanang, haeba re sheba linate tse fapaneng, re ka fetola ntho ka litsela tse ngata. Ho na le liparamente tsa sistimi ea faele mabapi le mokhoa oa ho li beha. Haeba u na le lipotso mabapi le hore na u ka e qala joang: seo u ka se khonang ho BIOS, mokhoa oa ho lokisa lisebelisoa, joalo-joalo.

Ena ke molumo o moholo haholo o ka buisanoang ka matsatsi a 'maloa, eseng tlalehong e le' ngoe e khutšoanyane, empa joale ke tla tsepamisa maikutlo linthong tsa bohlokoa, mokhoa oa ho qoba li-rakes tse tiiselitsoeng ho u thibela ho sebelisa database ea hau hantle ho Linux haeba u u se ke ua ba khalemela . 'Me ka nako e ts'oanang, ntlha ea bohlokoa ke hore li-parameter tse ngata tsa kamehla ha li kenyelelitsoe ho litlhophiso tse nepahetseng bakeng sa database. Ke hore, ka ho sa feleng e tla sebetsa hampe kapa che ho hang.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Ke lipehelo life tsa moetlo tse teng Linux? Ke nahana hore kaha kaofela le sebetsana le tsamaiso ea Linux, ha ho na tlhoko e khethehileng ea ho hlalosa hore na lipheo ke life.

O ka kenya:

  • Li-CPU.
  • Memori.
  • Boloka.
  • Tse ding. Re tla bua ka sena qetellong bakeng sa seneke. Esita le, ka mohlala, litekanyo tse kang maano a ho boloka matla a matla li ka ama ts'ebetso ka mokhoa o sa lebelloang haholo mme eseng ka tsela e monate ka ho fetisisa.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Litlhaloso tsa PostgreSQL le database ka kakaretso ke life? Bothata ke hore ha o khone ho fetola linate tsa motho ka mong le ho bona hore ts'ebetso ea rona e ntlafetse haholo.

E, ho na le lisebelisoa tse joalo, empa database ke ntho e rarahaneng. E sebelisana le lisebelisoa tsohle tseo seva e nang le tsona 'me e khetha ho sebelisana ka botlalo. Haeba u sheba litlhahiso tsa morao-rao tsa Oracle mabapi le mokhoa oa ho sebelisa tsamaiso ea OS, ho tla tšoana le motlae ka cosmonaut eo ea Mongolia - fepa ntja 'me u se ke ua ama letho. Ha re faneng ka database lisebelisoa tsohle, database ka boeona e tla hlophisa tsohle.

Ha e le hantle, ho isa bohōleng bo itseng boemo bo tšoana hantle le PostgreSQL. Phapang ke hore database ha e e-s'o khone ho inkela lisebelisoa tsohle, ke hore, kae-kae boemong ba Linux u hloka ho e hlophisa kaofela.

Taba ea mantlha ha se ho khetha sepheo se le seng ebe o qala ho se hlophisa, mohlala, memori, CPU kapa ntho e joalo, empa ke ho sekaseka mosebetsi le ho leka ho ntlafatsa phallo ka hohle kamoo ho ka khonehang e le hore mojaro oo baetsi ba mananeo a matle ba bo entseng. bakeng sa rona, ho kenyeletsoa basebelisi ba rona.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Mona ke setšoantšo ho hlalosa hore na ke eng. Ho na le buffer ea Linux OS mme ho na le memori e arolelanoang mme ho na le li-buffer tse arolelanoang tsa PostgreSQL. PostgreSQL, ho fapana le Oracle, e sebetsa ka kotloloho feela ka kernel buffer, ke hore, e le hore leqephe le tsoang ho disk le kene mohopolong oa lona o arolelanoang, le tlameha ho feta ka har'a kernel buffer le morao, boemo bo tšoanang hantle.

Li-disk li phela tlas'a tsamaiso ena. Ke toroe sena e le li-disk. Ha e le hantle, ho ka 'na ha e-ba le molaoli oa RAID, joalo-joalo.

'Me sena se kenya letsoho ka tsela e itseng se etsahala ka taba ena.

PostgreSQL ke database ea khale. Ho na le leqephe ka hare. 'Me lintho tsohle tse kenang le tse hlahisoang li etsahala ho sebelisoa maqephe. Re ntse re phahamisa li-blocks mohopolong ka maqephe. 'Me haeba ho se letho le etsahetseng, re li bala feela, ebe butle-butle li nyamela ho tloha ho cache ena, ho tloha ho li-buffers tse arolelanoang ebe li qetella li khutlela disk.

Haeba re nkela ntho sebakeng se itseng, joale leqephe lohle le tšoauoa le le litšila. Ke li tšoaile mona ka boputsoa. 'Me sena se bolela hore leqephe lena le tlameha ho lumellana le polokelo ea li-block. Ke hore, ha re e silafatsa, re ile ra kena ka WAL. 'Me ka nako e' ngoe e monate ha nako e ntse e ea ho ile ha fihla ketsahalo e bitsoang "Checkpoint". Mme boitsebiso bo ile ba tlalehoa bukeng ena hore o fihlile. 'Me sena se bolela hore maqephe ohle a litšila a neng a le teng ka nako eo ho li-buffers tsena tse arolelanoang a ne a hokahanngoa le disk ea polokelo e sebelisa fsync ka har'a kernel buffer.

Ke hobane’ng ha see se etsoa? Haeba re lahlile voltage, joale ha rea ​​ka ra fumana boemo ba hore data eohle e lahlehile. Mehopolo e tsitsitseng, eo bohle ba re boleletseng eona, e ntse e le khopolo-taba ea polokelo ea litaba - ena ke bokamoso bo khanyang, boo ehlileng re bo hahamallang ebile re bo rata, empa hajoale ba phela lilemo tse 20. 'Me, ehlile, sena sohle se hloka ho beoa leihlo.

И задача максимизации пропускной способности – это потюнить на всех этих этапах, чтобы это все ездило туда-сюда быстро. Шаредная память – это в основном страничный кэш. В PostgreSQL мы отправили запрос select что-то там, он достал эти данные из диска. Они попали в шаредные буфера. Соответственно, чтобы это работало лучше, должно быть много памяти.

E le hore sena sohle se sebetse hantle le ka potlako, o hloka ho lokisa sistimi ea ts'ebetso ka mekhahlelo eohle. 'Me u khethe hardware e leka-lekaneng, hobane haeba u e-na le ho se leka-lekane sebakeng se itseng, joale u ka etsa mohopolo o mongata, empa o ke ke oa sebelisoa ka lebelo le lekaneng.

И пройдемся по каждому из этих пунктов.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Чтобы эти странички путешествовали туда-сюда быстрее, нужно добиться следующего:

  • Taba ea pele, o hloka ho sebetsa ka mokhoa o atlehileng haholoanyane oa memori.
  • Taba ea bobeli, phetoho ena ha maqephe a tsoang mohopolong a ea ho disk e lokela ho sebetsa hantle.
  • 'Me ea boraro, ho tlameha ho ba le li-disk tse ntle.

Если у вас 512 GB оперативной памяти в сервере и все это в финале приезжает на SATA жесткий диск без всякого кэша, то весь сервер базы данных превращается не просто в тыкву, а в тыкву с SATA интерфейсом. Вы будете упираться в это непосредственно. И ничего вас не спасет.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Mabapi le ntlha ea pele ea mohopolo, ho na le lintho tse tharo tse ka thatafatsang bophelo haholo.

Ea pele ho tsona ke NUMA. NUMA ke ntho e etselitsoeng ho ntlafatsa ts'ebetso. Ho itšetlehile ka boima ba mosebetsi, lintho tse fapaneng li ka ntlafatsoa. 'Me ka sebopeho sa eona se secha sa hajoale, ha e ntle haholo bakeng sa lits'ebetso tse joalo ka li-database tse sebelisang cache ea leqephe ka matla li-buffers tse arolelanoang.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Ka bokhutšoanyane. U ka tseba joang haeba ho na le phoso ka NUMA? U na le mofuta o mong oa ho kokota ho sa thabiseng, ka tšohanyetso CPU e 'ngoe e tletse. Ka nako e ts'oanang, o sekaseka lipotso ho PostgreSQL mme o bona hore ha ho na letho le tšoanang moo. Lipotso tsena ha lia lokela ho ba matla haholo ho CPU. U ka tšoara sena ka nako e telele. Ho bonolo ho sebelisa khothaletso e nepahetseng ho tloha qalong ea mokhoa oa ho hlophisa NUMA bakeng sa PostgreSQL.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Что на самом деле происходит? NUMA – это Non-Uniform Memory Access. Смысл в чем? У вас есть CPU, с ним рядом есть память его локальная. И эта память interconnects может подтягивать память с других CPU.

Haeba u matha numactl --hardware, joale u tla fumana lakane e kholo joalo. Har'a tse ling, ho tla ba le sebaka sa bohole. Ho tla ba le lipalo - 10-20, ntho e joalo. Linomoro tsena ha se letho ho feta palo ea li-hops ho nka memori ena e hole le ho e sebelisa sebakeng sa heno. Ha e le hantle, khopolo e ntle. Sena se potlakisa ts'ebetso hantle tlas'a mefuta e mengata ea mesebetsi.

Joale ak'u nahane hore u na le CPU e le 'ngoe e lekang ho sebelisa mohopolo oa lehae, ebe u leka ho hula mohopolo o mong ka ho hokahanya ntho e itseng. 'Me CPU ena e fumana cache eohle ea leqephe la PostgreSQL - ke eona, li-gigabyte tse ling. U lula u fumana boemo bo bobe ka ho fetesisa, hobane ho CPU hangata ho na le mohopolo o fokolang mojuleng oo ka boyona. 'Me memori eohle e sebetsoang e feta har'a likhokahano tsena. E hlaha butle ebile e hloname. Mme processor ea hau e fanang ka lits'ebeletso node ena e lula e tletse. Mme nako ya phihlello ya memori ena e mpe, butle. Bona ke boemo boo u sa bo batleng haeba u sebelisa sena bakeng sa polokelo ea litaba.

Ka hona, khetho e nepahetseng haholoanyane bakeng sa database ke hore sistimi e sebetsang ea Linux e se tsebe se etsahalang ho hang. E le hore e fihlele memori joalo ka ha e etsa.

Hobaneng ha ho le joalo? Ho ne ho tla bonahala eka e lokela ho ba ka tsela e 'ngoe. Sena se etsahala ka lebaka le le leng le bonolo: re hloka mohopolo o mongata bakeng sa cache ea leqephe - mashome, makholo a li-gigabyte.

И если мы это все выделили и прокэшировали наши данные там, то выигрыш от использования кэша будет существенно больше, чем выигрыш от такого хитрого обращения к памяти. И мы таким образом выиграем не сопоставимо по сравнению с тем, что мы будем более эффективно обращаться к памяти с использованием NUMA.

Ka hona, ho na le mekhoa e 'meli mona ka nako eo, ho fihlela bokamoso bo khanyang bo fihlile,' me database ka boeona ha e khone ho fumana hore na ke li-CPU life tse ntseng li sebetsa le hore na li hloka ho hula ho hong hokae.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Ka hona, mokhoa o nepahetseng ke ho tima NUMA ka botlalo, ka mohlala, ha u qala hape. Maemong a mangata, meputso ke ea litaelo tse kholo hoo potso ea hore na ke efe e molemohali ha e hlahe ho hang.

Есть другой вариант. Мы им чаще пользуемся, чем первым, потому что, когда к нам приходит на поддержку клиент, то для него перезагрузить сервер – это целое дело. У него там бизнес крутится. А проблемы из-за NUMA они испытывают. Поэтому мы стараемся отключить менее инвазивными способами, чем reboot, но тут аккуратней проверяйте, что она отключилась. Потому что, как показывает опыт, что на родительский процесс PostgreSQL NUMA мы отключаем, это хорошо, но совершенно не обязательно, что это сработает. Надо проверять и смотреть, что она действительно отключилась.

Есть хороший пост Robert Haas. Это один из коммитеров PostgreSQL. Один из ключевых разработчиков всех низкоуровневых потрохов. И если по ссылкам из этого поста пройтись, то там описывается несколько колоритных историй про то, как людям NUMA осложняла жизнь. Посмотрите, изучите чек-лист сисадминский, что нужно настроить на сервере для того, чтобы у нас база данных работала хорошо. Вот эти настройки нужно записать и проверять, потому что иначе будет не очень хорошо.

Ka kopo hlokomela hore sena se sebetsa ho litlhophiso tsohle tseo ke tla bua ka tsona. Empa hangata li-database li bokelloa ka mokhoa oa master-slave bakeng sa mamello ea liphoso. U seke oa lebala ho etsa li-setting tsena ho lekhoba hobane ka letsatsi le leng u tla hlaheloa ke kotsi 'me u fetohele lekhoba ebe e tla ba monghali.

Boemong ba tšohanyetso, ha ntho e 'ngoe le e' ngoe e le mpe haholo, fono ea hau e lula e lla 'me mookameli oa hau a tla a matha ka molamu o moholo, u ke ke ua ba le nako ea ho nahana ka ho hlahloba. 'Me liphello e ka ba tse kotsi haholo.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Ntlha e latelang ke maqephe a maholo. Maqephe a maholo a thata ho a leka ka thoko, 'me ha ho na thuso ho etsa joalo, leha ho na le litekanyetso tse ka etsang sena. Li bonolo ho Google.

Molemo ke ofe? U na le seva e sa theko e boima haholo e nang le RAM e ngata, mohlala, ho feta 30 GB. Ha u sebelise maqephe a maholo. Sena se bolela hore o na le lintlha tse ngata mabapi le tšebeliso ea memori. 'Me sena se ka holimo ha se monate ka ho fetisisa.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Почему так? И что происходит? Операционная система мелкими кусочками выделяет память. Так удобно, так исторически сложилось. И если вдаваться в подробности, то ОС должна транслировать виртуальные адреса в физические. И это процесс не самый простой, поэтому ОС результат этой операции кэширует в Translation Lookaside Buffer (TLB).

'Me kaha TLB ke cache, mathata ohle a teng ka har'a cache a hlaha boemong bona. Taba ea pele, haeba u na le RAM e ngata 'me kaofela e arotsoe ka likotoana tse nyane, buffer ena e ba kholo haholo. 'Me haeba cache e le khōlō, joale ho e batla ho lieha. Bokaholimo bo phetse hantle 'me bo nka sebaka, ke hore, RAM e jeoa ke ntho e fosahetseng. Lekhetlong lena.

Tse peli - ha cache e ntse e hola haholoanyane maemong a joalo, ho na le monyetla o moholo oa hore o tla ba le messes ea cache. 'Me katleho ea cache ena e fokotseha ka potlako ha boholo ba eona bo ntse bo eketseha. Ka hona, litsamaiso tsa ts'ebetso li ile tsa tla le mokhoa o bonolo. E 'nile ea sebelisoa Linux ka nako e telele. E hlahile ho FreeBSD eseng khale haholo. Empa re bua ka Linux. Ana ke maqephe a maholo.

Mme mona ho ke ho hlokomeloe hore maqephe a maholo, joalo ka mohopolo, a ile a ts'oaroa qalong ke sechaba se neng se kenyelletsa Oracle le IBM, ke hore, baetsi ba database ba ne ba nahana ka matla hore sena se tla ba molemo bakeng sa li-database.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Hona see se ka etsoa metsoalle joang le PostgreSQL? Taba ea pele, maqephe a maholo a tlameha ho lumelloa ho Linux kernel.

Taba ea bobeli, li tlameha ho hlalosoa ka ho hlaka ke parameter ea sysctl - hore na ho na le tse kae. Linomoro mona li tsoa ho seva ea khale. U ka bala hore na u na le li-buffer tse kae tse arolelanoang e le hore maqephe a maholo a ka lekana moo.

'Me haeba seva sa hau kaofela se inehetse ho PostgreSQL, joale ntlha e ntle ea ho qala ke ho fana ka 25% ea RAM ho li-buffers tse arolelanoang, kapa 75% haeba u na le bonnete ba hore database ea hau e tla lumellana le 75% ena. Ntlha ea ho qala. 'Me u nahane, haeba u na le 256 GB ea RAM, ka hona, u tla ba le 64 GB ea li-buffers tse kholo. Bala hoo e ka bang ka moeli o itseng - hore na palo ena e lokela ho behoa ho eng.

Pele ho mofuta oa 9.2 (haeba ke sa fose, ho tloha phetolelong ea 8.2), ho ne ho khoneha ho hokahanya PostgreSQL le maqephe a maholo ka ho sebelisa laebrari ea batho ba bang. 'Me sena se lokela ho etsoa kamehla. Taba ea pele, o hloka kernel hore o tsebe ho abela maqephe a maholo ka nepo. 'Me, ea bobeli, e le hore kopo e sebetsang le bona e ka li sebelisa. E ke ke ea sebelisoa ka tsela eo feela. Kaha PostgreSQL e fane ka memori ka mokhoa oa 5 oa sistimi, sena se ka etsoa ho sebelisoa libhugetlbfs - lena ke lebitso le felletseng la laeborari.

В 9.3 улучшили производительность PostgreSQL при работе с памятью и отказались от system 5 метода выделения памяти. Все очень обрадовались, потому что иначе пытаешься запустить два instances PostgreSQL на одной машине, а он говорит, что у меня шаредной памяти не хватает. И говорит, что нужно поправить sysctl. А там такой sysctl, что нужно еще перезагрузиться и т. д. В общем, все обрадовались. Но выделение памяти mmap сломало использование huge pages. У нас большинство клиентов используют большие shared buffers. И мы настоятельно рекомендовали не переходить на 9.3, потому что там overhead начинался в хороших процентах исчисляться.

Empa sechaba se ile sa ela bothata bona hloko 'me ka 9.4 ba ile ba tsosolosa ketsahalo ena hantle haholo. 'Me ka 9.4 parameter e hlahile ho postgresql.conf eo ho eona u ka lumellang ho leka, ho tima kapa ho tima.

Leka ke khetho e sireletsehileng ka ho fetisisa. Ha PostgreSQL e qala, ha e abela mohopolo o arolelanoang, e leka ho ts'oara mohopolo ona maqepheng a maholo. 'Me haeba e sa sebetse, joale e khutlela ho khetho e tloaelehileng. 'Me haeba u na le FreeBSD kapa Solaris, joale u ka leka, e lula e sireletsehile.

Если on, то он просто не стартует, если не смог выделить из huge pages. Тут уже – кому и что более мило. Но если у вас стоит try, то проверяйте, что у вас действительно то, что нужно выделилось, потому что пространств для ошибки там много. Сейчас этот функционал работает только на Linux.

E 'ngoe hape e nyane pele re fetela pele. Maqephe a maholo a hlakileng ha a bue ka PostgreSQL hajoale. A ke ke a li sebelisa ka tsela e tloaelehileng. 'Me ka maqephe a maholo a Transparent bakeng sa mojaro o joalo oa mosebetsi, ha karolo e kholo ea mohopolo o arolelanoang e hlokahala, melemo e tla feela ka meqolo e meholo haholo. Haeba u na le memori ea terabyte, sena se ka sebetsa. Haeba re bua ka lits'ebetso tse ling tsa letsatsi le letsatsi, ha u na le 32, 64, 128, 256 GB ea memori mochining oa hau, joale maqephe a maholo a tloaelehileng ke Ok, 'me re tima feela Transparent.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

'Me ntho ea ho qetela ka mohopolo ha e amane ka ho toba le fruitut, e ka senya bophelo ba hau. Ts'ebetso eohle e tla angoa haholo ke taba ea hore seva e lula e fetoha.

И это будет очень неприятно в ряде моментов. И основная неприятность заключается в том, что в современных ядрах немножко разнится поведение с более старыми ядрами Linux. И эта вещь, на которую наступать довольно неприятно, потому что, когда мы говорим о какой-то работе с swap’ом, заканчивается это не своевременным приходом OOM-killer. И OOM-killer, который не своевременно пришел и скинул PostgreSQL, это неприятно. Об этом узнают все, т. е. до последнего пользователя.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Ho etsahalang? U na le palo e kholo ea RAM moo, tsohle li sebetsa hantle. Empa ka lebaka le itseng seva e fanyeha ka ho fapanyetsana le ho fokotsa lebelo ka lebaka la sena. Ho ka bonahala eka ho na le mohopolo o mongata, empa sena sea etsahala.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Nakong e fetileng, re ile ra eletsa ho beha vm.swappiness ho zero, ke hore, ho tima swap. Pejana, ho ne ho bonahala eka 32 GB ea RAM le li-buffers tse tšoanang tse arolelanoang e ne e le chelete e ngata. Sepheo se seholo sa ho fapanyetsana ke ho ba le sebaka sa ho lahlela boka ha re oela. 'Me e ne e se e sa phethahala ka ho khetheha. 'Me joale u tla etsa'ng ka mokokotlo ona? Ona ke mosebetsi moo ho sa hlakang hantle hore na ke hobane'ng ha phapanyetsano e hlokahala, haholo-holo ea boholo bo joalo.

Empa mehleng ea kajeno, ke hore, liphetolelo tsa boraro tsa kernel, boitšoaro bo fetohile. 'Me haeba u beha swap ho zero, ke hore, e tima, kapele kapa hamorao, le haeba ho na le RAM e setseng,' molai oa OOM o tla tla ho uena ho tla bolaea bareki ba matla ka ho fetisisa. Hobane o tla nka hore ka mosebetsi o joalo re sa ntsane re e-na le ho se hokae 'me re tla qhoma, ke hore, eseng ho khokhothela tsamaiso ea tsamaiso, empa ho kokota ntho e seng ea bohlokoa. Ena eo e seng ea bohlokoa haholo e tla ba moreki ea matla oa mohopolo o arolelanoang, e leng mookameli oa poso. 'Me ka mor'a moo ho tla ba molemo haeba setsi se sa tlameha ho tsosolosoa.

Ka hona, hona joale e sa lekanyetsoang, ho ea kamoo ke hopolang kateng, liphaello tse ngata li kae-kae ho 6, ke hore, u lokela ho qala ho sebelisa swap ka nako efe ho latela hore na ho setse memori e kae. Hona joale re khothaletsa ho beha vm.swappiness = 1, hobane sena se hlile sea e tima, empa ha se fane ka liphello tse tšoanang le tsa 'molai oa OOM ea ileng a fihla ka tšohanyetso a bolaea ntho eohle.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Ho latela eng? Ha re bua ka ts'ebetso ea li-database mme butle-butle re fallela ho li-disks, bohle ba qala ho tšoara lihlooho tsa bona. Hobane 'nete ea hore disk e lieha' me mohopolo o potlakile o tloaelehile ho bohle ho tloha bongoaneng. 'Me bohle ba tseba hore database e tla ba le mathata a ts'ebetso ea disk.

Bothata bo ka sehloohong ba ts'ebetso ea PostgreSQL bo amanang le li-spikes tsa li-checkpoints ha bo etsahale hobane disk e ea lieha. Sena se ka etsahala haholo ka lebaka la hore memori le disk bandwidth ha li lekane. Leha ho le joalo, li ka ’na tsa se be tse leka-lekaneng libakeng tse fapaneng. PostgreSQL ha e hlophisitsoe, OS ha e lokisoe, hardware ha e lokisoe 'me hardware e fosahetse. 'Me bothata bona ha bo etsahale feela haeba ntho e' ngoe le e 'ngoe e etsahala kamoo e lokelang, ke hore, ha ho na mojaro, kapa litlhophiso le hardware li khethiloe hantle.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Ke eng mme e shebahala joang? Hangata batho ba sebetsang le PostgreSQL ba kene tabeng ena hangata. Ke tla hlalosa. Joalokaha ke boletse, nako le nako PostgreSQL e etsa li-checkpoints ho lahla maqephe a litšila mohopolong o arolelanoang ho disk. Haeba re na le mohopolo o mongata o arolelanoang, joale ntlha ea ho hlahloba e qala ho ba le tšusumetso e matla ho disk, hobane e lahla maqephe ana ka fsync. E fihla ka har'a kernel buffer mme e ngolloa li-disk ho sebelisa fsync. 'Me haeba palo ea khoebo ena e le khōlō, joale re ka bona phello e sa thabiseng, e leng tšebeliso e kholo haholo ea li-disk.

Здесь у меня есть две картинки. Я сейчас поясню, что это такое. Это два с коррелированных по времени графика. Первый график – это дисковая утилизация. Здесь она доходит почти до 90 % в этот момент времени. Если у вас выпад базы данных с физическими дисками, с RAID-контроллером утилизация под 90 %, то это плохие новости. Это значит, что еще чуть-чуть и наступит 100 и ввод-вывод остановится.

Если у вас дисковый массив, то там другая немножко история. Там зависит от того, как он настроен, что за массив и т. д.

'Me ka mokhoa o ts'oanang, graph e tsoang ponong ea ka hare ea postgres e hlophisitsoe mona, e bolelang hore na tlhahlobo e etsahala joang. 'Me 'mala o motala mona o bontša hore na ke li-buffer tse kae, maqephe ana a litšila, ka nako eo a fihlileng sebakeng sena sa tlhahlobo bakeng sa ho hokahanya. 'Me sena ke ntho ea bohlokoa eo u lokelang ho e tseba mona. Rea bona hore re na le maqephe a mangata mona mme ka nako e 'ngoe re otla boto, ke hore, re ngotse le ho ngola, mona disk system e hlakile haholo. 'Me sebaka sa rona sa ho hlahloba se na le tšusumetso e matla haholo ho disk. Ka nepo, boemo bo lokela ho shebahala tjena, ke hore, re bile le ho rekota ho fokolang mona. 'Me re ka e lokisa ka li-setting hore e tle e tsoele pele ho ba tjena. Ke hore, recycling e nyane, empa kae-kae re ngola ho hong mona.

Ke eng e lokelang ho etsoa ho hlōla bothata boo? Haeba u emisitse IO tlas'a database, sena se bolela hore basebelisi bohle ba tlileng ho phethahatsa likōpo tsa bona ba tla ema.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Haeba u sheba ho tloha sebakeng sa Linux, haeba u nkile lisebelisoa tse ntle, u li lokiselitse ka nepo, u lokiselitse PostgreSQL ka mokhoa o tloaelehileng e le hore e etse hore li-checkpoints tsena li fokotsehe hangata, li li phatlalatse ha nako e ntse e feta pakeng tsa tse ling, ebe u kenella ho li-parameter tsa Debian tsa kamehla. Bakeng sa liphatlalatso tse ngata tsa Linux, sena ke setšoantšo: vm.dirty_ratio=20, vm.dirty_background_ratio=10.

E bolelang? Ledemona le le leng le tsubellang le hlahile ho tsoa kernel 2.6. Pdglush, ho itšetlehile ka hore na ke mang ea sebelisang e leng, e sebetsanang ka morao ho lahla maqephe a litšila ho tloha kernel buffer le ho lahla ha ho hlokahala ho lahla maqephe a litšila ho sa tsotellehe hore na ke eng, ha ho lahla ha backgrouind ha ho thuse.

Semelo se tla neng? Ha 10% ea kakaretso ea RAM e fumanehang ho seva e lula ke maqephe a litšila ka har'a kernel buffer, mosebetsi o khethehileng oa ho ngola o bitsoa ka morao. Ke hobane'ng ha e le semelo? Joalo ka paramente, e ela hloko hore na ke maqephe a makae ao u lokelang ho a ngola. Mme, ha re re, o ngola maqephe a N. 'Me ka nakoana ntho ena e robala. Ebe o tla hape mme o kopiletsa maqephe a mang hape.

Это предельно простая история. Тут задача как с бассейном, когда в одну трубу выливается, в другую вливается. У нас checkpoint пришел и если он мало грязных страничек отправил на скидывание, то постепенно из kernel buffer pgflush это все дело аккуратно рассосется.

Haeba maqephe ana a litšila a ntse a tsoela pele ho bokella, a bokella ho fihlela ho 20%, ka mor'a moo OS ea bohlokoa ke ho ngola ntho eohle ho disk, hobane matla a tla hlōleha 'me ntho e' ngoe le e 'ngoe e tla ba mpe ho rona. Re tla lahleheloa ke data ena, mohlala.

Leqheka ke lefe? Leqheka ke hore li-parameter tsena lefatšeng la sejoale-joale ke 20 le 10% ea kakaretso ea RAM e mochining, li mpe haholo ho latela ts'ebetso ea sistimi efe kapa efe ea disk eo u nang le eona.

Ak'u nahane u na le 128 GB ea RAM. 12,8 GB e fihla tsamaisong ea hau ea disk. 'Me ho sa tsotelehe hore na u na le cache efe moo, ho sa tsotelehe hore na u na le sehlopha sefe moo, li ke ke tsa tšoarella nako e telele hakaalo.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Ka hona, re khothaletsa hore hang-hang u fetole linomoro tsena ho latela bokhoni ba molaoli oa hau oa RAID. У меня сразу здесь дана рекомендация для контроллера, у которого 512 MB кэша.

Ntho e 'ngoe le e' ngoe e nkoa e le bonolo haholo. O ka kenya vm.dirty_background ka li-byte. 'Me litlhophiso tsena li hlakola tse peli tse fetileng. Ekaba karo-karolelano ke ea kamehla, kapa tse nang le li-byte li kentsoe tšebetsong, joale tse nang le li-byte li tla sebetsa. Empa kaha ke moeletsi oa DBA mme ke sebetsa le bareki ba fapaneng, ke leka ho hula mahlaka 'me ka hona, haeba ka li-byte, joale ka li-byte. Ha ho motho ea faneng ka tiisetso leha e le efe ea hore mookameli ea molemo a ke ke a eketsa mohopolo o eketsehileng ho seva, a e qale hape, 'me palo e tla lula e tšoana. Bala lipalo tsena feela e le hore ntho e 'ngoe le e' ngoe e lumellane le tiisetso.

Ho etsahala'ng haeba u sa tšoanelehe? Ke ngotse hore flushing leha e le efe e emisitsoe ka katleho, empa ha e le hantle sena ke mokhabo-puo. Tsamaiso ea ts'ebetso e na le bothata bo boholo - e na le maqephe a mangata a litšila, kahoo IO eo bareki ba hao ba e hlahisang e emisitsoe ka katleho, ke hore, kopo e tlile ho romela potso ea sql ho database, e emetse. Kenyelletso efe kapa efe ho eona ke ea bohlokoa ka ho fetisisa, hobane database e lula sebakeng sa tlhahlobo. 'Me ha a tla qeta ha ho hlake ho hang. 'Me ha u se u finyelletse ho hloekisa ho se nang bokamorao, ho bolela hore IO eohle ea hau e lula ho eona. 'Me ho fihlela e fela, u ke ke ua etsa letho.

Ho na le lintlha tse ling tse peli tsa bohlokoa mona tse fetang tekanyo ea tlaleho ena. Litlhophiso tsena li lokela ho ts'oana le litlhophiso tse ho postgresql.conf, ke hore, li-checkpoints. 'Me sistimi ea hau ea disk e tlameha ho hlophisoa ka mokhoa o lekaneng. Если у вас есть кэш на RAID, то на нем должна быть батарейка. Batho ba reka RAID ka cache e ntle ntle le betri. Haeba u na le li-SSD ho RAID, joale li tlameha ho ba li-server, ho tlameha ho ba le li-capacitor moo. Lenane la tlhahlobo le felletseng ke lena. Sehokelo sena se na le tlaleho ea ka ea mokhoa oa ho hlophisa disk ea ts'ebetso ho PostgreSQL. Ho na le li-checklist tsena kaofela moo.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Ke eng hape e ka thatafatsang bophelo? Tsena ke li-parameter tse peli. Li batla li le ncha. Ka tloaelo, li ka kenyelletsoa lits'ebetsong tse fapaneng. 'Me li ka thatafatsa bophelo ka tsela e tšoanang haeba li buletsoe ka phoso.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Ho na le lintho tse peli tse batlang li le ncha. Li se li hlahile li-cores tsa boraro. Sena ke sched_migration_cost ka nanoseconds le sched_autogroup_enabled, e leng e 'ngoe ea kamehla.

Hona li senya bophelo ba hau joang? sched_migration_cost ke eng? Ho Linux, kemiso e ka tlosa ts'ebetso ho tloha ho CPU e 'ngoe ho ea ho e' ngoe. Mme bakeng sa PostgreSQL, e etsang lipotso, ho fallela ho CPU e 'ngoe ha ho hlake ka botlalo. Ho latela pono ea sistimi ea ts'ebetso, ha o chencha lifensetere lipakeng tsa openoffice le terminal, sena se kanna sa ba hantle, empa bakeng sa database sena se mpe haholo. Ka hona, leano le utloahalang ke ho beha migration_cost ho boleng bo bong bo boholo, bonyane li-nanoseconds tse likete tse 'maloa.

See se tla bolela'ng ho mohlophisi? Ho tla nkoa hore nakong ena ts'ebetso e ntse e chesa. Ke hore, haeba u na le transaction ea nako e telele e 'nileng ea etsa ntho e itseng ka nako e telele, mohlophisi o tla utloisisa sena. O tla nka hore ho fihlela nako ena ea nako e feta, ha ho hlokahale hore u fallele mokhoa ona kae kapa kae. Haeba ka nako e ts'oanang ts'ebetso e etsa ntho e itseng, joale e ke ke ea falla kae kapa kae, e tla sebetsa ka khutso ho CPU e neng e abetsoe ho eona. 'Me phello e ntle haholo.

Ntlha ea bobeli ke autogroup. Ho na le mohopolo o motle bakeng sa meroalo e ikhethileng e sa amaneng le li-database tsa sejoale-joale - sena ke ho hlophisa lits'ebetso tsa sehlopha ka "terminal" ea sebele eo li qalisoang ho eona. Sena se loketse mesebetsi e meng. На практике PostgreSQL – это многопроцессная система с prefork’ом, которая запускается с одного терминала. У вас lock writer, checkpoint и все ваши клиентские запросы сгруппируются на один scheduler, на один CPU. И будут там дружно ожидать, когда он освободится, чтобы помешать друг другу и позанимать его подольше. Это история, которая совершенно не нужна в случае такой нагрузки и поэтому это нужно выключать.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Mosebetsi-'moho le 'na Alexey Lesovsky o ile a etsa liteko ka pgbench e bonolo, moo a ileng a eketsa migration_cost ka taelo ea boholo' me a tima autogroup. Phapang ho hardware e mpe e ne e batla e le 10%. Есть обсуждение в postgres’овой рассылке, где люди приводят результаты, как подобные изменения на скорость запроса влияли на 50 %. Таких историй довольно много.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

'Me qetellong, ka pholisi ea ho boloka matla. Ntho e ntle ke hore Linux e se e ka sebelisoa ho laptop. 'Me ho nahanoa hore e tla sebelisa betri hantle. Empa ka tšohanyetso ho hlaha hore sena se ka boela sa etsahala ho seva.

Ho feta moo, haeba u hira li-server ho tsoa ho moamoheli e mong, joale ba amohelang "bantle" ha ba tsotelle hore o na le ts'ebetso e ntle. Mosebetsi oa bona ke ho netefatsa hore tšepe ea bona e sebelisoa ka mokhoa o nepahetseng kamoo ho ka khonehang. Ka hona, ka ho sa feleng ba ka nolofalletsa mokhoa oa ho boloka matla a laptop ho sistimi e sebetsang.

Haeba u sebelisa lintho tsena ho seva e nang le database tlas'a mojaro o boima, joale khetho ea hau ke acpi_cpufreq + permornce. Leha ho na le tlhokomeliso ho tla ba le mathata.

Intel_pstate ke mokhanni o fapaneng hanyane. 'Me joale khetho e fanoa ho ena, kaha e tla ba hamorao mme e sebetsa hantle.

'Me, ka hona,' musisi ke ts'ebetso feela. Odemand, powersave le tse ling kaofela ha li mabapi le uena.

Liphetho tsa tlhahlobo ea PostgreSQL li ka fapana ka litaelo tse 'maloa tsa boholo haeba u thusa ho boloka matla, hobane hoo e batlang e le CPU e tlas'a database ea hau e tla sebetsa ka tsela e sa lebelloang ho hang.

Эти вещи могут быть включены по дефолту. Внимательно посмотрите – не включили ли они по дефолту. Это может быть действительно большой проблемой.

Tokiso ea Linux ho ntlafatsa ts'ebetso ea PostgreSQL. Ilya Kosmodemyansky

Qetellong, ke ne ke batla ho leboha bahlankana ba sehlopha sa rona sa PosgreSQL-Consulting DBA, e leng Max Boguk le Alexey Lesovsky, ba ntseng ba tsoela pele ka taba ena letsatsi le leng le le leng. 'Me re leka ho etsa sohle seo re ka se khonang bakeng sa bareki ba rona e le hore tsohle li ba sebeletse. Ho tšoana le ka litaelo tsa polokeho ea sefofane. Ntho e nngwe le e nngwe mona e ngotswe ka madi. E 'ngoe le e' ngoe ea linate tsena e fumanoa ts'ebetsong ea mofuta o itseng oa bothata. Ke thabela ho li arolelana le uena.

Lipotso:

Спасибо! Если, например, компания хочет сэкономить и размещать на одном сервере базу данных и application логику или, если компания следует модной тенденции микросервисных архитектур, в которых PostgreSQL запускается в контейнере. В чем фишка? Sysctl глобально на все ядро аффектят. Я не слышал, чтобы sysctl как-то виртуализировались, чтобы они на контейнере по отдельности работали. Есть только cgroup и там только на часть есть контроль. Как это с этим можно жить? Или если хотите performance, то запускайте PostgreSQL на отдельном железном сервере и его тюньте?

Re arabile potso ea hau ka litsela tse ka bang tharo. Haeba re sa bue ka seva sa hardware se ka hlophisoang, joalo-joalo, joale phutholoha, ntho e 'ngoe le e' ngoe e tla sebetsa hantle ntle le litlhophiso tsena. Haeba u na le mojaro o joalo oo u o hlokang ho etsa litlhophiso tsena, joale u tla tla ho seva sa tšepe pele ho litlhophiso tsena.

Bothata ke bofe? Haeba ona ke mochini o sebetsang, ho ka etsahala hore ebe o tla ba le mathata a mangata, mohlala, ka taba ea hore mechini e mengata ea nnete, latency ea disk ha e lumellane. Esita le haeba disk throughput e ntle, joale e mong o ile a hlōleha transaction ea I / O e sa ameng haholo ka karolelano ea phallo e etsahetseng nakong ea ho hlahloba kapa nakong ea ho ngolla WAL, joale database e tla utloa bohloko haholo ho sena. Mme o tla hlokomela sena pele o tobana le mathata ana.

Haeba u na le NGINX ho seva se le seng, u tla boela u be le bothata bo tšoanang. O tla loanela mohopolo o kopanetsoeng. 'Me u ke ke ua fihla mathateng a hlalositsoeng mona.

Empa ka lehlakoreng le leng, tse ling tsa liparamente tsena li ntse li tla ba tsa bohlokoa ho uena. Ka mohlala, beha dirty_ratio le sysctl hore e se ke ea hlanya - ho sa tsotellehe boemo leha e le bofe, sena se tla thusa. Ka tsela e 'ngoe, u tla ba le tšebelisano le disk. 'Me e tla ba ho latela mokhoa o fosahetseng. Hangata sena ke sa kamehla bakeng sa liparamente tseo ke li bontšitseng. 'Me ho sa tsotellehe boemo leha e le bofe ho molemo ho li fetola.

Empa ho ka ba le mathata ka NUMA. Ka mohlala, VmWare e sebetsa hantle le NUMA ka litlhophiso tse fapaneng hantle. 'Me mona u tlameha ho khetha - seva sa tšepe kapa se seng sa tšepe.

Ke na le potso e amanang le Amazon AWS. Li na le litšoantšo tse lokiselitsoeng esale pele. E 'ngoe ea tsona e bitsoa Amazon RDS. Na ho na le litlhophiso tsa tloaelo bakeng sa sistimi ea bona ea ts'ebetso?

Ho na le li-setting moo, empa li-setting tse fapaneng. Mona re hlophisa sistimi ea ts'ebetso ho latela hore na database e tla sebelisa ntho ena joang. 'Me ho na le liparamente tse bontšang hore na re lokela ho ea kae hona joale, joalo ka ho etsa sebopeho. Ke hore re hloka li- resource tse ngata, joale re tla li ja. Kamora sena, Amazon RDS e tiisa lisebelisoa tsena, 'me ts'ebetso e theohela moo. Ho na le lipale tsa batho ka bomong tsa kamoo batho ba qalang ho senya taba ena. Ka linako tse ling esita le ka katleho. Empa sena ha se amane le litlhophiso tsa OS. Ho tšoana le ho senya leru. Ke pale e fapaneng.

Hobaneng maqephe a maholo a Transparent a se na phello ha a bapisoa le Huge TLB?

Se fane. Sena se ka hlalosoa ka litsela tse ngata. Empa ha e le hantle ha ba fane ka eona. Nalane ea PostgreSQL ke efe? Ha e qala, e fana ka karolo e kholo ea mohopolo o arolelanoang. Hore na li pepeneneng kapa che, ha ho na thuso ho hang. Taba ea hore ba hlahella qalong e hlalosa ntho e 'ngoe le e 'ngoe. 'Me haeba ho na le mohopolo o mongata' me u hloka ho tsosolosa karolo e kopanetsoeng_memory, joale maqephe a maholo a Transparent a tla ba a bohlokoa. Ho PostgreSQL, e arotsoe feela ka har'a chunk e kholo qalong 'me ke eona, ebe ha ho letho le ikhethang le etsahalang moo. Ha e le hantle, u ka e sebelisa, empa ho na le monyetla oa ho fumana bobolu ba ho arolelana_memory ha e fana ka ntho e 'ngoe hape. PostgreSQL ha e tsebe ka sena.

Source: www.habr.com

Eketsa ka tlhaloso