Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Kwafi na rahoton 2015 na Ilya Kosmodemyansky "Linux tuning don inganta aikin PostgreSQL"

Disclaimer: Na lura cewa wannan rahoto yana kwanan watan Nuwamba 2015 - fiye da shekaru 4 sun shude kuma lokaci mai yawa ya wuce. An daina tallafawa sigar 9.4 da aka tattauna a cikin rahoton. A cikin shekaru 4 da suka gabata, an fitar da sabbin abubuwan 5 na PostgreSQL, kuma an fitar da nau'ikan 15 na kernel na Linux. Idan ka sake rubuta waɗannan sassan, za ku ƙare da wani rahoto na daban. Amma a nan mun yi la'akari da mahimmancin gyaran Linux don PostgreSQL, wanda har yanzu yana da dacewa a yau.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky


Sunana Ilya Kosmodemyansky. Ina aiki a PostgreSQL-Consulting. Kuma yanzu zan yi magana kaɗan game da abin da za a yi da Linux dangane da bayanan bayanai gabaɗaya da PostgreSQL musamman, saboda ka'idodin sun yi kama da juna.

Me zamuyi magana akai? Idan kuna sadarwa tare da PostgreSQL, to, har zuwa wani lokaci kuna buƙatar zama admin na UNIX. Me ake nufi? Idan muka kwatanta Oracle da PostgreSQL, to a cikin Oracle kuna buƙatar zama mai sarrafa bayanan DBA 80% da 20% mai sarrafa Linux.

Tare da PostgreSQL yana da ɗan ƙara rikitarwa. Tare da PostgreSQL kuna buƙatar samun kyakkyawar fahimtar yadda Linux ke aiki. Kuma a lokaci guda, gudu kadan bayan locomotive, saboda kwanan nan an sabunta komai da kyau. Kuma ana fitar da sabbin kernels, kuma sabbin ayyuka sun bayyana, aikin yana inganta, da sauransu.

Me yasa muke magana akan Linux? Ba don komai ba saboda muna a taron Linux na Bitrus, amma saboda a cikin yanayi na zamani ɗayan ingantattun tsarin aiki don amfani da bayanan bayanai gabaɗaya kuma musamman PostgreSQL shine Linux. Domin FreeBSD, da rashin alheri, yana tasowa a cikin wani bakon alkibla. Kuma za a sami matsaloli tare da aiki da sauran abubuwa da yawa. Ayyukan PostgreSQL akan Windows gabaɗaya wani lamari ne mai mahimmanci daban, dangane da gaskiyar cewa Windows ba ta da ma'aunin ƙwaƙwalwar ajiya iri ɗaya kamar UNIX, yayin da PostgreSQL duk yana da alaƙa da wannan, saboda tsarin tsari ne da yawa.

Kuma ina ganin kowa ba shi da sha'awar ƙaura kamar Solaris, don haka mu tafi.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Rarraba Linux na zamani yana da zaɓuɓɓukan syctl sama da 1, ya danganta da yadda kuke gina kernel. Haka kuma, idan muka kalli goro daban-daban, za mu iya daidaita wani abu ta hanyoyi da yawa. Akwai sigogin tsarin fayil akan yadda ake hawan su. Idan kana da tambayoyi game da yadda za a fara shi: abin da za a kunna a cikin BIOS, yadda za a saita hardware, da dai sauransu.

Wannan babban juzu'i ne wanda za'a iya tattauna shi cikin kwanaki da yawa, kuma ba a cikin ɗan gajeren rahoto ba, amma yanzu zan mayar da hankali kan abubuwa masu mahimmanci, yadda za a guje wa waɗannan rake waɗanda ke da tabbacin hana ku amfani da bayananku da kyau akan Linux idan kun kasance. kar a gyara su . Kuma a lokaci guda, wani muhimmin batu shi ne cewa yawancin sigogin da ba a haɗa su ba a cikin saitunan da suka dace don bayanan bayanai. Wato, ta hanyar tsoho zai yi aiki mara kyau ko a'a kwata-kwata.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Wadanne maƙasudin daidaitawa na gargajiya ne akwai a cikin Linux? Ina tsammanin tunda duk kuna ma'amala da gudanarwar Linux, babu takamaiman buƙatu don bayyana menene maƙasudi.

Kuna iya tuntuɓar:

  • CPUs.
  • Waƙwalwa.
  • Adanawa.
  • Sauran. Za mu yi magana game da wannan a karshen don abun ciye-ciye. Ko da, alal misali, sigogi irin su manufofin ceton makamashi na iya rinjayar aiki a cikin rashin tabbas kuma ba hanya mafi dadi ba.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Menene ƙayyadaddun bayanai na PostgreSQL da bayanan bayanai gabaɗaya? Matsalar ita ce ba za ku iya tweak kowane goro ba kuma ku ga cewa aikinmu ya inganta sosai.

Haka ne, akwai irin waɗannan na'urori, amma bayanan bayanai abu ne mai rikitarwa. Yana hulɗa tare da duk albarkatun da uwar garken ke da shi kuma ya fi son yin hulɗa da cikakke. Idan ka kalli shawarwarin Oracle na yanzu kan yadda ake amfani da OS mai masaukin baki, zai zama kamar barkwanci game da wannan cosmonaut na Mongolian - ciyar da kare kuma kada ku taɓa komai. Bari mu ba da bayanai duk albarkatun, database kanta za ta warware komai.

A ka'ida, zuwa wani lokaci yanayin daidai yake da PostgreSQL. Bambance-bambancen shine har yanzu bayanan ba su iya ɗaukar duk albarkatun don kansu ba, watau wani wuri a matakin Linux kuna buƙatar warware shi duka da kanku.

