Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Transkripsyon rapò 2015 pa Ilya Kosmodemyansky "Linux akor pou amelyore pèfòmans PostgreSQL"

Limit responsabilite nou: Mwen remake ke rapò sa a gen dat Novanm 2015 - plis pase 4 ane pase ak anpil tan pase. Vèsyon 9.4 diskite nan rapò a pa sipòte ankò. Pandan 4 ane ki sot pase yo, 5 nouvo degaje PostgreSQL yo te lage, ak 15 vèsyon nan nwayo Linux yo te lage. Si ou reekri pasaj sa yo, ou pral fini ak yon rapò diferan. Men, isit la nou konsidere akor Linux fondamantal pou PostgreSQL, ki toujou enpòtan jodi a.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky


Non mwen se Ilya Kosmodemyansky. Mwen travay nan PostgreSQL-Consulting. Epi kounye a mwen pral pale yon ti kras sou sa yo dwe fè ak Linux an relasyon ak baz done an jeneral ak PostgreSQL an patikilye, paske prensip yo se byen menm jan.

De kisa nap pale? Si ou kominike ak PostgreSQL, nan yon sèten mezi ou bezwen yon admin UNIX. Sa sa vle di? Si nou konpare Oracle ak PostgreSQL, Lè sa a, nan Oracle ou bezwen yo dwe 80% admin baz done DBA ak 20% admin Linux.

Avèk PostgreSQL li se yon ti kras pi konplike. Avèk PostgreSQL ou bezwen gen yon pi bon konpreyansyon sou ki jan Linux travay. Ak an menm tan an, kouri yon ti kras apre lokomotiv la, paske dènyèman tout bagay te mete ajou byen joliman. Ak nouvo nwayo yo lage, ak nouvo fonksyonalite parèt, pèfòmans amelyore, elatriye.

Poukisa nou pale de Linux? Pa ditou paske nou nan konferans lan Linux Peter, men paske nan kondisyon modèn youn nan sistèm operasyon ki pi jistifye pou itilize baz done an jeneral ak PostgreSQL an patikilye se Linux. Paske FreeBSD, malerezman, ap devlope nan kèk direksyon trè etranj. Epi pral gen pwoblèm tou de ak pèfòmans ak ak anpil lòt bagay. Pèfòmans PostgreSQL sou Windows se jeneralman yon pwoblèm grav separe, ki baze sou lefèt ke Windows pa gen menm memwa pataje ak UNIX, pandan y ap PostgreSQL tout mare nan sa a, paske li se yon sistèm milti-pwosesis.

E mwen panse ke tout moun mwens enterese nan ekzotik tankou Solaris, kidonk ann ale.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Yon distribisyon Linux modèn gen plis pase 1 opsyon syctl, depann sou fason ou bati nwayo a. An menm tan an, si nou gade nan nwa yo diferan, nou ka ajiste yon bagay nan plizyè fason. Gen paramèt sistèm dosye sou kòman yo monte yo. Si w gen kesyon sou kijan pou kòmanse li: kisa pou pèmèt nan BIOS la, ki jan yo konfigirasyon pyès ki nan konpitè, elatriye.

Sa a se yon volim trè gwo ki ka diskite sou plizyè jou, epi yo pa nan yon rapò kout, men kounye a mwen pral konsantre sou bagay enpòtan, ki jan pou fè pou evite rato sa yo ki garanti yo anpeche ou sèvi ak baz done ou byen sou Linux si ou pa korije yo. Ak an menm tan an, yon pwen enpòtan se ke anpil paramèt default yo pa enkli nan anviwònman yo ki kòrèk pou baz done a. Sa se, pa default li pral travay mal oswa pa ditou.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Ki sib akor tradisyonèl ki genyen nan Linux? Mwen panse ke depi nou tout ap fè fas ak administrasyon Linux, pa gen okenn nesesite patikilye yo eksplike ki objektif yo ye.

Ou ka melodi:

  • CPUs.
  • Memwa.
  • Depo.
  • Lòt. Nou pral pale sou sa a nan fen pou yon ti goute. Menm, pou egzanp, paramèt tankou politik ekonomize enèji ka afekte pèfòmans nan yon fason trè enprevizib epi yo pa pi bèl.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Ki spesifik yo nan PostgreSQL ak baz done a an jeneral? Pwoblèm lan se ke ou pa ka ajiste nenpòt nwa endividyèl ak wè ke pèfòmans nou an te amelyore anpil.

Wi, gen gadjèt sa yo, men yon baz done se yon bagay konplèks. Li reyaji ak tout resous ki sèvè a genyen epi li pito kominike ak tout sa yo. Si ou gade nan rekòmandasyon aktyèl Oracle a sou kòman yo sèvi ak yon OS lame, li pral tankou blag la sou kosmonaut Mongolyen sa a - manje chen an epi pa manyen anyen. Ann bay baz done a tout resous yo, baz done a li menm ap regle tout bagay.

Nan prensip, nan yon sèten mezi sitiyasyon an se egzakteman menm jan ak PostgreSQL. Diferans lan se ke baz done a poko kapab pran tout resous yo pou tèt li, sa vle di yon kote nan nivo Linux ou bezwen sòt li tout tèt ou.

