Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Mo daba pe ki o ka iwe afọwọkọ ti ijabọ naa lati ibẹrẹ ọdun 2016 nipasẹ Andrey Salnikov “Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql”

Ninu ijabọ yii, Emi yoo ṣe itupalẹ awọn aṣiṣe akọkọ ni awọn ohun elo ti o dide ni ipele ti apẹrẹ ati kikọ koodu ohun elo. Ati pe Emi yoo gba awọn aṣiṣe wọnyẹn ti o yori si bloat ni Postgresql. Gẹgẹbi ofin, eyi ni ibẹrẹ ti ipari iṣẹ ṣiṣe ti eto rẹ lapapọ, botilẹjẹpe lakoko ko si awọn ibeere pataki fun eyi ti o han.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Dun lati ku gbogbo eniyan! Ijabọ yii kii ṣe imọ-ẹrọ bii ti iṣaaju lati ọdọ ẹlẹgbẹ mi. Ijabọ yii jẹ ifọkansi pataki si awọn olupilẹṣẹ eto ẹhin nitori a ni nọmba ti o tobi pupọ ti awọn alabara. Ati pe gbogbo wọn ṣe awọn aṣiṣe kanna. Emi yoo sọ fun ọ nipa wọn. Emi yoo ṣalaye kini apaniyan ati awọn ohun buburu ti awọn aṣiṣe wọnyi ja si.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Kini idi ti awọn aṣiṣe ṣe? Wọn ṣe fun awọn idi meji: ni ID, boya yoo ṣiṣẹ jade ati nitori aimọkan ti diẹ ninu awọn ilana ti o waye ni ipele laarin ibi ipamọ data ati ohun elo, ati ninu aaye data funrararẹ.

Emi yoo fun ọ ni apẹẹrẹ mẹta pẹlu awọn aworan ẹru ti bii awọn nkan buburu ṣe gba. Emi yoo sọ fun ọ ni ṣoki nipa siseto ti o ṣẹlẹ nibẹ. Ati bi o ṣe le ṣe pẹlu wọn, nigbati wọn ṣẹlẹ, ati awọn ọna idena lati lo lati yago fun awọn aṣiṣe. Emi yoo sọ fun ọ nipa awọn irinṣẹ iranlọwọ ati pese awọn ọna asopọ to wulo.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Mo ti lo a igbeyewo database ibi ti mo ti ní meji tabili. Awo kan pẹlu awọn akọọlẹ onibara, ekeji pẹlu awọn iṣowo lori awọn akọọlẹ wọnyi. Ati pẹlu diẹ ninu awọn igbohunsafẹfẹ a mu awọn iwọntunwọnsi lori wọnyi awọn iroyin.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ni ibẹrẹ data ti awọn awo: o jẹ ohun kekere, 2 MB. Akoko idahun fun ibi ipamọ data ati pataki fun ami naa tun dara pupọ. Ati fifuye ti o dara to dara - awọn iṣẹ 2 fun iṣẹju kan ni ibamu si awo.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ati nipasẹ ijabọ yii Emi yoo fi awọn aworan han ọ ki o le ni oye ohun ti n ṣẹlẹ ni kedere. Awọn ifaworanhan 2 nigbagbogbo yoo wa pẹlu awọn aworan. Ifaworanhan akọkọ jẹ ohun ti o ṣẹlẹ ni gbogbogbo lori olupin naa.

Ati ni ipo yii, a rii pe a ni ami kekere kan gaan. Atọka jẹ kekere ni 2 MB. Eleyi jẹ akọkọ awonya lori osi.

Awọn apapọ esi akoko lori olupin jẹ tun idurosinsin ati kukuru. Eyi ni iwọn apa ọtun oke.

Isalẹ osi awonya fihan awọn gunjulo lẹkọ. A rii pe awọn iṣowo ti pari ni kiakia. Ati pe autovacuum ko ṣiṣẹ nibi sibẹsibẹ, nitori pe o jẹ idanwo ibẹrẹ. Yoo tẹsiwaju lati ṣiṣẹ ati pe yoo wulo fun wa.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ifaworanhan keji yoo ma jẹ igbẹhin nigbagbogbo si awo ti n ṣe idanwo. Ni ipo yii, a ṣe imudojuiwọn awọn iwọntunwọnsi akọọlẹ alabara nigbagbogbo. Ati pe a rii pe akoko idahun apapọ fun iṣẹ imudojuiwọn jẹ ohun ti o dara, o kere ju millisecond kan. A rii pe awọn orisun ero isise (eyi ni iwọn apa ọtun oke) tun jẹ run boṣeyẹ ati kekere.

Ẹya apa ọtun isalẹ fihan iye iṣẹ ṣiṣe ati iranti disk ti a lọ nipasẹ wiwa laini ti o fẹ ṣaaju mimu dojuiwọn. Ati nọmba awọn iṣẹ ni ibamu si ami naa jẹ 2 fun iṣẹju kan, bi mo ti sọ ni ibẹrẹ.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ati nisisiyi a ni ajalu kan. Fun idi kan idunadura igbagbe pipẹ wa. Awọn idi nigbagbogbo jẹ gbogbo banal:

  • Ọkan ninu eyiti o wọpọ julọ ni pe a bẹrẹ iraye si iṣẹ ita ni koodu ohun elo. Ati pe iṣẹ yii ko dahun wa. Iyẹn ni, a ṣii idunadura kan, ṣe iyipada ninu ibi ipamọ data ati lọ lati inu ohun elo lati ka meeli tabi si iṣẹ miiran laarin awọn amayederun wa, ati fun idi kan ko dahun si wa. Ati pe igba ipade wa ti di ni ipo kan nibiti a ko mọ nigba ti yoo yanju.
  • Ipo keji jẹ nigbati imukuro waye ninu koodu wa fun idi kan. Ati ni iyatọ a ko ṣe ilana tiipa ti iṣowo naa. Ati pe a pari pẹlu igba ikele pẹlu idunadura ṣiṣi.
  • Ati awọn ti o kẹhin jẹ tun kan iṣẹtọ wọpọ nla. Eyi jẹ koodu didara kekere. Diẹ ninu awọn ilana ṣii idunadura kan. O kọorí, ati pe o le ma mọ ninu ohun elo naa pe o ni ikele.

Ibo ni irú àwọn nǹkan bẹ́ẹ̀ ń yọrí sí?

Si aaye ti awọn tabili ati awọn atọka wa bẹrẹ lati wú pupọ. Eyi jẹ gangan ipa bloat kanna. Fun ibi ipamọ data, eyi yoo tumọ si pe akoko idahun data data yoo pọ si pupọ ati fifuye lori olupin data yoo pọ si. Ati bi abajade, ohun elo wa yoo jiya. Nitori ti o ba lo 10 milliseconds ninu koodu rẹ lori ibeere si ibi ipamọ data, 10 milliseconds lori ọgbọn rẹ, lẹhinna iṣẹ rẹ gba 20 milliseconds lati pari. Ati nisisiyi ipo rẹ yoo jẹ ibanujẹ pupọ.