Babban ra'ayin ba shine zaɓin manufa ɗaya ba kuma fara kunna shi, misali, ƙwaƙwalwar ajiya, CPU ko wani abu makamancin haka, amma don bincika aikin aiki da ƙoƙarin inganta abubuwan da ake buƙata gwargwadon iko don nauyin da kyawawan shirye-shirye suka ƙirƙira shi. gare mu, gami da masu amfani da mu.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Ga hoto don bayyana menene. Akwai buffer na OS na Linux kuma akwai ƙwaƙwalwar ajiya da aka raba kuma akwai abubuwan buffer na PostgreSQL. PostgreSQL, ba kamar Oracle ba, yana aiki kai tsaye ta hanyar kernel buffer, watau, domin shafi daga faifan ya shiga cikin ƙwaƙwalwar ajiyar da aka raba, dole ne ya bi ta kernel buffer da baya, daidai halin da ake ciki.

Disks suna rayuwa a ƙarƙashin wannan tsarin. Na zana wannan a matsayin faifai. A zahiri, ana iya samun mai sarrafa RAID, da sauransu.

Kuma wannan shigarwa-fitarwa ta hanya ɗaya ko wata yana faruwa ta wannan al'amari.

PostgreSQL babban bayanan bayanai ne. Akwai shafi a ciki. Kuma duk shigarwa da fitarwa yana faruwa ta amfani da shafuka. Muna haɓaka tubalan zuwa ƙwaƙwalwar ajiya tare da shafuka. Kuma idan babu abin da ya faru, muna karanta su kawai, to sannu a hankali sun ɓace daga wannan cache, daga buffers ɗin da aka raba kuma su dawo kan faifai.

Idan muka maye gurbin wani abu a wani wuri, to duk shafin yana da alamar datti. Na yi musu alama a nan cikin shuɗi. Kuma wannan yana nufin cewa dole ne a haɗa wannan shafin tare da ajiyar toshe. Wato lokacin da muka yi datti, muka shiga WAL. Kuma a wani lokaci mai ban al'ajabi a cikin lokaci wani al'amari mai suna wurin bincike ya zo. Kuma an rubuta bayanin da ya zo a cikin wannan littafin. Kuma wannan yana nufin cewa duk dattin shafukan da ke nan a wannan lokacin a cikin waɗannan abubuwan da aka raba an daidaita su tare da faifan ajiya ta amfani da fsync ta hanyar buffer kernel.

Me yasa ake yin haka? Idan muka rasa wutar lantarki, to ba mu sami yanayin cewa duk bayanan sun ɓace ba. Ƙwaƙwalwar ƙwaƙwalwar ajiya, wanda kowa ya gaya mana game da shi, ya zuwa yanzu a cikin ka'idar bayanai - wannan shine makoma mai haske, wanda mu, ba shakka, muna ƙoƙari kuma muna son shi, amma a yanzu suna rayuwa a cikin shekaru 20. Kuma, ba shakka, duk wannan yana buƙatar kulawa.

Kuma aikin haɓaka kayan aiki shine daidaitawa a duk waɗannan matakan ta yadda duk ya motsa gaba da gaba cikin sauri. Ƙwaƙwalwar ajiya na asali ma'ajin shafi ne. A cikin PostgreSQL mun aika da zaɓaɓɓen tambaya ko wani abu, ya dawo da wannan bayanan daga faifai. Sun ƙare a cikin abubuwan da aka raba. Saboda haka, don yin aiki mafi kyau, dole ne a sami ƙwaƙwalwar ajiya mai yawa.

Domin duk wannan yayi aiki da kyau da sauri, kuna buƙatar daidaita tsarin aiki daidai a kowane matakai. Kuma zaɓi madaidaicin hardware, domin idan kuna da rashin daidaituwa a wani wuri, to kuna iya yin ƙwaƙwalwar ajiya mai yawa, amma ba za a yi amfani da shi da isasshen gudu ba.

Kuma bari mu bi ta kowane ɗayan waɗannan abubuwan.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Don sanya waɗannan shafuka su yi tafiya da sauri da sauri, kuna buƙatar cimma abubuwa masu zuwa:

  • Da fari dai, kuna buƙatar yin aiki sosai tare da ƙwaƙwalwar ajiya.
  • Abu na biyu, wannan canjin lokacin da shafuka daga ƙwaƙwalwar ajiya ke tafiya zuwa faifai ya kamata ya zama mafi inganci.
  • Kuma na uku, dole ne a sami faifai masu kyau.

Idan kana da 512 GB na RAM a cikin uwar garken kuma duk yana ƙarewa a kan SATA hard drive ba tare da cache ba, to, duk uwar garken bayanan ta juya ba kawai kabewa ba, amma kabewa mai SATA interface. Za ku ci karo da shi kai tsaye. Kuma babu abin da zai cece ku.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Game da batu na farko tare da ƙwaƙwalwar ajiya, akwai abubuwa uku da za su iya yin wahala sosai.

Na farkon su shine NUMA. NUMA abu ne da aka yi don inganta aiki. Dangane da nauyin aiki, ana iya inganta abubuwa daban-daban. Kuma a cikin sabon tsarin sa na yanzu, ba shi da kyau sosai ga aikace-aikace kamar ma'ajin bayanai waɗanda ke yin amfani da buffers cache na shafi sosai.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

A takaice. Ta yaya za ku iya sanin ko wani abu ba daidai ba ne a cikin NUMA? Kuna da wani nau'in ƙwanƙwasa mara daɗi, ba zato ba tsammani wasu CPU sun yi yawa. A lokaci guda, kuna nazarin tambayoyin a cikin PostgreSQL kuma ku ga cewa babu wani abu makamancin haka a can. Waɗannan tambayoyin bai kamata su kasance masu ƙarfin CPU ba. Kuna iya kama wannan na dogon lokaci. Yana da sauƙi don amfani da madaidaicin shawarwarin daga farkon yadda ake saita NUMA don PostgreSQL.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Me ke faruwa da gaske? NUMA tana nufin Samun Ƙwaƙwalwar Ƙwaƙwalwar Uniform. Menene amfanin? Kuna da CPU, kusa da shi akwai ƙwaƙwalwar ajiyar gida. Kuma wannan haɗin haɗin ƙwaƙwalwar ajiya na iya cire ƙwaƙwalwar ajiya daga wasu CPUs.