Lide prensipal la se pa chwazi yon sèl sib epi kòmanse ajiste li, pou egzanp, memwa, CPU oswa yon bagay tankou sa, men analize kantite travay la epi eseye amelyore debi a otank posib pou ke chaj la ke pwogramasyon bon te kreye li. pou nou, ki gen ladan itilizatè nou yo.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Men yon foto pou eksplike sa li ye. Gen yon tanpon Linux OS epi gen memwa pataje epi gen tanpon PostgreSQL pataje. PostgreSQL, kontrèman ak Oracle, travay dirèkteman sèlman nan tanpon nwayo a, sa vle di, nan lòd pou yon paj ki soti nan disk la antre nan memwa pataje li yo, li dwe ale nan tanpon nwayo a epi tounen, egzakteman menm sitiyasyon an.

Disk ap viv anba sistèm sa a. Mwen te trase sa a kòm disk. An reyalite, ka gen yon kontwolè RAID, elatriye.

Ak sa a D '-sòti yon fason oswa yon lòt k ap pase nan zafè sa a.

PostgreSQL se yon baz done klasik. Gen yon paj andedan. Ak tout opinyon ak pwodiksyon fèt lè l sèvi avèk paj. Nou ap ogmante blòk nan memwa ak paj. Men, si pa gen anyen ki te pase, nou jis li yo, Lè sa a, piti piti yo disparèt nan kachèt sa a, nan tanpon yo pataje epi yo fini tounen sou disk la.

Si nou ranplase yon bagay yon kote, Lè sa a, tout paj la make kòm sal. Mwen make yo isit la an ble. Epi sa vle di ke paj sa a dwe senkronize ak depo blòk. Sa vle di, lè nou fè l sal, nou fè yon antre nan WAL. Ak nan kèk moman bèl bagay nan tan, yon fenomèn yo rele pòs te vini. Ak enfòmasyon yo te anrejistre nan jounal sa a ke li te rive. Ak sa vle di ke tout paj yo sal ki te isit la nan moman sa a nan sa yo tanpon pataje yo te senkronize ak disk la depo lè l sèvi avèk fsync nan tanpon nwayo a.

Poukisa sa ap fèt? Si nou pèdi vòltaj, Lè sa a, nou pa t 'jwenn sitiyasyon an ke tout done yo te pèdi. Memwa ki pèsistan, ke tout moun te di nou sou, se byen lwen tèlman nan teyori baz done - sa a se yon avni briyan, ke nou, nan kou, fè efò pou epi nou renmen li, men pou kounye a yo ap viv nan mwens 20 ane. Epi, nan kou, tout bagay sa yo bezwen yo dwe kontwole.

Ak travay la nan maksimize debi se amann nan tout etap sa yo pou ke li tout deplase ale ak soti byen vit. Memwa pataje se fondamantalman yon kachèt paj. Nan PostgreSQL nou te voye yon rechèch chwazi oswa yon bagay, li rekipere done sa yo nan disk. Yo te fini nan tanpon pataje. An konsekans, pou sa a travay pi byen, dwe gen anpil memwa.

Pou tout bagay sa yo travay byen epi byen vit, ou bezwen kòrèkteman konfigirasyon sistèm operasyon an nan tout etap yo. Epi chwazi pyès ki nan konpitè balanse, paske si ou gen yon move balans nan kèk kote, Lè sa a, ou ka fè yon anpil nan memwa, men li pa pral sèvis nan vitès ase.

Epi ann ale nan chak pwen sa yo.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Pou fè paj sa yo vwayaje ale vini pi vit, ou bezwen reyalize bagay sa yo:

  • Premyèman, ou bezwen travay pi efikas ak memwa.
  • Dezyèmman, tranzisyon sa a lè paj nan memwa ale nan disk yo ta dwe pi efikas.
  • Ak twazyèmman, dwe gen bon disk.

Si ou gen 512 GB RAM nan sèvè a epi tout bagay sa yo fini sou yon SATA dis lou san okenn kachèt, Lè sa a, tout sèvè baz done a tounen pa sèlman yon joumou, men yon joumou ki gen yon koòdone SATA. Ou pral kouri antre nan li dirèkteman. E anyen p'ap sove ou.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Konsènan pwen an premye ak memwa, gen twa bagay ki ka fè lavi trè difisil.

Premye nan yo se NUMA. NUMA se yon bagay ki fèt pou amelyore pèfòmans. Tou depan de kantite travay la, diferan bagay yo ka optimize. Ak nan nouvo fòm aktyèl li yo, li pa trè bon pou aplikasyon pou tankou baz done ki itilize entansif kachèt paj tanpon pataje.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Nan yon mot. Ki jan ou ka di si gen yon bagay ki mal ak NUMA? Ou gen kèk kalite frape dezagreyab, toudenkou kèk CPU twò chaje. An menm tan an, ou analize demann nan PostgreSQL epi wè ke pa gen anyen ki sanble la. Rekèt sa yo pa ta dwe tèlman CPU entansif. Ou ka trape sa a pou yon tan long. Li pi fasil pou itilize rekòmandasyon ki kòrèk la depi nan konmansman an sou fason pou konfigirasyon NUMA pou PostgreSQL.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Kisa k ap pase vre? NUMA la vle di Aksè memwa ki pa inifòm. Ki pwen an? Ou gen yon CPU, akote li gen memwa lokal li yo. Ak memwa sa a entèkonekte ka rale moute memwa soti nan CPU lòt.