Ati jẹ ki a wo ohun ti o ṣẹlẹ. Isalẹ osi awonya fihan wipe a ni a gun gun idunadura. Ati pe ti a ba wo awọn aworan apa osi oke, a rii pe iwọn tabili wa ti fo lojiji lati megabyte meji si 300 megabyte. Ni akoko kanna, iye data ti o wa ninu tabili ko yipada, ie iye idoti ti o tobi pupọ wa nibẹ.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ipo gbogbogbo nipa akoko idahun olupin apapọ ti tun yipada nipasẹ awọn aṣẹ titobi pupọ. Iyẹn ni, gbogbo awọn ibeere lori olupin bẹrẹ si silẹ patapata. Ati ni akoko kanna, awọn ilana Postgres ti inu ni a ṣe ifilọlẹ ni irisi autovacuum, eyiti o n gbiyanju lati ṣe nkan kan ati jijẹ awọn orisun.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Kini o n ṣẹlẹ pẹlu ami wa? Ikan na. Akoko idahun apapọ wa ni ibamu si ami naa ti fo soke ọpọlọpọ awọn aṣẹ titobi. Ni pataki ni awọn ofin ti awọn orisun ti o jẹ, a rii pe fifuye lori ero isise naa ti pọ si pupọ. Eyi ni iwọn apa ọtun oke. Ati pe o ti pọ si nitori ero isise naa ni lati to lẹsẹsẹ nipasẹ opo ti awọn laini asan ni wiwa eyi ti o nilo. Eyi ni isale ọtun awonya. Ati bi abajade, nọmba awọn ipe wa fun iṣẹju-aaya bẹrẹ si ju silẹ pupọ, nitori data data ko ni akoko lati ṣe ilana nọmba kanna ti awọn ibeere.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

A nilo lati pada si aye. A lọ lori ayelujara ati rii pe awọn iṣowo gigun ja si awọn iṣoro. A wa ati pa idunadura yii. Ati pe ohun gbogbo ti di deede fun wa. Ohun gbogbo ṣiṣẹ bi o ti yẹ.

A tunu, ṣugbọn lẹhin igba diẹ a bẹrẹ lati ṣe akiyesi pe ohun elo ko ṣiṣẹ ni ọna kanna bi ṣaaju pajawiri naa. Awọn ibeere ti wa ni ṣi ilọsiwaju losokepupo, ati significantly losokepupo. Ọkan ati idaji si igba meji losokepupo ni pato ninu apẹẹrẹ mi. Awọn fifuye lori olupin jẹ tun ga ju ti o wà ṣaaju ki o to ijamba.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ati ibeere naa: “Kini n ṣẹlẹ si ipilẹ ni akoko yii?” Ati pe ipo atẹle naa waye pẹlu ipilẹ. Lori chart idunadura o le rii pe o ti duro ati pe ko si awọn iṣowo igba pipẹ gaan. Ṣugbọn iwọn ami naa ni apaniyan pọ si lakoko ijamba naa. Ati pe lati igba naa wọn ko dinku. Awọn apapọ akoko lori mimọ ti diduro. Ati pe awọn idahun dabi pe o nbọ ni deede ni iyara ti o ṣe itẹwọgba fun wa. Awọn autovacuum di diẹ lọwọ ati ki o bẹrẹ lati se nkankan pẹlu awọn ami, nitori ti o nilo lati sift nipasẹ diẹ data.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ni pataki, ni ibamu si awo idanwo pẹlu awọn akọọlẹ, nibiti a ti yipada awọn iwọntunwọnsi: akoko idahun fun ibeere kan dabi pe o ti pada si deede. Sugbon ni otito, o jẹ ọkan ati idaji igba ti o ga.

Ati lati fifuye lori ero isise, a rii pe fifuye lori ero isise naa ko ti pada si iye ti a beere ṣaaju jamba naa. Ati awọn idi ti o wa nibẹ wa ni pipe ni iwọn apa ọtun isalẹ. O le rii pe iye iranti kan ti wa ni wiwa nibẹ. Iyẹn ni, lati wa laini ti o nilo, a padanu awọn orisun ti olupin data lakoko titọ lẹsẹsẹ nipasẹ data asan. Nọmba awọn iṣowo fun iṣẹju-aaya ti duro.

Iwoye dara, ṣugbọn ipo naa buru ju ti o lọ. Ko ibajẹ data kuro bi abajade ohun elo wa ti o ṣiṣẹ pẹlu data data yii.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ati lati ni oye ohun ti n ṣẹlẹ nibẹ, ti o ko ba wa ni iroyin ti tẹlẹ, bayi jẹ ki a ni imọran diẹ. Yii nipa awọn ti abẹnu ilana. Kini idi ti igbale ọkọ ayọkẹlẹ ati kini o ṣe?

Ni ṣoki ni ṣoki fun oye. Ni diẹ ninu awọn ojuami ni akoko ti a ni a tabili. A ni awọn ori ila ni tabili. Awọn ila wọnyi le ṣiṣẹ, laaye, ati ohun ti a nilo ni bayi. Wọn ti samisi ni alawọ ewe ni aworan. Ati pe awọn laini ti o ku ti o ti ṣiṣẹ tẹlẹ, ti ni imudojuiwọn, ati awọn titẹ sii tuntun ti han lori wọn. Ati pe wọn ti samisi pe wọn ko nifẹ si aaye data mọ. Ṣugbọn wọn wa ninu tabili nitori ẹya Postgres kan.

Kini idi ti o nilo igbale ọkọ ayọkẹlẹ kan? Ni aaye kan, autovacuum wa, wọle si ibi ipamọ data o si beere lọwọ rẹ: “Jọwọ fun mi ni id ti idunadura atijọ ti o ṣii lọwọlọwọ ni aaye data.” Awọn database pada yi id. Ati awọn autovacuum, gbigbe ara lori o, lẹsẹsẹ nipasẹ awọn ila ni tabili. Ati pe ti o ba rii pe diẹ ninu awọn laini ti yipada nipasẹ awọn iṣowo agbalagba pupọ, lẹhinna o ni ẹtọ lati samisi wọn bi awọn laini ti a le tun lo ni ọjọ iwaju nipa kikọ data tuntun nibẹ. Eyi jẹ ilana isale.

Ni akoko yii, a tẹsiwaju lati ṣiṣẹ pẹlu ibi ipamọ data ati tẹsiwaju lati ṣe awọn ayipada diẹ si tabili. Ati lori awọn ila wọnyi, eyiti a le tun lo, a kọ data tuntun. Ati pe nitorinaa a gba iyipo, ie ni gbogbo igba diẹ ninu awọn laini atijọ ti o ku han nibẹ, dipo wọn a kọ awọn ila tuntun ti a nilo. Ati pe eyi jẹ ipo deede fun PostgreSQL lati ṣiṣẹ.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Kini o ṣẹlẹ lakoko ijamba naa? Bawo ni ilana yii ṣe ṣẹlẹ nibẹ?

A ni ami kan ni diẹ ninu awọn ipo, diẹ ninu laaye, diẹ ninu awọn laini ti o ku. Igbale ọkọ ayọkẹlẹ ti de. O beere aaye data kini iṣowo iṣowo atijọ wa ati kini id rẹ jẹ. Mo gba id yii, eyiti o le jẹ awọn wakati pupọ sẹhin, boya iṣẹju mẹwa sẹhin. O da lori bii ẹru ti o wuwo ti o ni lori data data rẹ. O si lọ nwa awọn ila ti o le samisi bi atunlo. Ati pe Emi ko rii iru awọn ila bẹ ninu tabili wa.