Idan ka gudu numactl --hardware, to, za ku sami irin wannan babban takarda. Daga cikin wasu abubuwa, za a sami filin nisa. Za a sami lambobi - 10-20, wani abu makamancin haka. Waɗannan lambobin ba kome ba ne illa adadin hops don ɗaukar wannan ƙwaƙwalwar nesa da amfani da shi a cikin gida. A ka'ida, kyakkyawan ra'ayi. Wannan yana haɓaka aiki sosai a ƙarƙashin kewayon nauyin aiki.

Yanzu ka yi tunanin cewa kana da CPU guda ɗaya da farko da ke ƙoƙarin amfani da ƙwaƙwalwar ajiyar gida, sannan ƙoƙarin cire wani ƙwaƙwalwar ajiya ta hanyar haɗin kai don wani abu. Kuma wannan CPU yana samun dukkan cache ɗin shafin ku na PostgreSQL - shi ke nan, wasu gigabytes. Kullum kuna samun mafi munin lamarin, saboda akan CPU yawanci akwai ƙananan ƙwaƙwalwar ajiya a cikin wannan ƙirar kanta. Kuma duk ƙwaƙwalwar ajiyar da aka yi amfani da ita tana tafiya ta waɗannan hanyoyin haɗin gwiwa. Ya juya a hankali da bakin ciki. Kuma na'urar sarrafa ku da ke aiki da wannan kumburi koyaushe yana ɗorawa. Kuma lokacin samun damar wannan ƙwaƙwalwar ajiya mara kyau, jinkirin. Wannan shine yanayin da ba ku so idan kuna amfani da wannan don bayanan bayanai.

Don haka, mafi kyawun zaɓi don bayanan bayanan shine don tsarin aiki na Linux don rashin sanin abin da ke faruwa a can kwata-kwata. Domin ya sami damar yin amfani da ƙwaƙwalwar ajiya kamar yadda yake yi.

Me yasa haka? Zai zama kamar ya kamata ya zama akasin haka. Wannan yana faruwa saboda dalili ɗaya mai sauƙi: muna buƙatar ƙwaƙwalwar ajiya mai yawa don cache shafi - dubun, ɗaruruwan gigabytes.

Kuma idan muka ware duk waɗannan kuma muka adana bayananmu a can, to, riba daga amfani da cache ɗin zai zama mafi girma fiye da ribar da aka samu daga irin wannan damar zuwa ƙwaƙwalwar ajiya. Kuma ta haka za mu amfana da rashin kwatancen gaskiyar cewa za mu sami damar ƙwaƙwalwar ajiya da inganci ta amfani da NUMA.

Don haka, akwai hanyoyi guda biyu a nan a halin yanzu, har sai da makoma mai haske ta zo, kuma ita kanta rumbun adana bayanai ta kasa gano wanne CPUs yake aiki da kuma inda ake bukatar ciro wani abu daga ciki.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Don haka, hanyar da ta dace ita ce a kashe NUMA gaba ɗaya, misali, lokacin sake kunnawa. A mafi yawan lokuta, abubuwan da aka samu suna da irin waɗannan umarni na girma wanda tambayar wacce ta fi kyau ba ta tashi kwata-kwata.

Akwai wani zaɓi. Muna amfani da shi sau da yawa fiye da na farko, saboda idan abokin ciniki ya zo wurinmu don goyon baya, sake kunna uwar garken yana da babban aiki a gare shi. Yana da kasuwanci a can. Kuma suna fuskantar matsaloli saboda NUMA. Don haka, muna ƙoƙarin musaki shi ta hanyoyi marasa ƙarfi fiye da sake yi, amma a kula don bincika cewa ba shi da rauni. Domin, kamar yadda gwaninta ya nuna, yana da kyau mu kashe NUMA akan tsarin iyaye na PostgreSQL, amma ba lallai ba ne cewa zai yi aiki. Muna bukatar mu duba mu ga cewa da gaske ta kashe.

Akwai kyakkyawan matsayi na Robert Haas. Wannan yana ɗaya daga cikin masu yin PostgreSQL. Ɗaya daga cikin maɓallan masu haɓaka duk ƙananan matakan giblets. Kuma idan kun bi hanyoyin haɗin yanar gizon daga wannan post ɗin, sun bayyana labarai masu ban sha'awa game da yadda NUMA ke wahalar da mutane. Duba, bincika jerin masu gudanar da tsarin na abin da ake buƙatar saitawa akan sabar domin bayanan mu yayi aiki da kyau. Dole ne a rubuta waɗannan saitunan kuma a duba su, saboda in ba haka ba ba zai yi kyau sosai ba.

Lura cewa wannan ya shafi duk saitunan da zan yi magana akai. Amma yawanci ana tattara bayanan bayanai a cikin yanayin bawa-bawa don haƙurin kuskure. Kar a manta da yin wadannan settings akan bawa domin watarana zakayi hatsari sai ka koma bawa sai ya zama shugaba.

A cikin yanayin gaggawa, lokacin da komai ya yi muni sosai, wayar ku koyaushe tana ringi kuma maigidan ku ya zo a guje da babban sanda, ba za ku sami lokacin yin tunani game da dubawa ba. Kuma sakamakon zai iya zama bala'i.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Batu na gaba shine manyan shafuka. Manyan shafuka suna da wahala a gwada su daban, kuma babu wata fa'ida a yin hakan, kodayake akwai ma'auni da za su iya yin hakan. Suna da sauƙi ga Google.