Si ou kouri numactl --hardware, Lè sa a, ou pral jwenn tankou yon fèy gwo. Pami lòt bagay, pral gen yon jaden distans. Pral gen nimewo - 10-20, yon bagay tankou sa. Nimewo sa yo pa gen anyen plis pase kantite oublions pou ranmase memwa aleka sa a epi sèvi ak li lokalman. Nan prensip, yon bon lide. Sa a akselere pèfòmans byen anba yon seri de chaj travay.

Koulye a, imajine ke ou gen yon CPU premye ap eseye sèvi ak memwa lokal li yo, Lè sa a, ap eseye rale moute yon lòt memwa atravè entèkonekte pou yon bagay. Epi CPU sa a jwenn tout kachèt paj PostgreSQL ou a - se li, kèk jigokte. Ou toujou jwenn ka ki pi mal la, paske sou CPU a anjeneral gen ti memwa nan modil sa a tèt li. Ak tout memwa ki sèvis yo ale nan entèkoneksyon sa yo. Li sanble dousman ak tris. Ak processeur ou ki sèvis sa a ne se toujou ap twò chaje. Ak tan aksè nan memwa sa a se move, ralanti. Sa a se sitiyasyon an ou pa vle si w ap itilize sa a pou yon baz done.

Se poutèt sa, yon opsyon ki pi kòrèk pou baz done a se pou sistèm operasyon Linux la pa konnen sa k ap pase la ditou. Se konsa, ke li jwenn aksè nan memwa jan li fè sa.

Poukisa se sa? Li ta sanble ke li ta dwe nan lòt fason alantou. Sa rive pou yon rezon ki senp: nou bezwen anpil memwa pou kachèt paj la - dè dizèn, dè santèn de gigaocte.

Men, si nou atribye ba tout bagay sa yo ak kachèt done nou yo la, Lè sa a, benefis nan lè l sèvi avèk kachèt la pral siyifikativman pi gran pase benefis nan tankou yon aksè difisil nan memwa. Epi nou pral konsa benefisye enprenabl konpare ak lefèt ke nou pral jwenn aksè nan memwa pi efikasman lè l sèvi avèk NUMA.

Se poutèt sa, gen de apwòch isit la nan moman sa a, jiskaske lavni an klere rive, ak baz done a li menm se pa kapab konnen ki CPU li ap kouri sou ak ki kote li bezwen rale yon bagay soti.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Se poutèt sa, apwòch ki kòrèk la se enfim NUMA tout ansanm, pou egzanp, lè rdemare. Nan pifò ka yo, genyen yo nan lòd sa yo nan grandè ke kesyon an nan ki pi bon pa leve nan tout.

Gen yon lòt opsyon. Nou itilize li pi souvan pase premye a, paske lè yon kliyan vin jwenn nou pou sipò, rdemare sèvè a se yon gwo zafè pou li. Li gen yon biznis la. Epi yo fè eksperyans pwoblèm akòz NUMA. Se poutèt sa, nou eseye enfim li nan fason mwens pwogrese pase rdemare, men fè atansyon pou tcheke si li enfim. Paske, jan eksperyans montre, li bon ke nou enfim NUMA sou pwosesis paran PostgreSQL la, men li pa ditou nesesè ke li pral travay. Nou bezwen tcheke ak wè ke li vrèman etenn.

Gen yon bon pòs pa Robert Haas. Sa a se youn nan komite PostgreSQL yo. Youn nan devlopè kle yo nan tout ti ba nivo. Men, si w swiv lyen ki soti nan pòs sa a, yo dekri plizyè istwa kolore sou fason NUMA te fè lavi difisil pou moun. Gade, etidye lis verifikasyon administratè sistèm lan nan sa ki bezwen yo dwe configuré sou sèvè a nan lòd pou baz done nou an travay byen. Paramèt sa yo dwe ekri epi tcheke, paske otreman li pa pral trè bon.

Tanpri sonje ke sa a aplike a tout paramèt mwen pral pale sou yo. Men, anjeneral baz done yo kolekte nan mòd mèt-esklav pou tolerans fay. Pa bliye fè paramèt sa yo sou esklav la paske yon jou ou pral fè yon aksidan epi w ap chanje nan esklav la epi li pral vin mèt la.

Nan yon sitiyasyon ijans, lè tout bagay mal anpil, telefòn ou toujou ap sone ak bòs nan travay ou vin kouri ak yon gwo baton, ou p'ap gen tan pou panse a tcheke. Ak rezilta yo ka byen dezas.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Pwen kap vini an se paj gwo. Paj gwo yo difisil pou teste separeman, epi pa gen okenn pwen nan fè sa, byenke gen referans ki ka fè sa. Yo fasil pou Google.

Ki pwen an? Ou gen yon sèvè pa trè chè ak anpil RAM, pou egzanp, plis pase 30 GB. Ou pa sèvi ak paj gwo. Sa vle di ke ou definitivman gen anlè an tèm de itilizasyon memwa. Ak anlè sa a se lwen pi bèl la.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Poukisa se sa? Se konsa, sa k ap pase? Sistèm operasyon an bay memwa an ti moso. Li tèlman pratik, se jan sa te pase istorikman. Men, si nou antre nan detay, OS la dwe tradui adrès vityèl nan adrès fizik yo. Ak pwosesis sa a se pa pi senp la, kidonk OS la kachèt rezilta operasyon sa a nan Translation Lookaside Buffer (TLB).