Ṣugbọn ni akoko yii a tẹsiwaju lati ṣiṣẹ pẹlu tabili. A ṣe ohun kan ninu rẹ, ṣe imudojuiwọn, yi data pada. Kini o yẹ ki ibi ipamọ data ṣe ni akoko yii? Ko ni yiyan bikoṣe lati ṣafikun awọn ila tuntun si opin tabili ti o wa tẹlẹ. Ati bayi iwọn tabili wa bẹrẹ lati wú.

Ni otito, a nilo awọn ila alawọ ewe lati ṣiṣẹ. Ṣugbọn lakoko iru iṣoro bẹ, o han pe ipin ogorun awọn ila alawọ ewe jẹ iwọn kekere jakejado gbogbo tabili.

Ati pe nigba ti a ba ṣe ibeere kan, data data gbọdọ lọ nipasẹ gbogbo awọn ila: mejeeji pupa ati awọ ewe, lati wa laini ti o fẹ. Ati ipa ti bloating tabili pẹlu data asan ni a pe ni “bloat”, eyiti o tun jẹ aaye aaye disk wa. Ranti, o jẹ 2 MB, o di 300 MB? Bayi yipada megabyte si gigabytes ati pe iwọ yoo yara padanu gbogbo awọn orisun disk rẹ.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Awọn abajade wo ni o le jẹ fun wa?

  • Ni apẹẹrẹ mi, tabili ati atọka dagba ni igba 150. Diẹ ninu awọn alabara wa ti ni awọn ọran apaniyan diẹ sii nigbati wọn kan bẹrẹ ṣiṣe jade ni aaye disk.
  • Iwọn awọn tabili funrararẹ kii yoo dinku. Aifọwọyi ni awọn igba miiran le ge iru tabili kuro ti awọn laini ti o ku nikan ba wa. Ṣugbọn niwọn igba ti iyipo igbagbogbo wa, laini alawọ kan le didi ni ipari ati pe ko ṣe imudojuiwọn, lakoko ti gbogbo awọn miiran yoo kọ silẹ ni ibikan ni ibẹrẹ awo naa. Ṣugbọn eyi jẹ iru iṣẹlẹ ti ko ṣeeṣe pe tabili rẹ funrararẹ yoo dinku ni iwọn, nitorinaa o ko yẹ ki o nireti rẹ.
  • Ibi ipamọ data nilo lati to lẹsẹsẹ nipasẹ gbogbo opo ti awọn laini asan. Ati awọn ti a egbin disk oro, a egbin isise oro ati ina.
  • Ati pe eyi ni ipa taara ohun elo wa, nitori ti o ba jẹ pe ni ibẹrẹ a lo 10 milliseconds lori ibeere, 10 milliseconds lori koodu wa, lẹhinna lakoko jamba a bẹrẹ lati lo iṣẹju-aaya kan lori ibeere ati 10 milliseconds lori koodu, ie aṣẹ ti titobi ni iṣẹ ohun elo dinku. Ati nigbati awọn ijamba ti a ti yanjú, a bẹrẹ lati na 20 milliseconds lori kan ìbéèrè, 10 milliseconds on a koodu. Eyi tumọ si pe a tun lọ silẹ nipasẹ awọn akoko kan ati idaji ni iṣelọpọ. Ati pe eyi jẹ gbogbo nitori iṣowo kan ti o didi, boya nipasẹ ẹbi wa.
  • Ati ibeere naa: “Bawo ni a ṣe le gba ohun gbogbo pada?” Ki ohun gbogbo dara pẹlu wa ati awọn ibeere wa ni yarayara bi ṣaaju ijamba naa.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Fun idi eyi o wa ni kan awọn ọmọ ti ise ti o ti wa ni ti gbe jade.

Ni akọkọ a nilo lati wa awọn tabili iṣoro ti o jẹ bloated. A ye wa pe ni diẹ ninu awọn tabili igbasilẹ naa n ṣiṣẹ diẹ sii, ni awọn miiran ko ṣiṣẹ. Ati fun eyi a lo itẹsiwaju pgstattuple. Nipa fifi itẹsiwaju yii sori ẹrọ, o le kọ awọn ibeere ti yoo ṣe iranlọwọ fun ọ lati wa awọn tabili ti o gbin pupọ.

Ni kete ti o ba ti rii awọn tabili wọnyi, o nilo lati compress wọn. Awọn irinṣẹ tẹlẹ wa fun eyi. Ninu ile-iṣẹ wa a lo awọn irinṣẹ mẹta. Akọkọ jẹ VACUUM FULL ti a ṣe sinu rẹ. O jẹ ika, lile ati alaanu, ṣugbọn nigba miiran o wulo pupọ. Pg_repack и pgcompacttable - Iwọnyi jẹ awọn ohun elo ẹni-kẹta fun titẹ awọn tabili. Ati pe wọn tọju ibi ipamọ data diẹ sii daradara.

Wọn ti lo da lori ohun ti o rọrun diẹ sii fun ọ. Ṣugbọn Emi yoo sọ fun ọ nipa eyi ni ipari. Ohun akọkọ ni pe awọn irinṣẹ mẹta wa. Ọpọlọpọ wa lati yan lati.

Lẹhin ti a ti ṣe atunṣe ohun gbogbo ati rii daju pe ohun gbogbo dara, a gbọdọ mọ bi a ṣe le ṣe idiwọ ipo yii ni ọjọ iwaju:

  • O le ni idaabobo oyimbo awọn iṣọrọ. O nilo lati se atẹle iye akoko awọn akoko lori olupin Titunto. Paapa lewu igba ni laišišẹ ni idunadura ipinle. Awọn wọnyi ni awọn ti o kan ṣii idunadura kan, ṣe nkan kan ti o fi silẹ, tabi nirọrun nirọrun, ti sọnu ni koodu naa.
  • Ati fun ọ, bi awọn olupilẹṣẹ, o ṣe pataki lati ṣe idanwo koodu rẹ nigbati awọn ipo wọnyi ba dide. Ko ṣoro lati ṣe. Eyi yoo jẹ ayẹwo ti o wulo. Iwọ yoo yago fun nọmba nla ti awọn iṣoro “ọmọ” ti o ni nkan ṣe pẹlu awọn iṣowo gigun.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ninu awọn aworan wọnyi, Mo fẹ lati fihan ọ bi ami naa ati ihuwasi ti data ṣe yipada lẹhin ti Mo lọ nipasẹ ami pẹlu VACUUM FULL ninu ọran yii. Eyi kii ṣe iṣelọpọ fun mi.

Iwọn tabili naa pada lẹsẹkẹsẹ si ipo iṣẹ deede ti megabyte meji kan. Eyi ko ni ipa pupọ ni akoko idahun apapọ fun olupin naa.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ṣugbọn pataki fun ami idanwo wa, nibiti a ti ṣe imudojuiwọn awọn iwọntunwọnsi akọọlẹ, a rii pe akoko idahun apapọ fun ibeere lati ṣe imudojuiwọn data ninu ami naa ti dinku si awọn ipele pajawiri-tẹlẹ. Awọn orisun ti o jẹ nipasẹ ero isise lati pari ibeere yii tun lọ silẹ si awọn ipele iṣaju-ijamba. Ati awọn aworan apa ọtun isalẹ fihan pe ni bayi a rii laini gangan ti a nilo lẹsẹkẹsẹ, laisi lilọ nipasẹ awọn opo ti awọn ila ti o ku ti o wa nibẹ ṣaaju ki tabili ti fisinuirindigbindigbin. Ati apapọ akoko ibeere wa ni isunmọ ipele kanna. Ṣugbọn nibi Mo ni, dipo, aṣiṣe ninu ohun elo mi.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Eyi ni ibi ti itan akọkọ pari. O jẹ wọpọ julọ. Ati pe o ṣẹlẹ si gbogbo eniyan, laibikita iriri alabara ati bawo ni awọn olupilẹṣẹ ṣe yẹ. Laipẹ tabi ya eyi yoo ṣẹlẹ.