Menene amfanin? Kuna da sabar mara tsada mai yawa tare da RAM mai yawa, misali, fiye da 30 GB. Ba kwa amfani da manyan shafuka. Wannan yana nufin cewa tabbas kuna da kan gaba ta fuskar amfani da ƙwaƙwalwar ajiya. Kuma wannan saman ya yi nisa daga mafi jin daɗi.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Me yasa haka? To me ke faruwa? Tsarin aiki yana keɓance ƙwaƙwalwar ajiya a cikin ƙananan guda. Yana da dacewa sosai, shine yadda ya faru a tarihi. Kuma idan muka yi cikakken bayani, OS dole ne ya fassara adiresoshin kama-da-wane zuwa na zahiri. Kuma wannan tsari ba shine mafi sauƙi ba, don haka OS yana adana sakamakon wannan aiki a cikin Fassara Lookside Buffer (TLB).

Kuma tun da TLB cache ne, duk matsalolin da ke cikin cache suna tasowa a cikin wannan yanayin. Da fari dai, idan kuna da RAM da yawa kuma an keɓe shi a cikin ƙananan guntu, to wannan buffer ɗin ya zama babba sosai. Kuma idan ma'ajin yana da girma, to bincika ta yana raguwa. Sama yana da lafiya kuma ita kanta tana ɗaukar sarari, watau RAM ana cinye shi da wani abu da ba daidai ba. Wannan karon.

Na biyu - yayin da cache ke girma a cikin irin wannan yanayin, mafi kusantar cewa za ku sami asarar cache. Kuma ingancin wannan cache yana raguwa da sauri yayin da girmansa ke ƙaruwa. Saboda haka, tsarin aiki ya zo tare da hanya mai sauƙi. An yi amfani da shi a cikin Linux na dogon lokaci. Ya bayyana a cikin FreeBSD ba da dadewa ba. Amma muna magana ne game da Linux. Waɗannan manyan shafuka ne.

Kuma a nan ya kamata a lura da cewa, manyan shafuka, a matsayin ra'ayi, al'ummomin da suka haɗa da Oracle da IBM sun fara tura su, watau masana'antun bayanai sun yi imanin cewa wannan zai zama da amfani ga ma'ajin bayanai.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Kuma ta yaya za a yi abota da PostgreSQL? Da fari dai, dole ne a kunna manyan shafuka a cikin kernel na Linux.

Na biyu, dole ne a bayyana su a sarari ta hanyar sigar sysctl - nawa ne. Lambobin nan sun fito ne daga tsohuwar uwar garken. Kuna iya ƙididdige yawan abubuwan buffer ɗin da kuke da su ta yadda manyan shafuka su dace da wurin.

Kuma idan duk uwar garken ku an sadaukar da shi ga PostgreSQL, to, kyakkyawan mahimmin farawa shine a ware ko dai 25% na RAM zuwa masu buffers, ko 75% idan kun tabbata cewa bayananku tabbas zai dace da wannan 75%. Farawa ta ɗaya. Kuma la'akari, idan kuna da 256 GB na RAM, to, saboda haka, zaku sami 64 GB na manyan buffers. Yi lissafin kusan tare da ɗan gefe - menene yakamata a saita wannan adadi.

Kafin sigar 9.2 (idan ban yi kuskure ba, tun daga sigar 8.2), yana yiwuwa a haɗa PostgreSQL tare da manyan shafuka ta amfani da ɗakin karatu na ɓangare na uku. Kuma ya kamata a yi hakan koyaushe. Da farko, kuna buƙatar kernel don samun damar rarraba manyan shafuka daidai. Na biyu kuma, domin aikace-aikacen da ke aiki da su ya yi amfani da su. Ba kawai za a yi amfani da shi ba. Tun da PostgreSQL ya ware ƙwaƙwalwar ajiya a cikin tsarin tsarin 5, ana iya yin wannan ta amfani da libhugetlbfs - wannan shine cikakken sunan ɗakin karatu.

A cikin 9.3, an inganta aikin PostgreSQL lokacin aiki tare da ƙwaƙwalwar ajiya kuma an watsar da tsarin rarraba ƙwaƙwalwar ajiya na 5. Kowa ya yi farin ciki sosai, domin in ba haka ba kuna ƙoƙarin gudanar da lokuta biyu na PostgreSQL akan na'ura ɗaya, kuma ya ce ba ni da isasshen ƙwaƙwalwar ajiya. Kuma ya ce sysctl na bukatar gyara. Kuma akwai irin wannan sysctl wanda har yanzu kuna buƙatar sake yi, da dai sauransu Gaba ɗaya, kowa ya yi farin ciki. Amma rabon ƙwaƙwalwar ajiya na mmap ya karya amfani da manyan shafuka. Yawancin abokan cinikinmu suna amfani da manyan buffers. Kuma muna ba da shawarar sosai don kada a canza zuwa 9.3, saboda sama da ƙasa an fara ƙididdige shi cikin kashi mai kyau.

Amma al'umma sun mai da hankali kan wannan matsala kuma a cikin 9.4 sun sake yin wannan taron sosai. Kuma a cikin 9.4 wani siga ya bayyana a postgresql.conf wanda zaku iya kunna gwadawa, kunnawa ko kashewa.

Gwada shine zaɓi mafi aminci. Lokacin da PostgreSQL ya fara, lokacin da yake rarraba ƙwaƙwalwar ajiya, yana ƙoƙarin ɗaukar wannan ƙwaƙwalwar daga manyan shafuka. Kuma idan bai yi aiki ba, to, yana komawa zuwa zaɓi na al'ada. Kuma idan kuna da FreeBSD ko Solaris, to zaku iya gwadawa, koyaushe yana da aminci.

Idan kun kunna, to kawai baya farawa idan ba zai iya zaɓar daga manyan shafuka ba. Anan ya riga ya kasance game da wane da abin da ya fi kyau. Amma idan kun yi ƙoƙari, to, ku duba cewa da gaske kuna da abin da kuke buƙatar haskakawa, saboda akwai sarari da yawa don kuskure. A halin yanzu wannan aikin yana aiki akan Linux kawai.