Epi depi TLB a se yon kachèt, tout pwoblèm ki nannan nan yon kachèt rive nan sitiyasyon sa a. Premyèman, si ou gen yon anpil nan RAM epi li se tout atribye ba nan ti fragman, Lè sa a, tanpon sa a vin trè gwo. Men, si kachèt la gwo, Lè sa a, rechèch nan li se pi dousman. Anlè an sante epi li menm li pran espas, sa vle di RAM ap boule pa yon bagay ki pa kòrèk. Fwa sa a.

De - plis kachèt la ap grandi nan yon sitiyasyon konsa, plis chans li se ke ou pral gen miss kachèt. Ak efikasite nan kachèt sa a rapidman diminye kòm gwosè li ogmante. Se poutèt sa, sistèm operasyon yo te vini ak yon apwòch senp. Li te itilize nan Linux pou yon tan long. Li te parèt nan FreeBSD pa tèlman lontan de sa. Men, nou ap pale sou Linux. Sa yo se paj gwo.

Ak isit la li ta dwe remake ke paj gwo, kòm yon lide, te okòmansman pouse pa kominote ki gen ladan Oracle ak IBM, sa vle di manifaktirè baz done fòtman te panse ke sa a ta dwe itil pou baz done tou.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Ak ki jan sa ka fè zanmi ak PostgreSQL? Premyèman, paj gwo yo dwe aktive nan nwayo Linux la.

Dezyèmman, yo dwe espesifikman espesifye pa paramèt sysctl la - konbyen ki genyen. Nimewo yo isit la yo soti nan kèk sèvè ansyen. Ou ka kalkile konbyen tanpon pataje ou genyen pou paj gwo ka anfòm la.

Men, si tout sèvè ou a dedye a PostgreSQL, Lè sa a, yon bon pwen depa se asiyen swa 25% nan RAM nan tanpon pataje, oswa 75% si ou sèten ke baz done ou a pral definitivman anfòm nan sa a 75%. Kòmanse pwen youn. Epi konsidere, si ou gen 256 GB RAM, Lè sa a, kòmsadwa, ou pral gen 64 GB nan tanpon gwo. Kalkile apeprè ak kèk maj - ki sa figi sa a ta dwe mete nan.

Anvan vèsyon 9.2 (si mwen pa fè erè, depi vèsyon 8.2), li te posib konekte PostgreSQL ak paj gwo lè l sèvi avèk yon bibliyotèk twazyèm pati. E sa ta dwe toujou fèt. Premyèman, ou bezwen nwayo a pou kapab asiyen paj gwo kòrèkteman. Epi, dezyèmman, pou aplikasyon an ki travay avèk yo ka itilize yo. Li pa pral jis itilize nan fason sa a. Depi PostgreSQL atribye memwa nan style sistèm 5 la, sa ka fèt lè l sèvi avèk libhugetlbfs - sa a se non konplè bibliyotèk la.

Nan 9.3, pèfòmans PostgreSQL te amelyore lè w ap travay ak memwa epi yo te abandone metòd alokasyon memwa sistèm 5 la. Tout moun te kontan anpil, paske otreman ou eseye kouri de ka PostgreSQL sou yon sèl machin, epi li di ke mwen pa gen ase memwa pataje. Epi li di ke sysctl bezwen korije. Epi gen tankou yon sysctl ke ou toujou bezwen rdemare, elatriye An jeneral, tout moun te kontan. Men, alokasyon memwa mmap te kraze itilizasyon paj gwo. Pifò nan kliyan nou yo itilize gwo tanpon pataje. Epi nou rekòmande pou pa chanje a 9.3, paske anlè yo te kòmanse kalkile nan bon pousantaj.

Men, kominote a te peye atansyon sou pwoblèm sa a ak nan 9.4 yo retravay evènman sa a trè byen. Ak nan 9.4 yon paramèt parèt nan postgresql.conf nan ki ou ka pèmèt eseye, sou oswa koupe.

Eseye se opsyon ki pi an sekirite. Lè PostgreSQL kòmanse, lè li asiyen memwa pataje, li eseye pran memwa sa a nan paj yo gwo. Men, si li pa travay, Lè sa a, li woule tounen nan seleksyon nòmal la. Men, si ou gen FreeBSD oswa Solaris, Lè sa a, ou ka mete eseye, li toujou an sekirite.

Si sou, Lè sa a, li tou senpleman pa kòmanse si li pa t 'kapab chwazi nan paj yo gwo. Isit la li deja sou ki moun ak sa ki pi bèl. Men, si ou gen eseye, Lè sa a, tcheke ke ou reyèlman gen sa ou bezwen make, paske gen anpil plas pou erè. Kounye a fonksyonalite sa a ap travay sèlman sou Linux.

Yon lòt ti nòt anvan nou ale pi lwen. Paj transparan gwo yo pa sou PostgreSQL ankò. Li pa ka sèvi ak yo nòmalman. Epi ak paj transparan gwo pou yon kantite travay konsa, lè yo bezwen yon gwo moso memwa pataje, benefis yo vini sèlman ak volim trè gwo. Si ou gen terabytes memwa, sa ka antre nan jwèt. Si nou ap pale de plis aplikasyon pou chak jou, lè ou gen 32, 64, 128, 256 GB memwa sou machin ou, Lè sa a, abityèl paj yo gwo se Ok, epi nou tou senpleman enfim Transparan.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Ak dènye bagay sou memwa pa dirèkteman gen rapò ak fruitut, li ka reyèlman ruine lavi ou. Tout debi pral afekte anpil pa lefèt ke sèvè a toujou ap echanje.