Itan keji, ninu eyiti a pin kaakiri fifuye ati mu awọn orisun olupin pọ si

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

  • A ti dagba tẹlẹ ati di awọn eniyan pataki. Ati pe a loye pe a ni ẹda kan ati pe yoo dara fun wa lati dọgbadọgba ẹru naa: kọ si Titunto si, ki o ka lati inu ẹda naa. Ati nigbagbogbo ipo yii waye nigba ti a fẹ mura diẹ ninu awọn ijabọ tabi ETL. Ati pe iṣowo dun pupọ nipa eyi. O fẹ gaan ọpọlọpọ awọn ijabọ pẹlu ọpọlọpọ awọn atupale eka.
  • Awọn ijabọ gba awọn wakati pupọ, nitori awọn atupale eka ko le ṣe iṣiro ni milliseconds. A, bi akọni enia buruku, kọ koodu. Ninu ohun elo ifibọ a ṣe gbigbasilẹ lori Titunto, ati ṣiṣe awọn ijabọ lori ẹda.
  • Pinpin fifuye.
  • Ohun gbogbo ṣiṣẹ daradara. A jẹ nla.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ati kini ipo yii dabi? Ni pato lori awọn aworan wọnyi, Mo tun ṣafikun iye akoko awọn iṣowo lati ẹda fun iye akoko idunadura naa. Gbogbo awọn aworan miiran tọka si olupin Titunto nikan.

Ni akoko yii, igbimọ ijabọ mi ti dagba. Nibẹ ni o wa siwaju sii ti wọn. A rii pe akoko idahun olupin apapọ jẹ iduroṣinṣin. A rii pe lori ajọra a ni idunadura pipẹ ti o nṣiṣẹ fun awọn wakati 2. A rii iṣẹ idakẹjẹ ti autovacuum, eyiti o ṣe ilana awọn ila ti o ku. Ati pe ohun gbogbo dara pẹlu wa.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ni pataki, ni ibamu si awo ti idanwo, a tẹsiwaju lati ṣe imudojuiwọn awọn iwọntunwọnsi akọọlẹ nibẹ. Ati pe a tun ni akoko idahun iduroṣinṣin fun awọn ibeere, agbara awọn orisun iduroṣinṣin. Ohun gbogbo dara pẹlu wa.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ohun gbogbo dara titi di akoko ti awọn ijabọ wọnyi yoo bẹrẹ si ina pada nitori rogbodiyan pẹlu ẹda. Ati pe wọn ṣe ina pada ni awọn aaye arin deede.

A lọ lori ayelujara ati bẹrẹ kika idi ti eyi fi n ṣẹlẹ. Ati pe a wa ojutu kan.

Ojutu akọkọ ni lati mu lairi isọdọtun pọ si. A mọ pe ijabọ wa nṣiṣẹ fun awọn wakati 3. A ṣeto idaduro isọdọtun si awọn wakati 3. A n ṣe ifilọlẹ ohun gbogbo, ṣugbọn a tun tẹsiwaju lati ni awọn iṣoro pẹlu awọn ijabọ nigbakan a fagilee.

A fẹ ki ohun gbogbo jẹ pipe. A ngun siwaju. Ati pe a rii eto itura kan lori Intanẹẹti - hot_standby_feedback. Jẹ ki a tan-an. Hot_standby_feedback gba wa laaye lati da idaduro aifọwọyi duro lori Titunto. Nitorinaa, a yọkuro patapata kuro ninu awọn rogbodiyan ẹda. Ati ohun gbogbo ṣiṣẹ daradara fun wa pẹlu awọn iroyin.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ati kini n ṣẹlẹ pẹlu olupin Titunto ni akoko yii? Ati pe a wa ni wahala lapapọ pẹlu olupin Titunto. Bayi a n rii awọn aworan nigbati Mo ni awọn eto mejeeji ṣiṣẹ. Ati pe a rii pe igba lori ẹda wa bakan bẹrẹ lati ni ipa lori ipo naa lori olupin Titunto. Arabinrin naa ni ipa nitori pe o da duro autovacuum, eyiti o yọ awọn laini ti o ku kuro. Iwọn tabili wa ti tun ga soke lẹẹkansi. Akoko ipaniyan ibeere apapọ kọja gbogbo ibi ipamọ data naa tun ga soke. Awọn autovacuums tightened soke kekere kan.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ni pataki, lati awo wa, a rii pe imudojuiwọn data lori rẹ tun fo si awọn ọrun. Lilo Sipiyu ti pọ si lọpọlọpọ. A ti wa ni lẹẹkansi lọ nipasẹ kan ti o tobi nọmba ti okú, asan ila. Ati akoko idahun fun ami yii ati nọmba awọn iṣowo ti lọ silẹ.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Kini yoo dabi ti a ko ba mọ ohun ti Mo n sọrọ nipa tẹlẹ?

  • A bẹrẹ lati wa awọn iṣoro. Ti a ba pade awọn iṣoro ni apakan akọkọ, a mọ pe eyi le jẹ nitori iṣowo pipẹ ati lọ si Titunto si. A ni isoro lori Titunto. Sausages rẹ. O gbona, Apapọ fifuye rẹ jẹ bii ọgọrun.
  • Awọn ibeere ni o lọra, ṣugbọn a ko rii eyikeyi awọn iṣowo ti n ṣiṣẹ pipẹ nibẹ. Ati pe a ko loye kini ọrọ naa. A ko loye ibiti a ti wo.
  • A ṣayẹwo ẹrọ olupin. Boya igbogun ti wa kọlu. Boya igi iranti wa ti jo. Bẹẹni, ohunkohun le ṣẹlẹ. Ṣugbọn rara, awọn olupin jẹ tuntun, ohun gbogbo ṣiṣẹ daradara.
  • Gbogbo eniyan nṣiṣẹ: awọn alakoso, awọn olupilẹṣẹ ati oludari. Ko si ohun ti iranlọwọ.
  • Ati ni aaye kan ohun gbogbo lojiji bẹrẹ lati ṣe atunṣe funrararẹ.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ni akoko yii, ibeere ti o wa lori ẹda wa ti ni ilọsiwaju ati fi silẹ. A gba iroyin naa. Inu iṣowo ṣi dun. Bi o ṣe le rii, ami wa ti dagba lẹẹkansi ati pe kii yoo dinku. Lori aworan aworan pẹlu awọn akoko, Mo fi nkan kan silẹ ti iṣowo gigun yii lati ẹda kan ki o le ṣe iṣiro iye akoko ti o gba titi ti ipo yoo fi duro.