Wani ƙaramin rubutu guda ɗaya kafin mu ci gaba. Manyan shafuka masu haske ba game da PostgreSQL ba tukuna. Ba zai iya amfani da su kullum ba. Kuma tare da manyan shafuka masu fa'ida don irin wannan nauyin aiki, lokacin da ake buƙatar babban yanki na ƙwaƙwalwar ajiya, fa'idodin suna zuwa ne kawai tare da babban kundin. Idan kuna da terabyte na ƙwaƙwalwar ajiya to wannan na iya shiga cikin wasa. Idan muna magana ne game da ƙarin aikace-aikacen yau da kullun, lokacin da kuna da 32, 64, 128, 256 GB na ƙwaƙwalwar ajiya akan injin ku, to manyan shafuka da aka saba yi Ok, kuma muna kashe Transparent kawai.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Kuma abu na ƙarshe game da ƙwaƙwalwar ajiya ba shi da alaƙa kai tsaye da fruitut, yana iya lalata rayuwar ku da gaske. Duk abubuwan da aka fitar za su yi tasiri sosai ta yadda uwar garken ke musanya koyaushe.

Kuma wannan zai zama mara dadi sosai ta hanyoyi da dama. Kuma babbar matsalar ita ce kernels na zamani sun ɗan bambanta da tsofaffin kwayayen Linux. Kuma wannan abu ne quite m zuwa mataki a kan, domin lokacin da muka yi magana game da wani irin aiki tare da musanya, shi ya ƙare da untimely isowa na OOM-kisan. Kuma OOM-kisan, wanda bai isa kan lokaci ba kuma ya sauke PostgreSQL, ba shi da daɗi. Kowa zai san game da wannan, wato, har sai mai amfani na ƙarshe.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Me ke faruwa? Kuna da adadin RAM mai yawa a wurin, komai yana aiki da kyau. Amma saboda wasu dalilai uwar garken yana rataye a swap kuma yana raguwa saboda wannan. Zai yi kama da cewa akwai ƙwaƙwalwar ajiya mai yawa, amma wannan ya faru.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

A baya, mun ba da shawarar saita vm.swappiness zuwa sifili, watau kashe musanyawa. A baya can, da alama cewa 32 GB na RAM da madaidaitan buffers ɗin da aka raba sun kasance adadi mai yawa. Babban manufar musanya shi ne samun wurin jefa ɓawon burodi idan muka fadi. Kuma an daina cika musamman. Sannan me za ku yi da wannan ɓawon burodi? Wannan aiki ne inda ba a bayyana dalilin da yasa ake buƙatar musanyawa ba, musamman ma irin wannan girman.

Amma a cikin mafi zamani, watau, nau'i na uku na kernel, halin ya canza. Kuma idan kun saita swap zuwa sifili, watau kashe shi, ko ba dade ko ba dade, ko da akwai sauran RAM ɗin, mai kashe OOM zai zo muku don ya kashe mafi yawan masu amfani. Domin zai yi la'akari da cewa tare da irin wannan nauyin aiki har yanzu muna da ɗan kaɗan kuma za mu yi tsalle, watau, ba don ƙusa tsarin tsarin ba, amma don ƙusa wani abu maras muhimmanci. Wannan mafi ƙarancin mahimmanci zai zama mabukaci mai ƙarfi na ƙwaƙwalwar ajiya, wato mai kula da gidan waya. Kuma bayan haka zai yi kyau idan ba dole ba ne a mayar da tushe.

Sabili da haka, yanzu tsoho, kamar yadda na tuna, yawancin rabawa suna wani wuri a kusa da 6, watau a wane lokaci ya kamata ka fara amfani da swap dangane da yawan ƙwaƙwalwar ajiya. Yanzu muna ba da shawarar saita vm.swappiness = 1, saboda wannan a zahiri yana kashe shi, amma baya ba da sakamako iri ɗaya kamar na mai kashe OOM wanda ba zato ba tsammani ya zo ya kashe duka.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Menene na gaba? Lokacin da muke magana game da ayyukan bayanan bayanai kuma a hankali muka matsa zuwa faifai, kowa ya fara kama kawunansu. Domin gaskiyar cewa faifan yana jinkirin kuma ƙwaƙwalwar ajiya yana da sauri ya saba da kowa tun lokacin yaro. Kuma kowa ya san cewa rumbun adana bayanai za su sami matsalolin aikin diski.

Babban matsalar aikin PostgreSQL da ke da alaƙa da wuraren bincike ba ya faruwa saboda faifan yana jinkirin. Wannan yana da mahimmanci saboda gaskiyar cewa ƙwaƙwalwar ajiya da bandwidth ba su daidaita ba. Duk da haka, ƙila ba za a daidaita su a wurare daban-daban ba. PostgreSQL ba a daidaita shi ba, OS ba a daidaita shi ba, ba a daidaita kayan aikin ba kuma kayan aikin ba daidai ba ne. Kuma wannan matsala ba ta faruwa ne kawai idan komai ya faru kamar yadda ya kamata, watau ko dai babu kaya, ko kuma saitunan da hardware an zaɓi su da kyau.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Menene shi kuma menene kama? Yawancin lokaci mutanen da ke aiki tare da PostgreSQL sun shiga cikin wannan batu fiye da sau ɗaya. Zan yi bayani. Kamar yadda na ce, PostgreSQL lokaci-lokaci yana sanya wuraren bincike don zubar da datti a cikin ƙwaƙwalwar ajiyar da aka raba zuwa faifai. Idan muna da adadin ƙwaƙwalwar ajiya mai yawa, to, wurin bincike ya fara yin tasiri mai zurfi akan faifai, saboda yana zubar da waɗannan shafuka tare da fsync. Yana zuwa a cikin kernel buffer kuma an rubuta shi zuwa faifai ta amfani da fsync. Kuma idan girman wannan kasuwancin yana da girma, to, zamu iya lura da sakamako mara kyau, wato babban amfani da diski.

Anan ina da hotuna guda biyu. Yanzu zan yi bayanin menene. Waɗannan jadawali biyu ne masu alaƙa da lokaci. Hoton farko shine amfani da faifai. Anan ya kai kusan kashi 90% a wannan lokacin. Idan kuna da gazawar bayanai tare da faifai na zahiri, tare da amfani da mai sarrafa RAID a 90%, to wannan mummunan labari ne. Wannan yana nufin cewa ɗan ƙara kaɗan kuma zai kai 100 kuma I/O zai tsaya.