Lè sa a pral trè dezagreyab nan yon kantite fason. Ak pwoblèm prensipal la se ke nwayo modèn konpòte yon ti kras diferan de pi gran nwayo Linux. Ak bagay sa a se byen dezagreyab etap sou, paske lè nou pale sou kèk kalite travay ak swap, li fini ak arive a premature nan OOM-asasen an. Ak OOM-asasen an, ki pa t 'rive nan yon fason apwopriye ak tonbe PostgreSQL, se dezagreyab. Tout moun pral konnen sou sa a, se sa ki, jiska itilizatè a dènye.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Sak ap pase? Ou gen yon gwo kantite RAM la, tout bagay mache byen. Men, pou kèk rezon sèvè a pandye nan swap ak ralanti akòz sa a. Li ta sanble ke gen anpil memwa, men sa rive.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Anvan sa, nou te konseye pou mete vm.swappiness a zewo, sa vle di désactiver swap. Précédemment, li te sanble ke 32 GB RAM ak korespondan tanpon pataje te yon kantite lajan gwo. Objektif prensipal swap la se gen yon kote pou voye kwout la si nou tonbe. Epi li pa t 'ankò patikilyèman rive vre. Lè sa a, kisa ou pral fè ak kwout sa a? Sa a se yon travay kote li pa trè klè poukisa swap nesesè, espesyalman nan yon gwosè konsa.

Men, nan vèsyon ki pi modèn, sa vle di twazyèm nan nwayo a, konpòtman an chanje. Men, si ou mete swap a zewo, sa vle di fèmen li, Lè sa a, pi bonè oswa pita, menm si gen kèk RAM ki rete, yon asasen OOM ap vin jwenn ou touye konsomatè yo ki pi entansif. Paske li pral konsidere ke ak yon kantite travay konsa nou toujou gen yon ti kras kite epi nou pral sote soti, sa vle di, pa kloure pwosesis sistèm nan, men kloure desann yon bagay ki mwens enpòtan. Yon sèl sa a mwens enpòtan yo pral konsomatè a entansif nan memwa pataje, sètadi postmaster la. Apre sa, li pral bon si baz la pa oblije retabli.

Se poutèt sa, kounye a default la, osi lwen ke mwen sonje, pifò distribisyon yo se yon kote alantou 6, sa vle di nan ki pwen ou ta dwe kòmanse itilize swap depann sou konbyen memwa ki rete. Nou rekòmande kounye a mete vm.swappiness = 1, paske sa a pratikman fèmen li, men li pa bay efè yo menm jan ak yon OOM-asasen ki san atann rive epi touye tout bagay la.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Ki sa kap vini? Lè nou pale sou pèfòmans nan baz done ak piti piti deplase nan direksyon pou disk, tout moun kòmanse pwan tèt yo. Paske verite a ke disk la se ralanti ak memwa a se vit se abitye nan tout moun depi nan anfans. Ak tout moun konnen ke baz done a pral gen pwoblèm pèfòmans disk.

Pwoblèm prensipal pèfòmans PostgreSQL ki asosye ak pwen baraj yo pa rive paske disk la ralanti. Sa a gen plis chans akòz lefèt ke memwa ak Pleasant disk yo pa balanse. Sepandan, yo ka pa balanse nan diferan kote. PostgreSQL pa konfigirasyon, eksplwatasyon an pa konfigirasyon, pyès ki nan konpitè pa konfigirasyon epi pyès ki nan konpitè pa kòrèk. Ak pwoblèm sa a pa rive sèlman si tout bagay rive jan li ta dwe, sa vle di swa pa gen okenn chaj, oswa anviwònman yo ak pyès ki nan konpitè yo byen chwazi.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Ki sa li ye ak ki sa li sanble? Anjeneral moun ki travay ak PostgreSQL te antre nan zafè sa a plis pase yon fwa. Mwen pral eksplike. Kòm mwen te di, PostgreSQL detanzantan fè pòs pou jete paj sal nan memwa pataje sou disk. Si nou gen yon gwo kantite memwa pataje, Lè sa a, checkpoint kòmanse gen yon enpak entansif sou disk la, paske li jete paj sa yo ak fsync. Li rive nan tanpon nwayo a epi li ekri sou disk lè l sèvi avèk fsync. Men, si volim nan biznis sa a gwo, Lè sa a, nou ka obsève yon efè dezagreyab, sètadi yon itilizasyon trè gwo nan disk.

Isit la mwen gen de foto. Kounye a mwen pral eksplike sa li ye. Sa yo se de graf ki gen rapò ak tan. Premye graf la se itilizasyon disk. Isit la li rive nan prèske 90% nan pwen sa a nan tan. Si ou gen yon echèk baz done ak disk fizik, ak yon itilizasyon kontwolè RAID nan 90%, Lè sa a, sa a se move nouvèl. Sa vle di ke yon ti kras plis epi li pral rive nan 100 ak I / O a ap sispann.

Si ou gen yon etalaj ki gen kapasite, Lè sa a, li se yon istwa yon ti kras diferan. Sa depann de ki jan li konfigirasyon, ki kalite etalaj li ye, elatriye.