Igba ti pari. Ati pe lẹhin igba diẹ olupin wa diẹ sii tabi kere si ni ibere. Ati akoko idahun apapọ fun awọn ibeere lori olupin Titunto si pada si deede. Nitoripe, nikẹhin, autovacuum ni aye lati nu jade ati samisi awọn laini ti o ku wọnyi. O si bẹrẹ si ṣe iṣẹ rẹ. Ati bi o ṣe yarayara, nitorinaa yarayara a yoo gba ni ibere.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Gẹgẹbi tabulẹti idanwo, nibiti a ti ṣe imudojuiwọn awọn iwọntunwọnsi akọọlẹ, a rii aworan kanna ni deede. Akoko imudojuiwọn iroyin apapọ tun jẹ deede deede. Awọn orisun ti o jẹ nipasẹ ero isise naa tun dinku. Ati awọn nọmba ti lẹkọ fun keji pada si deede. Ṣugbọn lẹẹkansi a pada si deede, kii ṣe kanna bi a ti jẹ ṣaaju ijamba naa.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ni eyikeyi idiyele, a gba idinku iṣẹ, bi ninu ọran akọkọ, nipasẹ ọkan ati idaji si igba meji, ati nigbakan diẹ sii.

O dabi pe a ti ṣe ohun gbogbo daradara. Pin awọn fifuye. Ohun elo ko ṣiṣẹ. A pin awọn ibeere ni ibamu si ọkan wa, ṣugbọn sibẹ ohun gbogbo wa ni buburu.

  • Maa ko jeki hot_standby_feedback? Bẹẹni, ko ṣe iṣeduro lati tan-an laisi awọn idi pataki ti o lagbara. Nitori yi lilọ taara ni ipa lori Titunto si olupin ati ki o daduro awọn isẹ ti awọn autovacuum nibẹ. Nipa muu ṣiṣẹ lori ẹda kan ati gbagbe nipa rẹ, o le pa Titunto si ati gba awọn iṣoro nla pẹlu ohun elo naa.
  • Ṣe alekun max_standby_streaming_delay? Bẹẹni, fun awọn ijabọ eyi jẹ otitọ. Ti o ba ni ijabọ wakati mẹta ati pe o ko fẹ ki o jamba nitori awọn rogbodiyan atunkọ, lẹhinna mu idaduro pọ si. Ijabọ igba pipẹ ko nilo data ti o ti de ibi ipamọ data ni bayi. Ti o ba ni fun wakati mẹta, lẹhinna o nṣiṣẹ fun diẹ ninu awọn akoko data atijọ. Ati fun ọ, boya idaduro wakati mẹta tabi idaduro wakati mẹfa kii yoo ṣe iyatọ, ṣugbọn iwọ yoo gba awọn iroyin nigbagbogbo ati pe kii yoo ni awọn iṣoro eyikeyi pẹlu wọn ṣubu.
  • Nipa ti ara, o nilo lati ṣakoso awọn akoko gigun lori awọn ẹda, paapaa ti o ba pinnu lati mu hot_standby_feedback ṣiṣẹ lori ẹda kan. Nitoripe ohunkohun le ṣẹlẹ. A fi ẹ̀dà yìí fún olùgbéjáde kí ó lè dán àwọn ìbéèrè náà wò. O kowe a irikuri ìbéèrè. O ṣe ifilọlẹ o si lọ lati mu tii, ati pe a ni Titunto ti iṣeto. Tabi boya a fi ohun elo ti ko tọ si nibẹ. Awọn ipo ti wa ni orisirisi. Awọn akoko lori awọn ẹda gbọdọ wa ni abojuto bi daradara bi ti Titunto si.
  • Ati pe ti o ba ni awọn ibeere iyara ati gigun lori awọn ẹda, lẹhinna ninu ọran yii o dara lati pin wọn lati pin kaakiri. Eyi jẹ ọna asopọ si streaming_delay. Fun awọn ti o yara, ni ẹda kan pẹlu idaduro isọdọtun kekere kan. Fun awọn ibeere ijabọ igba pipẹ, ni ẹda ti o le duro nipasẹ awọn wakati 6 tabi ọjọ kan. Eyi jẹ ipo deede patapata.

A ṣe imukuro awọn abajade ni ọna kanna: +

  • A ri awọn tabili bloated.
  • Ati pe a rọpọ pẹlu ọpa ti o rọrun julọ ti o baamu wa.

Itan keji dopin nibi. Jẹ ki a lọ si itan kẹta.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Tun oyimbo wọpọ fun wa ninu eyi ti a ṣe ijira.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

  • Ọja sọfitiwia eyikeyi n dagba. Awọn ibeere fun o ti wa ni iyipada. Ni eyikeyi idiyele, a fẹ lati ni idagbasoke. Ati pe o ṣẹlẹ pe a nilo lati ṣe imudojuiwọn data ninu tabili, eyun lati ṣiṣe imudojuiwọn ni awọn ofin ti iṣiwa wa fun iṣẹ ṣiṣe tuntun ti a n ṣafihan gẹgẹ bi apakan ti idagbasoke wa.
  • Ọna kika data atijọ ko ni itẹlọrun. Jẹ ki a sọ pe a yipada si tabili keji, nibiti Mo ni awọn iṣowo lori awọn akọọlẹ wọnyi. Ki o si jẹ ki a sọ pe wọn wa ni awọn rubles, ati pe a pinnu lati mu ilọsiwaju pọ si ati ṣe ni awọn kopecks. Ati fun eyi a nilo lati ṣe imudojuiwọn: isodipupo aaye pẹlu iye owo idunadura nipasẹ ọgọrun kan.
  • Ni agbaye ode oni, a lo awọn irinṣẹ iṣakoso ẹya data adaṣiṣẹ. Jẹ ká sọ Liquibase. A forukọsilẹ ijira wa nibẹ. A ṣe idanwo lori ipilẹ idanwo wa. Ohun gbogbo dara. Imudojuiwọn naa n lọ. O ṣe idiwọ iṣẹ fun igba diẹ, ṣugbọn a gba data imudojuiwọn. Ati pe a le ṣe ifilọlẹ iṣẹ ṣiṣe tuntun lori eyi. Ohun gbogbo ni idanwo ati ṣayẹwo. Ohun gbogbo ti a timo.
  • A ṣe awọn iṣẹ ti a gbero ati gbejade ijira.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Eyi ni ijira pẹlu imudojuiwọn ti a gbekalẹ ni iwaju rẹ. Niwọn igba ti awọn iṣowo akọọlẹ mi jẹ wọnyi, awo naa jẹ 15 GB. Ati pe niwon a ṣe imudojuiwọn gbogbo laini, a ṣe ilọpo meji iwọn tabili pẹlu imudojuiwọn, nitori a tun ṣe gbogbo laini.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Lakoko iṣiwa, a ko le ṣe ohunkohun pẹlu awo yii, nitori gbogbo awọn ibeere si rẹ ti wa ni ila ati duro titi imudojuiwọn yii yoo fi pari. Ṣugbọn nibi Mo fẹ lati fa ifojusi rẹ si awọn nọmba ti o wa lori ipo inaro. Iyẹn ni, a ni akoko ibeere apapọ ṣaaju iṣiwa ti bii 5 milliseconds ati fifuye ero isise, nọmba awọn iṣẹ ṣiṣe bulọki fun kika iranti disk jẹ kere ju 7,5.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

A ti gbe jade ni ijira ati ki o ni isoro lẹẹkansi.