Idan kuna da tsararrun faifai, to, labarin ɗan daban ne. Ya dogara da yadda aka tsara shi, wane nau'in tsararru ne, da dai sauransu.

Kuma a cikin layi daya, an saita jadawali daga ra'ayi na postgres na ciki anan, wanda ke ba da labarin yadda wurin binciken ke faruwa. Kuma launin kore a nan yana nuna adadin buffers, waɗannan ƙazantattun shafuka, a wannan lokacin sun isa wannan wurin bincike don aiki tare. Kuma wannan shine babban abin da kuke buƙatar sani anan. Mun ga cewa muna da shafuka da yawa a nan kuma a wani lokaci mun buga allon, wato, mun rubuta kuma mun rubuta, a nan tsarin faifai yana aiki sosai. Kuma wurin bincikenmu yana da tasiri mai ƙarfi akan faifai. Da kyau, yanayin ya kamata ya kasance kamar haka, watau muna da ƙarancin rikodin a nan. Kuma za mu iya gyara shi tare da saitunan ta yadda zai ci gaba da kasancewa kamar haka. Wato, sake yin amfani da shi kadan ne, amma a wani wuri muna rubuta wani abu a nan.

Me ya kamata a yi don shawo kan wannan matsala? Idan kun dakatar da IO a ƙarƙashin bayanan bayanai, wannan yana nufin cewa duk masu amfani waɗanda suka zo don cika buƙatun su zasu jira.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Idan ka duba ta mahangar Linux, idan ka ɗauki kayan aiki masu kyau, ka daidaita shi daidai, ka saita PostgreSQL akai-akai ta yadda zai sa waɗannan wuraren binciken ba su da yawa, suna yada su akan lokaci tsakanin juna, sannan ka shiga cikin tsoffin sigogin Debian. Ga yawancin rarrabawar Linux, wannan shine hoton: vm.dirty_ratio=20, vm.dirty_background_ratio=10.

Me ake nufi? Wani aljani mai sheki ya bayyana daga kwaya 2.6. Pdglush, ya danganta da wanda ke amfani da wanne, wanda ke aiwatar da watsar da ƙazantattun shafuka daga ma'ajin kwaya da jefar da shi lokacin da ya zama dole a watsar da ƙazantattun shafuka ko da menene, lokacin da zubar da baya baya taimakawa.

Yaushe bayanan baya ke zuwa? Lokacin da kashi 10% na jimlar RAM ɗin da ke kan uwar garken ke shagaltar da ƙazantattun shafuka a cikin ma'ajin kernel, ana kiran aikin kashewa na musamman a bango. Me yasa baya baya? A matsayin ma'auni, yana la'akari da shafuka nawa don rubutawa. Kuma, bari mu ce, ya rubuta kashe shafukan N. Kuma na ɗan lokaci wannan abu yana barci. Sannan ta sake zuwa ta kwafi wasu wasu shafuka.

Wannan labari ne mai sauqi qwarai. Matsala a nan ita ce kamar wurin ninkaya, idan ya zubo bututu guda, sai ya shiga wani. Wurin bincikenmu ya isa kuma idan ya aika da wasu shafuka masu datti don zubarwa, to sannu a hankali za a warware duk abin da kyau daga kernel buffer pgflush.

Idan waɗannan shafuka masu datti sun ci gaba da tarawa, suna tarawa har zuwa 20%, bayan haka fifikon OS shine a rubuta duk abin a cikin faifai, saboda ikon zai gaza kuma komai zai cutar da mu. Za mu rasa wannan bayanan, misali.

Menene dabara? Dabarar ita ce, waɗannan sigogi a cikin duniyar zamani sune 20 da 10% na jimlar RAM da ke kan injin, suna da matuƙar ban tsoro dangane da kayan aikin kowane tsarin diski da kuke da shi.

Ka yi tunanin kana da 128 GB na RAM. 12,8 GB ya zo a cikin tsarin faifan ku. Kuma ko menene ma'ajin da kuke da shi a wurin, komai tsararrun da kuke da shi a wurin, ba za su daɗe ba.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Don haka, muna ba da shawarar ku daidaita waɗannan lambobin nan da nan bisa iyawar mai sarrafa RAID ɗin ku. Nan da nan na ba da shawara a nan don mai sarrafawa wanda ke da 512 MB na cache.

An yi la'akari da komai mai sauƙi. Kuna iya sanya vm.dirty_background a cikin bytes. Kuma waɗannan saitunan sun soke biyun da suka gabata. Ko dai rabon ya kasance ta hanyar tsoho, ko kuma waɗanda ke da bytes an kunna su, to waɗanda ke da bytes za su yi aiki. Amma tun da ni mai ba da shawara ne na DBA kuma ina aiki tare da abokan ciniki daban-daban, Ina ƙoƙarin zana bambaro don haka, idan a cikin bytes, to a cikin bytes. Babu wanda ya ba da tabbacin cewa mai kyau admin ba zai ƙara ƙarin ƙwaƙwalwar ajiya a uwar garken ba, sake kunna shi, kuma adadi zai kasance iri ɗaya. Kawai lissafta waɗannan lambobin don komai ya dace a ciki tare da garanti.

Me zai faru idan ba ku dace ba? Na rubuta cewa an dakatar da duk wani zubar da ruwa da kyau, amma a gaskiya wannan siffa ce ta magana. Tsarin aiki yana da babbar matsala - yana da shafuka masu ƙazanta da yawa, don haka IO ɗin da abokan cinikin ku ke samarwa ya daina aiki yadda ya kamata, watau aikace-aikacen ya zo ya aika da tambayar sql zuwa database, yana jira. Duk wani shigarwa/fitarwa zuwa gare shi shine mafi ƙarancin fifiko, saboda ma'aunin bayanai yana mamaye wurin bincike. Kuma idan za ta gama ba a sani ba kwata-kwata. Kuma lokacin da kuka sami gogewa mara tushe, yana nufin cewa duk IO ɗinku yana shagaltar da shi. Kuma har sai ya ƙare, ba za ku yi kome ba.