Ak nan paralèl, yon graf ki soti nan View postgres entèn la configuré isit la, ki di ki jan pòs la rive. Ak koulè vèt isit la montre konbyen tanpon, paj sa yo sal, nan moman sa a te rive nan pòs sa a pou senkronizasyon. Lè sa a se bagay prensipal ou bezwen konnen isit la. Nou wè ke nou gen anpil paj isit la ak nan kèk pwen nou frape tablo a, se sa ki, nou te ekri ak ekri, isit la sistèm nan disk se klèman trè okipe. Ak pòs nou an gen yon enpak trè fò sou disk la. Idealman, sitiyasyon an ta dwe sanble plis tankou sa a, sa vle di nou te gen mwens anrejistreman isit la. Epi nou ka ranje li ak anviwònman yo pou ke li pral kontinye tankou sa a. Sa vle di, resiklaj la piti, men yon kote nou ap ekri yon bagay isit la.

Ki sa ki bezwen fè pou simonte pwoblèm sa a? Si ou te sispann IO anba baz done a, sa vle di ke tout itilizatè ki te vin satisfè demann yo ap tann.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Si ou gade nan pwen de vi Linux, si ou te pran bon pyès ki nan konpitè, konfigirasyon li kòrèkteman, configuré PostgreSQL nòmalman pou li fè pòs sa yo mwens souvan, gaye yo sou tan youn ak lòt, Lè sa a, ou antre nan paramèt Debian yo default. Pou pifò distribisyon Linux, sa a se foto a: vm.dirty_ratio=20, vm.dirty_background_ratio=10.

Sa sa vle di? Yon demon ki koule parèt nan nwayo 2.6. Pdglush, tou depann de ki moun ki sèvi ak ki, ki angaje nan jete background nan paj sal nan tanpon nwayo a ak jete lè li nesesè jete paj sal kèlkeswa sa, lè jete backgrouind pa ede.

Ki lè background vini? Lè 10% nan RAM total ki disponib sou sèvè a okipe pa paj sal nan tanpon nwayo a, yo rele yon fonksyon espesyal ekri nan background nan. Poukisa li background? Kòm yon paramèt, li pran an kont konbyen paj yo ekri. Epi, ann di, li ekri N paj. Epi pou yon ti tan bagay sa a tonbe nan dòmi. Apre sa, li vini ankò epi li kopye kèk paj ankò.

Sa a se yon istwa trè senp. Pwoblèm nan isit la se tankou ak yon pisin, lè li vide nan yon tiyo, li koule nan yon lòt. Pwen kontwòl nou an te rive epi si li te voye kèk paj sal pou jete, Lè sa a, piti piti tout bagay la pral byen rezoud soti nan tanpon nwayo pgflush la.

Si paj sal sa yo kontinye akimile, yo akimile jiska 20%, apre sa priyorite OS la se ekri tout bagay la sou disk la, paske pouvwa a ap febli ak tout bagay pral move pou nou. Nou pral pèdi done sa yo, pou egzanp.

Ki trik la? Trick a se ke paramèt sa yo nan mond lan modèn yo se 20 ak 10% nan total RAM ki sou machin nan, yo se absoliman kolosal an tèm de debi a nan nenpòt ki sistèm disk ke ou genyen.

Imajine ou gen 128 GB RAM. 12,8 GB rive nan sistèm disk ou a. E pa gen pwoblèm sa kachèt ou genyen la, kèlkeswa etalaj ou genyen la, yo pa pral dire lontan.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Se poutèt sa, nou rekòmande pou ou imedyatman ajiste nimewo sa yo dapre kapasite kontwolè RAID ou a. Mwen imedyatman te fè yon rekòmandasyon isit la pou yon kontwolè ki gen 512 MB nan kachèt.

Tout bagay konsidere kòm trè senp. Ou ka mete vm.dirty_background nan bytes. Ak paramèt sa yo anile de anvan yo. Swa rapò se pa default, oswa moun ki gen bytes yo aktive, Lè sa a, moun ki gen bytes ap travay. Men, depi mwen se yon konsiltan DBA ak travay ak kliyan diferan, mwen eseye trase pay ak Se poutèt sa, si nan bytes, Lè sa a, nan bytes. Pa gen moun ki te bay okenn garanti ke yon bon admin pa ta ajoute plis memwa nan sèvè a, rdemare li, ak figi a ta rete menm jan an. Jis kalkile nimewo sa yo pou tout bagay anfòm nan la ak yon garanti.

Kisa k ap pase si ou pa anfòm? Mwen te ekri ke nenpòt flushing efektivman sispann, men an reyalite sa a se yon figi nan lapawòl. Sistèm operasyon an gen yon gwo pwoblèm - li gen anpil paj sal, kidonk IO ke kliyan ou yo jenere efektivman sispann, sa vle di aplikasyon an te vin voye yon rechèch sql nan baz done a, li ap tann. Nenpòt opinyon/sòti nan li se pi ba priyorite, paske baz done a okipe pa yon pòs. Ak lè li pral fini li se konplètman klè. Men, lè ou te reyalize ki pa flòch background, sa vle di ke tout IO ou okipe pa li. Epi jiskaske li fini, ou pa pral fè anyen.