Iṣilọ naa ṣaṣeyọri, ṣugbọn:

  • Iṣẹ ṣiṣe atijọ bayi gba to gun lati pari.
  • Awọn tabili dagba ni iwọn lẹẹkansi.
  • Awọn fifuye lori olupin lẹẹkansi di tobi ju ti tẹlẹ.
  • Ati pe, nitorinaa, a tun n tinkering pẹlu iṣẹ ṣiṣe ti o ṣiṣẹ daradara, a ti ni ilọsiwaju diẹ.

Ati pe eyi tun jẹ bloat, eyiti o tun ba awọn igbesi aye wa run.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Nibi Mo ṣe afihan pe tabili naa, bii awọn ọran meji ti tẹlẹ, kii yoo pada si awọn iwọn iṣaaju rẹ. Apapọ fifuye olupin dabi pe o jẹ deedee.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ati pe ti a ba yipada si tabili pẹlu awọn akọọlẹ, a yoo rii pe akoko ibeere apapọ ti ilọpo meji fun tabili yii. Awọn fifuye lori ero isise ati awọn nọmba ti ila lẹsẹsẹ jade ni iranti fo loke 7,5, sugbon je kekere. Ati pe o fo ni awọn akoko 2 ni ọran ti awọn ilana, awọn akoko 1,5 ni ọran ti awọn iṣẹ ṣiṣe bulọọki, ie a ni ibajẹ ni iṣẹ olupin. Ati bi abajade - ibajẹ ti iṣẹ ṣiṣe ti ohun elo wa. Ni akoko kanna, nọmba awọn ipe wa ni isunmọ ni ipele kanna.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ati ohun akọkọ nibi ni lati ni oye bi o ṣe le ṣe iru awọn iṣipopada ni deede. Ati pe wọn nilo lati ṣe. A ṣe awọn migrations lẹwa àìyẹsẹ.

  • Iru awọn ijira nla bẹẹ ko ṣẹlẹ laifọwọyi. Wọn gbọdọ wa labẹ iṣakoso nigbagbogbo.
  • Abojuto nipasẹ eniyan oye ni a nilo. Ti o ba ni DBA lori ẹgbẹ rẹ, lẹhinna jẹ ki DBA ṣe. Iṣẹ rẹ ni. Ti kii ba ṣe bẹ, lẹhinna jẹ ki eniyan ti o ni iriri julọ ṣe, ti o mọ bi o ṣe le ṣiṣẹ pẹlu awọn apoti isura infomesonu.
  • Eto ipilẹ data tuntun, paapaa ti a ba ṣe imudojuiwọn iwe kan, a nigbagbogbo mura silẹ ni awọn ipele, ie ni ilosiwaju ṣaaju ki ẹya tuntun ti ohun elo naa ti jade:
  • Awọn aaye tuntun ti wa ni afikun ninu eyiti a yoo ṣe igbasilẹ data imudojuiwọn.
  • A gbe data lati atijọ oko si titun aaye ni kekere awọn ẹya ara. Kí nìdí tá a fi ń ṣe bẹ́ẹ̀? Ni akọkọ, a nigbagbogbo ṣakoso ilana ti ilana yii. A mọ pe a ti gbe ọpọlọpọ awọn ipele tẹlẹ ati pe a ti fi ọpọlọpọ silẹ.
  • Ati ipa rere keji ni pe laarin iru ipele kọọkan a pa idunadura naa, ṣii tuntun kan, ati pe eyi ngbanilaaye autovacuum lati ṣiṣẹ ni ibamu si awo, samisi awọn ila ti o ku fun atunlo.
  • Fun awọn laini ti yoo han lakoko ti ohun elo nṣiṣẹ (a tun ni ohun elo atijọ ti n ṣiṣẹ), a ṣafikun okunfa kan ti o kọ awọn iye tuntun si awọn aaye tuntun. Ninu ọran wa, eyi jẹ isodipupo nipasẹ ọgọrun ti iye atijọ.
  • Ti a ba jẹ alagidi patapata ti a si fẹ aaye kanna, lẹhinna ni ipari gbogbo awọn ijira ati ṣaaju ki o to yi ẹya tuntun ti ohun elo naa, a kan fun lorukọ awọn aaye naa. Awọn ti atijọ ni a fun ni diẹ ninu awọn orukọ ti a ṣe, ati awọn aaye titun ti wa ni tunrukọ si awọn ti atijọ.
  • Ati lẹhin iyẹn a ṣe ifilọlẹ ẹya tuntun ti ohun elo naa.

Ati ni akoko kanna a kii yoo gba bloat ati pe kii yoo jiya ni awọn iṣe ti iṣẹ.

Eyi ni ibi ti itan kẹta pari.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

https://github.com/dataegret/pg-utils/blob/master/sql/table_bloat.sql

https://github.com/dataegret/pg-utils/blob/master/sql/table_bloat_approx.sql

Ati ni bayi alaye diẹ sii nipa awọn irinṣẹ ti Mo mẹnuba ninu itan akọkọ pupọ.

Ṣaaju wiwa fun bloat, o gbọdọ fi itẹsiwaju sii pgstattuple.

Ki o ko ba ni lati wa pẹlu awọn ibeere, a ti kọ awọn ibeere wọnyi tẹlẹ ninu iṣẹ wa. O le lo wọn. Awọn ibeere meji wa nibi.

  • Eyi akọkọ gba akoko pipẹ pupọ lati ṣiṣẹ, ṣugbọn yoo fihan ọ ni awọn iye bloat gangan lati tabili.
  • Awọn keji ṣiṣẹ yiyara ati ki o jẹ gidigidi munadoko nigba ti o ba nilo lati ni kiakia se ayẹwo boya o wa ni a bloat tabi ko ni ibamu si awọn tabili. Ati pe o yẹ ki o tun loye pe bloat nigbagbogbo wa ni tabili Postgres kan. Eyi jẹ ẹya ti awoṣe MVCC rẹ.
  • Ati 20% bloat jẹ deede fun awọn tabili ni ọpọlọpọ igba. Iyẹn ni, o yẹ ki o ṣe aibalẹ ati compress tabili yii.

A ṣe ayẹwo bi a ṣe le ṣe idanimọ awọn tabili ti o wú pẹlu data asan.