Akwai wasu muhimman abubuwa guda biyu a nan da suka wuce iyakar wannan rahoton. Waɗannan saitunan yakamata su dace da saitunan a postgresql.conf, watau saitunan wuraren bincike. Kuma dole ne a daidaita tsarin faifan ku yadda ya kamata. Idan kana da cache akan RAID, to dole ne ya kasance yana da baturi. Mutane suna siyan RAID tare da cache mai kyau ba tare da baturi ba. Idan kuna da SSDs a cikin RAID, to dole ne su zama uwar garken, dole ne a sami capacitors a wurin. Anan akwai cikakken jerin abubuwan dubawa. Wannan hanyar haɗin gwiwar ta ƙunshi rahoto na kan yadda ake saita faifan aiki a cikin PostgreSQL. Akwai duk waɗannan jerin abubuwan dubawa a wurin.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Menene kuma zai iya sa rayuwa ta yi matukar wahala? Waɗannan sigogi biyu ne. Sabbin su ne. Ta hanyar tsoho, ana iya haɗa su cikin aikace-aikace daban-daban. Kuma za su iya yin wahala kamar yadda suke idan an kunna su ba daidai ba.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Akwai sabbin abubuwa guda biyu. Sun riga sun bayyana a cikin nau'i na uku. Wannan shi ne sched_migration_cost a nanoseconds da sched_autogroup_enabled, wanda shine ɗaya ta tsohuwa.

Kuma ta yaya suke lalata rayuwar ku? Menene sched_migration_cost? A Linux, mai tsara jadawalin na iya yin ƙaura daga wannan CPU zuwa wani. Kuma ga PostgreSQL, wanda ke aiwatar da tambayoyi, ƙaura zuwa wani CPU gaba ɗaya ba a sani ba. Daga mahangar tsarin aiki, lokacin da kuka canza windows tsakanin openoffice da tasha, wannan na iya zama mai kyau, amma ga ma'ajin bayanai wannan yayi muni sosai. Saboda haka, manufa mai ma'ana ita ce saita ƙaura_cost zuwa wani babban ƙima, aƙalla dubunnan nanoseconds.

Menene wannan zai nufi ga mai tsarawa? Za a yi la'akari da cewa a wannan lokacin tsarin yana da zafi. Wato, idan kuna da ciniki mai tsawo wanda ya daɗe yana yin wani abu, mai tsarawa zai fahimci haka. Zai ɗauka cewa har sai wannan lokacin ya wuce, babu buƙatar ƙaura wannan tsari a ko'ina. Idan a lokaci guda tsarin ya yi wani abu, to ba za a yi hijira zuwa ko'ina ba, zai yi aiki a hankali a kan CPU da aka ba shi. Kuma sakamakon yana da kyau.

Batu na biyu shine rukunin kai tsaye. Akwai kyakkyawan ra'ayi don takamaiman nau'ikan ayyuka waɗanda ba su da alaƙa da rumbun adana bayanai na zamani - wannan shine tsarin ƙungiyoyi ta hanyar tashar kama-da-wane daga inda aka ƙaddamar da su. Wannan ya dace da wasu ayyuka. A aikace, PostgreSQL tsarin tsari ne da yawa tare da prefork wanda ke gudana daga tasha ɗaya. Kuna da marubucin makulli, wurin bincike, kuma duk buƙatun abokin cinikin ku za a haɗa su cikin mai tsarawa ɗaya, kowane CPU. Kuma za su jira shi gaba ɗaya don ya sami 'yanci, don su shiga tsakani, su daɗe da shagaltar da shi. Wannan labari ne wanda ba lallai ba ne a cikin irin wannan kaya don haka yana buƙatar kashe shi.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Abokin aiki na Alexey Lesovsky ya yi gwaji tare da pgbench mai sauƙi, inda ya ƙara ƙaura_cost ta tsari mai girma kuma ya kashe autogroup. Bambanci akan mummunan hardware ya kusan 10%. Akwai tattaunawa akan jerin aikawasiku na postgres inda mutane ke ba da sakamakon irin wannan canje-canje ga saurin tambaya ya yi tasiri 50%. Akwai ire-iren waɗannan labaran da yawa.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Kuma a ƙarshe, game da manufofin ceton wutar lantarki. Abu mai kyau shine Linux yanzu ana iya amfani dashi akan kwamfutar tafi-da-gidanka. Kuma ana tsammanin zai yi amfani da baturin da kyau. Amma ba zato ba tsammani ya bayyana cewa wannan kuma na iya faruwa akan uwar garken.

Bugu da ƙari, idan kun yi hayan sabobin daga wasu hoster, to masu karɓar "mai kyau" ba su damu da cewa kuna da mafi kyawun aiki ba. Ayyukan su shine tabbatar da cewa an yi amfani da ƙarfen su yadda ya kamata. Saboda haka, ta tsohuwa za su iya kunna yanayin ceton wutar kwamfutar tafi-da-gidanka akan tsarin aiki.

Idan kuna amfani da wannan kayan akan uwar garken tare da bayanan bayanai ƙarƙashin nauyi mai nauyi, to zaɓinku shine acpi_cpufreq + permormance. Ko da tare da buƙatun za a sami matsala.

Intel_pstate direba ne na ɗan bambanta. Kuma yanzu an ba da fifiko ga wannan, kamar yadda yake daga baya kuma yana aiki mafi kyau.

Kuma, bisa ga haka, gwamna aiki ne kawai. Ondemand, powersave da komai ba game da ku ba ne.

Sakamakon bayanin nazarin PostgreSQL na iya bambanta da umarni masu girma da yawa idan kun kunna ikon ceton, saboda kusan CPU a ƙarƙashin bayananku zai kasance yana gudana ta hanyar da ba za a iya faɗi ba.