Genyen de pwen ki pi enpòtan isit la ki depase limit rapò sa a. Anviwònman sa yo ta dwe matche ak anviwònman yo nan postgresql.conf, sa vle di paramèt baraj yo. Ak sistèm disk ou a dwe byen konfigirasyon. Si ou gen yon kachèt sou yon ATAK, Lè sa a, li dwe gen yon batri. Moun achte RAID ak bon kachèt san yon batri. Si ou gen SSD nan RAID, Lè sa a, yo dwe sèvè yo, dwe gen kondansateur la. Isit la se yon lis verifikasyon detaye. Lyen sa a gen rapò mwen sou kòman yo konfigirasyon yon disk pèfòmans nan PostgreSQL. Genyen tout lis verifikasyon sa yo la.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Ki lòt bagay ki ka fè lavi trè difisil? Sa yo se de paramèt. Yo relativman nouvo. Pa default, yo ka enkli nan aplikasyon diferan. Apre sa, yo ka fè lavi menm jan difisil si yo vire sou mal.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Gen de bagay relativman nouvo. Yo te deja parèt nan nwayo twazyèm yo. Sa a se sched_migration_cost an nanosegond ak sched_autogroup_enabled, ki se youn pa default.

Ak ki jan yo kraze lavi ou? Ki sa ki sched_migration_cost? Sou Linux, pwogramè a ka imigre yon pwosesis soti nan yon CPU nan yon lòt. Ak pou PostgreSQL, ki egzekite demann, migrasyon nan yon lòt CPU se konplètman klè. Soti nan yon sistèm opere pwen de vi, lè ou chanje fenèt ant openoffice ak tèminal, sa a ka bon, men pou yon baz done sa a se trè move. Se poutèt sa, yon politik rezonab se mete migration_cost nan kèk gwo valè, omwen plizyè mil nanosgond.

Kisa sa pral vle di pou pwogramè? Li pral konsidere ke pandan tan sa a pwosesis la toujou cho. Sa vle di, si ou gen yon tranzaksyon ki dire lontan ki te fè yon bagay pou yon tan long, orè a pral konprann sa a. Li pral asime ke jiskaske tan sa a pase, pa gen okenn nesesite pou imigre pwosesis sa a nenpòt kote. Si an menm tan an pwosesis la fè yon bagay, Lè sa a, li pa pral imigre nenpòt kote, li pral tou dousman travay sou CPU a ki te resevwa lajan pou li. Ak rezilta a se ekselan.

Dezyèm pwen an se otogroup. Gen yon bon lide pou chaj travay espesifik ki pa gen rapò ak baz done modèn - sa a se gwoup pwosesis pa tèminal la vityèl ki soti nan kote yo te lanse. Sa a se pratik pou kèk travay. Nan pratik, PostgreSQL se yon sistèm milti-pwosesis ak yon prefork ki kouri soti nan yon sèl tèminal. Ou gen yon ekriven fèmen, pòs, ak tout demann kliyan ou yo pral gwoupe nan yon sèl orè, pou chak CPU. Apre sa, yo pral tann la nan inison pou l 'lib, yo nan lòd yo entèfere youn ak lòt epi kenbe l' okipe pi lontan. Sa a se yon istwa ki konplètman nesesè nan ka a nan yon chaj konsa ak Se poutèt sa li bezwen yo dwe etenn.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Kolèg mwen an Alexey Lesovsky te fè tès ak yon senp pgbench, kote li te ogmante migration_cost pa yon lòd de grandè epi li fèmen otogroup. Diferans lan sou move pyès ki nan konpitè te prèske 10%. Gen yon diskisyon sou lis adrès postgres kote moun bay rezilta chanjman ki sanble ak vitès rechèch la enfliyanse 50%. Gen anpil istwa konsa.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Epi finalman, sou politik ekonomize pouvwa. Bon bagay la se ke Linux ka kounye a dwe itilize sou yon laptop. Epi li pral sipozeman itilize batri a byen. Men, toudenkou li sanble ke sa a ka rive tou sou sèvè a.

Anplis, si ou lwe serveurs nan kèk hoster, Lè sa a, "bon" hosters yo pa pran swen ke ou gen pi bon pèfòmans. Travay yo se asire ke fè yo itilize kòm efikasite ke posib. Se poutèt sa, pa default yo ka pèmèt mòd ekonomize pouvwa laptop sou sistèm nan fonksyone.

Si ou itilize bagay sa yo sou yon sèvè ak yon baz done anba chaj lou, lè sa a chwa ou se acpi_cpufreq + permormance. Menm ak ondemand pral gen pwoblèm.

Intel_pstate se yon chofè yon ti kras diferan. Epi, koulye a yo bay preferans sa a, kòm li se pita epi li travay pi byen.

Epi, kòmsadwa, gouvènè se sèlman pèfòmans. Ondemand, powersave ak tout lòt bagay yo pa sou ou.

Rezilta eksplike analiz PostgreSQL ka diferan nan plizyè lòd si ou pèmèt powersave, paske pratikman CPU a anba baz done ou a ap kouri nan yon fason konplètman enprevizib.

Atik sa yo ka enkli pa default. Gade ak anpil atansyon pou wè si yo te vire li pa default. Sa a se kapab yon pwoblèm vrèman gwo.

Akor Linux pou amelyore pèfòmans PostgreSQL. Ilya Kosmodemyansky