Bayi nipa bi o ṣe le ṣe atunṣe bloat:

  • Ti a ba ni tabulẹti kekere ati awọn disiki to dara, iyẹn ni, lori tabulẹti kan titi de gigabyte kan, o ṣee ṣe pupọ lati lo VACUUM FULL. Oun yoo gba titiipa iyasoto lati ọdọ rẹ lori tabili fun iṣẹju diẹ ati pe o dara, ṣugbọn oun yoo ṣe ohun gbogbo ni iyara ati lile. Kini VACUUM FULL ṣe? Yoo gba titiipa iyasoto lori tabili ati tun ṣe awọn ori ila laaye lati awọn tabili atijọ sinu tabili tuntun. Ati ni ipari o rọpo wọn. O npa awọn faili atijọ kuro ati rọpo awọn atijọ pẹlu awọn tuntun. Ṣugbọn fun iye akoko iṣẹ rẹ, o gba titiipa iyasoto lori tabili. Eyi tumọ si pe iwọ ko le ṣe ohunkohun pẹlu tabili yii: ko kọ si i, tabi ka sinu rẹ, tabi tun ṣe. Ati VACUUM FULL nilo aaye disk ni afikun lati kọ data.
  • Next ọpa pg_repack. Ninu ilana rẹ, o jọra pupọ si VACUUM FULL, nitori pe o tun kọwe data lati awọn faili atijọ si awọn tuntun ati rọpo wọn ni tabili. Ṣugbọn ni akoko kanna, ko gba titiipa iyasoto lori tabili ni ibẹrẹ iṣẹ rẹ, ṣugbọn o gba nikan ni akoko ti o ti ni data ti o ti ṣetan lati rọpo awọn faili. Awọn ibeere orisun disiki rẹ jẹ iru awọn ti VACUUM FULL. O nilo aaye disk afikun, ati pe eyi jẹ pataki nigbakan ti o ba ni awọn tabili terabyte. Ati pe ebi npa ni ero isise nitori pe o ṣiṣẹ pẹlu I / O.
  • IwUlO kẹta ni pgcompacttable. O ṣọra diẹ sii pẹlu awọn orisun nitori pe o ṣiṣẹ ni ibamu si awọn ipilẹ oriṣiriṣi oriṣiriṣi. Ero akọkọ ti pgcompacttable ni pe o gbe gbogbo awọn ori ila laaye si ibẹrẹ tabili ni lilo awọn imudojuiwọn ninu tabili. Ati lẹhinna o nṣiṣẹ igbale lori tabili yii, nitori a mọ pe a ni awọn ori ila laaye ni ibẹrẹ ati awọn ori ila ti o ku ni ipari. Ati igbale funrararẹ ge iru yii, ie ko nilo aaye disk afikun pupọ. Ati ni akoko kanna, o le tun ti wa ni squeezed ni awọn ofin ti oro.

Ohun gbogbo pẹlu awọn irinṣẹ.

Awọn aṣiṣe aṣoju ninu awọn ohun elo ti o yorisi bloat ni postgresql. Andrey Salnikov

Ti o ba rii koko-ọrọ bloat ni iwunilori ni awọn ofin ti lilọ siwaju inu, eyi ni diẹ ninu awọn ọna asopọ to wulo:

Mo gbiyanju diẹ sii lati ṣafihan itan ibanilẹru kan fun awọn olupilẹṣẹ, nitori wọn jẹ alabara taara ti awọn apoti isura infomesonu ati pe o gbọdọ loye kini ati kini awọn iṣe ti o yori si. Mo nireti pe mo ṣaṣeyọri. Mo dupe fun ifetisile re!

Awọn ibeere

O ṣeun fun iroyin na! O ti sọrọ nipa bi o ṣe le ṣe idanimọ awọn iṣoro. Báwo la ṣe lè kìlọ̀ fún wọn? Iyẹn ni, Mo ni ipo kan nibiti awọn ibeere ti kọkọ ko nikan nitori wọn wọle si diẹ ninu awọn iṣẹ ita. Awọn wọnyi ni o kan diẹ ninu awọn parapo egan. Awọn ibeere kekere kan wa, ti ko lewu ti o wa ni ayika fun ọjọ kan, lẹhinna bẹrẹ si ṣe diẹ ninu ọrọ isọkusọ. Iyẹn ni, o jọra pupọ si ohun ti o ṣapejuwe. Bawo ni lati tọpa eyi? Joko nigbagbogbo wo ibeere wo ni o di? Bawo ni a ṣe le ṣe idiwọ eyi?

Ni idi eyi, eyi jẹ iṣẹ-ṣiṣe fun awọn alakoso ile-iṣẹ rẹ, kii ṣe dandan fun DBA.

Alakoso ni mi.

PostgreSQL ni wiwo kan ti a pe ni pg_stat_activity ti o ṣe afihan awọn ibeere didan. Ati pe o le rii bi o ṣe pẹ to ti o kọorí nibẹ.

Ṣe Mo ni lati wọle ati wo ni gbogbo iṣẹju 5?

Ṣeto cron ati ṣayẹwo. Ti o ba ni ibeere igba pipẹ, kọ lẹta kan ati pe iyẹn ni. Iyẹn ni, o ko nilo lati wo pẹlu oju rẹ, o le jẹ adaṣe. Iwọ yoo gba lẹta kan, iwọ yoo dahun si rẹ. Tabi o le iyaworan laifọwọyi.

Njẹ awọn idi ti o han gbangba ti eyi fi ṣẹlẹ?

Mo ti ṣe akojọ diẹ ninu awọn. Miiran eka sii apẹẹrẹ. Ati pe ibaraẹnisọrọ le wa fun igba pipẹ.

O ṣeun fun iroyin na! Mo fẹ lati ṣe alaye nipa ohun elo pg_repack. Ti ko ba ṣe titiipa iyasọtọ, lẹhinna...

O ṣe titiipa iyasoto.

... lẹhinna Mo le padanu data. Ṣe ohun elo mi ko yẹ ki o ṣe igbasilẹ ohunkohun lakoko yii?

Rara, o ṣiṣẹ laisiyonu pẹlu tabili, ie pg_repack akọkọ gbe gbogbo awọn laini laaye ti o wa. Nipa ti, diẹ ninu awọn iru titẹsi sinu tabili waye nibẹ. O kan n ju ​​iru pony yii jade.

Iyẹn ni, o ṣe ni otitọ ni ipari?

Ni ipari, o gba titiipa iyasọtọ lati yi awọn faili wọnyi pada.

Ṣe yoo yara ju VACUUM FULL lọ?

VACUUM FULL, ni kete bi o ti bẹrẹ, lẹsẹkẹsẹ mu titiipa iyasoto. Ati titi o fi ṣe ohun gbogbo, ko ni jẹ ki o lọ. Ati pg_repack gba titiipa iyasoto nikan ni akoko rirọpo faili. Ni akoko yii iwọ kii yoo kọ sibẹ, ṣugbọn data kii yoo sọnu, ohun gbogbo yoo dara.

Pẹlẹ o! O ti sọrọ nipa isẹ ti igbale ọkọ ayọkẹlẹ kan. Aworan kan wa pẹlu pupa, ofeefee ati awọn sẹẹli gbigbasilẹ alawọ ewe. Iyẹn ni, awọn ofeefee - o samisi wọn bi paarẹ. Ati bi abajade, nkankan titun le wa ni kikọ sinu wọn?

Bẹẹni. Postgres ko pa awọn laini rẹ. O ni iru kan pato. Ti a ba ṣe imudojuiwọn laini kan, a samisi ti atijọ bi paarẹ. Awọn id ti idunadura ti o yi ila yi han nibẹ, ati awọn ti a kọ titun kan ila. Ati pe a ni awọn akoko ti o le ka wọn. Ni aaye kan wọn di arugbo. Ati pe pataki ti bii autovacuum ṣe n ṣiṣẹ ni pe o lọ nipasẹ awọn laini wọnyi ati samisi wọn bi ko ṣe pataki. Ati pe o le tun kọ data nibẹ.

O ye mi. Ṣugbọn kii ṣe ohun ti ibeere naa jẹ nipa. Emi ko pari. Jẹ ki a ro pe a ni tabili kan. O ni awọn aaye ti iwọn oniyipada. Ati pe ti MO ba gbiyanju lati fi nkan tuntun sii, o le jiroro ko baamu sinu sẹẹli atijọ.