Ana iya haɗa waɗannan abubuwan ta tsohuwa. Duba a hankali don ganin ko sun kunna ta ta tsohuwa. Wannan na iya zama babbar matsala.

Kunna Linux don inganta aikin PostgreSQL. Ilya Kosmodemyansky

Kuma a ƙarshe, ina so in ce na gode wa mutane daga ƙungiyar PosgreSQL-Consulting DBA, wato Max Boguk da Alexey Lesovsky, waɗanda ke kan gaba a cikin wannan al'amari kowace rana. Kuma muna ƙoƙarin yin iya ƙoƙarinmu ga abokan cinikinmu don komai ya yi aiki a gare su. Yana kama da umarnin aminci na jirgin sama. Duk abin da ke nan an rubuta shi cikin jini. Ana samun kowane ɗayan waɗannan kwayoyi a cikin aiwatar da wata matsala. Ina farin cikin raba su da ku.

Tambayoyi:

Na gode! Idan, alal misali, kamfani yana son adana kuɗi kuma ya sanya bayanan bayanai da dabaru na aikace-aikacen akan sabar guda ɗaya, ko kuma idan kamfani ya bi salon ƙirar ƙirar microservice, wanda PostgreSQL ke gudana a cikin akwati. Menene dabara? Sysctl zai shafi duka kwaya a duniya. Ban ji labarin sysctls ana yin su ta wata hanya ta yadda za su yi aiki daban a kan akwati ba. Akwai rukuni kawai kuma akwai kawai ɓangaren sarrafawa a wurin. Ta yaya za ku rayu da wannan? Ko kuma idan kuna son yin aiki, to ku gudanar da PostgreSQL akan uwar garken hardware daban kuma ku kunna shi?

Mun amsa tambayar ku ta hanyoyi kusan uku. Idan ba muna magana ne game da uwar garken hardware wanda za'a iya kunnawa, da dai sauransu, to shakatawa, komai zai yi aiki lafiya ba tare da waɗannan saitunan ba. Idan kuna da irin wannan nauyin da kuke buƙatar yin waɗannan saitunan, to zaku zo uwar garken ƙarfe tun da farko kafin waɗannan saitunan.

Menene matsalar? Idan wannan na'ura ce ta kama-da-wane, to tabbas za ku sami matsaloli da yawa, alal misali, tare da gaskiyar cewa akan yawancin injunan kama-da-wane yanayin faifan diski bai dace ba. Ko da faifan diski yana da kyau, to, ciniki na I / O ya gaza sosai wanda ba ya tasiri ga matsakaicin matsakaicin abin da ya faru a lokacin binciken ko a lokacin rubutawa zuwa WAL, to database zai sha wahala sosai daga wannan. Kuma za ku lura da wannan kafin ku shiga cikin waɗannan matsalolin.

Idan kuna da NGINX akan sabar iri ɗaya, zaku sami matsala iri ɗaya. Zai yi yaƙi don ƙwaƙwalwar ajiya. Kuma ba za ku sami matsalolin da aka bayyana a nan ba.

Amma a gefe guda, wasu daga cikin waɗannan sigogi za su kasance masu dacewa da ku. Alal misali, saita dirty_ratio tare da sysctl don kada ya zama mahaukaci - a kowane hali, wannan zai taimaka. Wata hanya ko wata, za ku yi hulɗa tare da faifai. Kuma zai kasance bisa ga tsarin da ba daidai ba. Wannan gabaɗaya tsoho ne don sigogin da na nuna. Kuma a kowane hali yana da kyau a canza su.

Amma ana iya samun matsaloli tare da NUMA. VmWare, alal misali, yana aiki da kyau tare da NUMA tare da daidaitattun saitunan. Kuma a nan dole ne ku zaɓi - uwar garken ƙarfe ko wanda ba na ƙarfe ba.

Ina da tambaya mai alaƙa da Amazon AWS. Suna da hotuna da aka riga aka tsara. Daya daga cikinsu ana kiransa Amazon RDS. Akwai wasu saitunan da aka saba don tsarin aikin su?

Akwai saituna a wurin, amma saituna daban-daban. Anan mun tsara tsarin aiki ta hanyar yadda rumbun adana bayanai za su yi amfani da wannan abu. Kuma akwai sigogin da ke ƙayyade inda ya kamata mu je yanzu, kamar tsarawa. Wato muna bukatar albarkatu da yawa, yanzu za mu cinye su. Bayan wannan, Amazon RDS yana ƙarfafa waɗannan albarkatun, kuma aikin ya ragu a can. Akwai labarun daidaikun mutane na yadda mutane suka fara rikici da wannan lamarin. Wani lokaci har ma da nasara sosai. Amma wannan ba shi da alaƙa da saitunan OS. Kamar hacking girgijen ne. Wannan wani labari ne na daban.

Me yasa manyan shafuka masu gaskiya ba su da wani tasiri idan aka kwatanta da Huge TLB?

Kada ku bayar. Ana iya bayyana wannan ta hanyoyi da yawa. Amma a gaskiya ba sa ba da shi kawai. Menene tarihin PostgreSQL? A farawa, yana keɓance babban yanki na ƙwaƙwalwar ajiya. Ko sun kasance a bayyane ko a'a ba shi da mahimmanci. Gaskiyar cewa sun fice a farkon ya bayyana komai. Kuma idan akwai ƙwaƙwalwar ajiya da yawa kuma kuna buƙatar sake gina ɓangaren share_memory, to, manyan shafuka masu ƙarfi za su dace. A cikin PostgreSQL, an keɓe shi kawai a cikin babban yanki a farkon kuma shi ke nan, sannan babu wani abu na musamman da ya faru a can. Kuna iya, ba shakka, amfani da shi, amma akwai damar samun ɓarna na shared_memory lokacin da ya sake ware wani abu. PostgreSQL bai sani ba game da wannan.

source: www.habr.com

Add a comment