Epi finalman, mwen te vle di mesye yo nan ekip DBA PosgreSQL-Consulting nou an, sètadi Max Boguk ak Alexey Lesovsky, k ap fè pwogrè nan zafè sa a mèsi chak jou. Epi nou eseye fè pi byen nou kapab pou kliyan nou yo pou ke li tout travay pou yo. Se tankou ak enstriksyon sekirite avyasyon. Tout bagay isit la ekri nan san. Chak nan nwa sa yo jwenn nan pwosesis la nan kèk kalite pwoblèm. Mwen kontan pataje yo avèk ou.

Kesyon:

Mèsi! Si, pou egzanp, yon konpayi vle ekonomize lajan epi mete baz done a ak lojik aplikasyon sou yon sèl sèvè, oswa si konpayi an swiv tandans alamòd nan achitekti mikwosèvis, nan ki PostgreSQL kouri nan yon veso. Ki trik la? Sysctl pral afekte tout nwayo a globalman. Mwen pa tande pale de sysctls yo te yon jan kanmenm virtualize pou yo travay separeman sou yon veso. Gen sèlman yon cgroup epi gen sèlman yon pati nan kontwòl la la. Ki jan ou ka viv ak sa a? Oswa si ou vle pèfòmans, Lè sa a, kouri PostgreSQL sou yon sèvè pyès ki nan konpitè separe epi melodi li?

Nou reponn kesyon ou a nan apeprè twa fason. Si nou pa pale de yon sèvè pyès ki nan konpitè ki ka branche, elatriye, Lè sa a, detann, tout bagay ap travay byen san yo pa anviwònman sa yo. Si ou gen yon chaj konsa ke ou bezwen fè anviwònman sa yo, Lè sa a, ou pral vin nan sèvè a fè pi bonè pase nan anviwònman sa yo.

Kisa pwoblèm nan ye? Si sa a se yon machin vityèl, Lè sa a, gen plis chans ou pral gen anpil pwoblèm, pou egzanp, ak lefèt ke sou pifò machin vityèl latansi a nan disk la se byen konsistan. Menm si debi a ki gen kapasite bon, Lè sa a, yon sèl tranzaksyon I/O echwe ki pa afekte anpil debi an mwayèn ki te rive nan moman an nan pòs kontwòl oswa nan moman an ekri nan WAL, Lè sa a, baz done a pral soufri anpil nan sa a. Epi ou pral remake sa anvan ou kouri nan pwoblèm sa yo.

Si w gen NGINX sou menm sèvè a, w ap gen menm pwoblèm nan tou. Li pral goumen pou memwa pataje. Epi ou pa pral jwenn pwoblèm ki dekri isit la.

Men, nan lòt men an, kèk nan paramèt sa yo ap toujou enpòtan pou ou. Pou egzanp, mete dirty_ratio ak sysctl pou li pa tèlman fou - nan nenpòt ka, sa a pral ede. Yon fason oswa yon lòt, ou pral gen entèraksyon ak disk la. Epi li pral selon modèl la mal. Sa a se jeneralman yon default pou paramèt yo ke mwen te montre. Ak nan nenpòt ka li se pi bon chanje yo.

Men, ka gen pwoblèm ak NUMA. VmWare, pou egzanp, travay byen ak NUMA ak egzakteman anviwònman yo opoze. Ak isit la ou gen yo chwazi - yon sèvè fè oswa yon sèl ki pa fè.

Mwen gen yon kesyon ki gen rapò ak Amazon AWS. Yo gen imaj pre-configuré. Youn nan yo rele Amazon RDS. Èske gen nenpòt anviwònman koutim pou sistèm opere yo?

Gen anviwònman la, men yo se anviwònman diferan. Isit la nou konfigirasyon sistèm operasyon an an tèm de ki jan baz done a pral sèvi ak bagay sa a. Epi gen paramèt ki detèmine kote nou ta dwe ale kounye a, tankou fòm. Sa vle di, nou bezwen anpil resous, kounye a nou pral manje yo. Apre sa, Amazon RDS ranforsi resous sa yo, ak pèfòmans gout la. Gen istwa endividyèl sou fason moun yo kòmanse dezòd ak zafè sa a. Pafwa menm byen avèk siksè. Men, sa a pa gen anyen fè ak anviwònman OS. Se tankou pirate nwaj la. Sa se yon istwa diferan.

Poukisa paj transparan gwo pa gen okenn efè konpare ak Huge TLB?

pa bay. Sa a ka eksplike nan plizyè fason. Men, an reyalite yo tou senpleman pa bay li. Ki istwa PostgreSQL? Nan demaraj, li asiyen yon gwo moso memwa pataje. Kit yo transparan oswa ou pa se konplètman petinan. Lefèt ke yo kanpe deyò nan kòmansman an eksplike tout bagay. Men, si gen anpil memwa epi ou bezwen rebati segman shared_memory la, Lè sa a, paj transparan gwo yo pral enpòtan. Nan PostgreSQL, li tou senpleman resevwa lajan nan yon gwo moso nan kòmansman an e se li, epi Lè sa a, pa gen anyen espesyal k ap pase la. Ou ka, nan kou, sèvi ak li, men gen yon chans pou jwenn yon koripsyon nan shared_memory lè li re-afye yon bagay. PostgreSQL pa konnen sou sa.

Sous: www.habr.com

Add nouvo kòmantè