Rara, ni eyikeyi ọran gbogbo ila ti ni imudojuiwọn nibẹ. Postgres ni awọn awoṣe ipamọ data meji. O yan lati iru data. Nibẹ ni data ti o ti wa ni ti o ti fipamọ taara ni tabili, ati nibẹ ni tun tos data. Iwọnyi jẹ awọn oye nla ti data: ọrọ, json. Wọn ti wa ni ipamọ ni lọtọ farahan. Ati ni ibamu si awọn tabulẹti wọnyi, itan kanna pẹlu bloat waye, ie ohun gbogbo jẹ kanna. Wọn ti wa ni o kan akojọ lọtọ.

O ṣeun fun iroyin na! Ṣe o jẹ itẹwọgba lati lo awọn ibeere akoko ipari alaye lati fi opin si iye akoko bi?

Itẹwọgba pupọ. A lo eyi nibi gbogbo. Ati pe niwọn igba ti a ko ni awọn iṣẹ tiwa, a pese atilẹyin latọna jijin, a ni ọpọlọpọ awọn alabara. Ati pe gbogbo eniyan ni itẹlọrun patapata pẹlu eyi. Iyẹn ni, a ni awọn iṣẹ cron ti o ṣayẹwo. Iye akoko awọn akoko jẹ adehun nirọrun pẹlu alabara, ṣaaju eyiti a ko gba. O le jẹ iṣẹju kan, o le jẹ iṣẹju 10. O da lori fifuye lori ipilẹ ati idi rẹ. Ṣugbọn gbogbo wa lo pg_stat_activity.

O ṣeun fun iroyin na! Mo n gbiyanju lati lo ijabọ rẹ si awọn ohun elo mi. Ati awọn ti o dabi a bẹrẹ a idunadura nibi gbogbo, ati ki o kedere pari o nibi gbogbo. Ti imukuro ba wa, lẹhinna yiyi pada tun waye. Ati lẹhinna Mo bẹrẹ si ronu. Lẹhinna, idunadura le ma bẹrẹ ni gbangba. Eyi le jẹ ofiri si ọmọbirin naa. Ti Mo ba kan ṣe imudojuiwọn igbasilẹ kan, ṣe idunadura naa yoo bẹrẹ ni PostgreSQL ati pe yoo pari nikan nigbati asopọ ba ge-asopo?

Ti o ba n sọrọ ni bayi nipa ipele ohun elo, lẹhinna o da lori awakọ ti o nlo, lori ORM ti o nlo. Awọn eto pupọ wa nibẹ. Ti o ba ni adaṣe adaṣe lori ṣiṣẹ, lẹhinna idunadura kan bẹrẹ nibẹ ati tilekun lẹsẹkẹsẹ.

Iyẹn ni, o tilekun lẹsẹkẹsẹ lẹhin imudojuiwọn naa?

O da lori awọn eto. Mo lorukọ eto kan. Eyi jẹ adaṣe adaṣe. O wọpọ pupọ. Ti o ba ti ṣiṣẹ, lẹhinna idunadura naa ti ṣii ati pipade. Ayafi ti o ba sọ ni gbangba “ibẹrẹ idunadura” ati “idunadura ipari”, ṣugbọn nirọrun ṣe ifilọlẹ ibeere kan sinu igba naa.

Pẹlẹ o! O ṣeun fun iroyin na! Jẹ ki a fojuinu pe a ni data data ti o jẹ wiwu ati wiwu ati lẹhinna aaye lori olupin naa pari. Ṣe awọn irinṣẹ eyikeyi wa lati ṣatunṣe ipo yii?

Awọn aaye lori olupin nilo lati wa ni abojuto daradara.

Fun apẹẹrẹ, awọn DBA lọ fun tii, wà ni a asegbeyin, ati be be lo.

Nigbati a ba ṣẹda eto faili, o kere ju diẹ ninu awọn aaye afẹyinti ni a ṣẹda nibiti a ko kọ data.

Kini ti o ba wa ni isalẹ odo patapata?

Nibẹ ni a npe ni aaye ipamọ, ie o le ni ominira ati da lori bi o ṣe tobi to, o gba aaye ọfẹ. Nipa aiyipada Emi ko mọ iye ti o wa. Ati ninu ọran miiran, firanṣẹ awọn disiki ki o ni aye lati ṣe iṣẹ atunṣe. O le pa diẹ ninu awọn tabili ti o ti wa ni ẹri ko lati nilo.

Ṣe awọn irinṣẹ miiran wa bi?

O jẹ afọwọṣe nigbagbogbo. Ati ni agbegbe o di mimọ ohun ti o dara julọ lati ṣe nibẹ, nitori diẹ ninu data jẹ pataki ati diẹ ninu kii ṣe pataki. Ati fun data kọọkan ati ohun elo ti o ṣiṣẹ pẹlu rẹ, o da lori iṣowo naa. O ti pinnu nigbagbogbo ni agbegbe.

O ṣeun fun iroyin na! Mo ni ibeere meji. Ni akọkọ, o ṣafihan awọn ifaworanhan ti o fihan pe nigbati awọn iṣowo ba di, mejeeji iwọn tabili ati iwọn atọka dagba. Ati siwaju lori ijabọ naa ọpọlọpọ awọn ohun elo ti o ṣe akopọ tabulẹti naa. Kini nipa atọka naa?

Wọ́n tún kó wọn jọ.

Ṣugbọn igbale ko ni ipa lori atọka?

Diẹ ninu awọn ṣiṣẹ pẹlu atọka. Fun apẹẹrẹ, pg_rapack, pgcompacttable. Igbale tun ṣe awọn atọka ati ni ipa lori wọn. Pẹlu VACUUM FULL ero ni lati tun kọ ohun gbogbo, ie o ṣiṣẹ pẹlu gbogbo eniyan.

Ati ibeere keji. Emi ko loye idi ti awọn ijabọ lori awọn ẹda dale pupọ lori ẹda ararẹ. O dabi enipe si mi pe awọn iroyin ti wa ni kika, ati ki o tun ni kikọ.

Kí ló fa ìforígbárí àtúnṣe? A ni Titunto si lori eyiti awọn ilana ṣe waye. A ni igbale ọkọ ayọkẹlẹ ti nlọ lọwọ. Kini autovacuum ṣe gangan? O n ge awọn ila atijọ diẹ. Ti o ba wa ni akoko yii a ni ibeere lori ẹda ti o ka awọn laini atijọ wọnyi, ati lori Titunto si ipo kan waye pe autovacuum samisi awọn ila wọnyi bi o ti ṣee ṣe fun atunkọ, lẹhinna a tun kọ wọn. Ati pe a gba apo-iwe data kan, nigba ti a nilo lati tunkọ awọn laini wọnyẹn ti ibeere naa nilo lori ẹda-ara, ilana ẹda yoo duro de akoko ipari ti o tunto. Ati lẹhinna PostgreSQL yoo pinnu kini o ṣe pataki julọ si rẹ. Ati pe ẹda tun ṣe pataki fun u ju ibeere naa lọ, ati pe yoo iyaworan ibeere naa lati le ṣe awọn ayipada wọnyi lori ẹda.

Andrey, Mo ni ibeere kan. Awọn aworan iyalẹnu wọnyi ti o fihan lakoko igbejade, iwọnyi ha jẹ abajade iṣẹ ti iru iwulo tirẹ bi? Bawo ni a ṣe ṣe awọn aworan naa?

Eyi jẹ iṣẹ kan Okmeter.

Ṣe ọja iṣowo ni eyi?

Bẹẹni. Eyi jẹ ọja iṣowo.

orisun: www.habr.com

Fi ọrọìwòye kun