Kaut kad tÄlÄ nÄkotnÄ nevajadzÄ«gu datu automÄtiska noÅemÅ”ana bÅ«s viens no svarÄ«giem DBVS uzdevumiem [1]. TikmÄr mums paÅ”iem ir jÄrÅ«pÄjas par nevajadzÄ«go datu dzÄÅ”anu vai pÄrvietoÅ”anu uz lÄtÄkÄm uzglabÄÅ”anas sistÄmÄm. PieÅemsim, ka nolemjat dzÄst dažus miljonus rindu. Diezgan vienkÄrÅ”s uzdevums, it Ä«paÅ”i, ja stÄvoklis ir zinÄms un ir piemÄrots indekss. "DELETE FROM table1 WHERE col1 = :value" - kas var bÅ«t vienkÄrÅ”Äks, vai ne?
Video:
-
Esmu Highload programmas komitejÄ kopÅ” pirmÄ gada, t.i., kopÅ” 2007. gada.
-
Un es esmu kopÄ ar Postgres kopÅ” 2005. gada. To izmantoja daudzos projektos.
-
Grupa ar RuPostges arī kopŔ 2007. gada.
-
MÄs esam izauguÅ”i lÄ«dz 2100+ dalÄ«bniekiem Meetup. TÄ ir otrÄ pasaulÄ aiz Å ujorkas, ko ilgu laiku apsteidza Sanfrancisko.
-
Es dzÄ«voju KalifornijÄ vairÄkus gadus. Es vairÄk nodarbojos ar amerikÄÅu firmÄm, arÄ« lielajÄm. ViÅi ir aktÄ«vi Postgres lietotÄji. Un ir visÄdas interesantas lietas.
Ja jÅ«s kaut ko darÄt, tad dažreiz ap Postgres ir kaut kÄdi spraudÅi. PieÅemsim, ka jums ir jÄgaida, lÄ«dz administrators uzstÄdÄ«s jums testa stendu, vai arÄ« jums ir jÄgaida, lÄ«dz DBA jums atbildÄs. Un mÄs atrodam Å”Ädas vÄjÄs vietas izstrÄdes, testÄÅ”anas un administrÄÅ”anas procesÄ un cenÅ”amies tos novÄrst ar automatizÄcijas un jaunu pieeju palÄ«dzÄ«bu.
Nesen biju VLDB LosandželosÄ. Å Ä« ir lielÄkÄ konference par datu bÄzÄm. Un bija ziÅojums, ka nÄkotnÄ DBVS ne tikai uzglabÄs, bet arÄ« automÄtiski dzÄsÄ«s datus. Å Ä« ir jauna tÄma.
Zetabaitu pasaulÄ ir arvien vairÄk datu - tas ir 1 000 000 petabaitu. Un tagad jau tiek lÄsts, ka mums pasaulÄ ir glabÄti vairÄk nekÄ 100 zettabaiti datu. Un viÅu kļūst arvien vairÄk.
Un ko ar to darÄ«t? AcÄ«mredzot tas ir jÄnoÅem. Å eit ir saite uz Å”o interesanto ziÅojumu. Bet lÄ«dz Å”im tas nav ieviests DBVS.
Tie, kas prot skaitÄ«t naudu, vÄlas divas lietas. ViÅi vÄlas, lai mÄs dzÄÅ”am, tÄpÄc tehniski mums vajadzÄtu to izdarÄ«t.
TÄlÄk es pastÄstÄ«Å”u kÄdu abstraktu situÄciju, kas ietver virkni reÄlu situÄciju, t.i., sava veida apkopojums par to, kas patiesÄ«bÄ notika ar mani un apkÄrtÄjÄm datubÄzÄm daudzas reizes, daudzus gadus. GrÄbekļi ir visur un uz tiem visu laiku kÄpj.
PieÅemsim, ka mums ir bÄze vai vairÄkas bÄzes, kas aug. Un daži ieraksti acÄ«mredzami ir atkritumi. PiemÄram, lietotÄjs tur sÄka kaut ko darÄ«t, bet nepabeidza. Un pÄc kÄda laika mÄs zinÄm, ka Å”o nepabeigto vairs nevar uzglabÄt. Tas ir, mÄs vÄlÄtos iztÄ«rÄ«t dažas atkritumu lietas, lai ietaupÄ«tu vietu, uzlabotu veiktspÄju utt.
VispÄr uzdevums ir automatizÄt konkrÄtu lietu, konkrÄtu rindu dzÄÅ”anu kÄdÄ tabulÄ.
Un mums ir tÄds pieprasÄ«jums, par kuru mÄs Å”odien runÄsim, tas ir, par atkritumu izveÅ”anu.
MÄs lÅ«dzÄm to izdarÄ«t pieredzÄjuÅ”am izstrÄdÄtÄjam. ViÅÅ” paÅÄma Å”o pieprasÄ«jumu, pÄrbaudÄ«ja pats - viss darbojas. PÄrbaudÄ«ts uz iestudÄjuma - viss kÄrtÄ«bÄ. IzrullÄts - viss darbojas. Reizi dienÄ palaižam - viss kÄrtÄ«bÄ.
DatubÄze aug un aug. Ikdienas DELETE sÄk darboties nedaudz lÄnÄk.
Tad saprotam, ka tagad mums ir mÄrketinga kompÄnija un trafika bÅ«s vairÄkas reizes lielÄka, tÄpÄc nolemjam uz laiku apturÄt nevajadzÄ«gÄs lietas. Un aizmirst atgriezties.
Dažus mÄneÅ”us vÄlÄk viÅi atcerÄjÄs. Un Å”is izstrÄdÄtÄjs pameta darbu vai ir aizÅemts ar kaut ko citu, uzdeva citam to atgriezt.
ViÅÅ” pÄrbaudÄ«ja izstrÄdÄtÄju, iestudÄjumu - viss ir kÄrtÄ«bÄ. Dabiski, ka vÄl jÄsakopj tas, kas sakrÄjies. ViÅÅ” pÄrbaudÄ«ja, ka viss darbojas.
Kas notiek tÄlÄk? Tad mums viss sabrÅ«k. TÄ nokrÄ«t, ka kÄdÄ brÄ«dÄ« viss nokrÄ«t. Visi ir Å”okÄ, neviens nesaprot, kas notiek. Un tad izrÄdÄs, ka lieta bija Å”ajÄ DZÄST.
Kaut kas nogÄja greizi? Å eit ir saraksts ar to, kas varÄja noiet greizi. KurÅ” no Å”iem ir vissvarÄ«gÄkais?
-
PiemÄram, recenzijas nebija, t.i., DBA eksperts to neskatÄ«jÄs. Ar pieredzÄjuÅ”u aci viÅÅ” uzreiz atrastu problÄmu, turklÄt viÅam ir pieejams prods, kurÄ sakrÄjuÅ”ies vairÄki miljoni rindu.
-
VarbÅ«t viÅi kaut ko nepareizi pÄrbaudÄ«ja.
-
VarbÅ«t aparatÅ«ra ir novecojusi, un jums ir jÄjaunina Ŕī bÄze.
-
Vai arÄ« kaut kas nav kÄrtÄ«bÄ ar paÅ”u datu bÄzi, un mums ir jÄpÄriet no Postgres uz MySQL.
-
Vai varbÅ«t operÄcijÄ kaut kas nav kÄrtÄ«bÄ.
-
VarbÅ«t ir kÄdas kļūdas darba organizÄcijÄ un vajag kÄdu atlaist un pieÅemt darbÄ labÄkos cilvÄkus?
DBA pÄrbaudes nebija. Ja bÅ«tu DBA, viÅÅ” redzÄtu Å”os vairÄkus miljonus rindu un pat bez jebkÄdiem eksperimentiem teiktu: "ViÅi to nedara." PieÅemsim, ja Å”is kods atrastos GitLab, GitHub un bÅ«tu koda pÄrskatÄ«Å”anas process un tas nenotiktu tÄ, ka bez DBA apstiprinÄjuma Ŕī darbÄ«ba notiktu prod, tad acÄ«mredzami DBA teiktu: āTo nevar izdarÄ«t. ā
Un viÅÅ” teiktu, ka jums bÅ«s problÄmas ar diska IO un visi procesi bÅ«s traki, var bÅ«t bloÄ·ÄÅ”anas, kÄ arÄ« jÅ«s bloÄ·Äsit autovakuumu uz dažÄm minÅ«tÄm, tÄpÄc tas nav labi.
Otra kļūda - viÅi pÄrbaudÄ«ja nevietÄ. PÄc tam mÄs redzÄjÄm, ka prod uzkrÄjÄs daudz nevÄlamo datu, bet izstrÄdÄtÄjam nebija uzkrÄto datu Å”ajÄ datu bÄzÄ, un neviens Å”o nevÄlamo nav izveidojis inscenÄÅ”anas laikÄ. AttiecÄ«gi bija 1 rindu, kas Ätri izdevÄs.
MÄs saprotam, ka mÅ«su testi ir vÄji, t.i., process, kas tiek veidots, nerodas problÄmas. AdekvÄts DB eksperiments netika veikts.
IdeÄlu eksperimentu vÄlams veikt ar to paÅ”u aprÄ«kojumu. Ne vienmÄr to var izdarÄ«t ar vienu un to paÅ”u aprÄ«kojumu, taÄu ir ļoti svarÄ«gi, lai tÄ bÅ«tu pilna izmÄra datu bÄzes kopija. Tas ir tas, ko es sludinu jau vairÄkus gadus. Un pirms gada es par to runÄju, to visu varat noskatÄ«ties vietnÄ YouTube.
VarbÅ«t mÅ«su aprÄ«kojums ir slikts? Ja paskatÄs, tad latentums uzlÄca. MÄs esam redzÄjuÅ”i, ka izmantoÅ”ana ir 100%. Protams, ja tie bÅ«tu moderni NVMe diskdziÅi, tad droÅ”i vien mums bÅ«tu daudz vieglÄk. Un varbÅ«t mÄs no tÄ neapgultos.
Ja jums ir mÄkoÅi, jauninÄÅ”anu tur var viegli veikt. Izveidotas jaunas kopijas jaunajÄ aparatÅ«rÄ. PÄrslÄgties. Un viss ir labi. Diezgan viegli.
Vai ir iespÄjams kaut kÄ pieskarties mazÄkajiem diskiem? Un Å”eit, tikai ar DBA palÄ«dzÄ«bu, mÄs iedziļinÄmies noteiktÄ tÄmÄ, ko sauc par kontrolpunktu regulÄÅ”anu. IzrÄdÄs, ka mums nebija kontrolpunktu tÅ«ninga.
Kas ir kontrolpunkts? Tas ir jebkurÄ DBVS. Ja jÅ«su atmiÅÄ ir dati, kas mainÄs, tie netiek uzreiz ierakstÄ«ti diskÄ. InformÄcija, ka dati ir mainÄ«ti, vispirms tiek ierakstÄ«ta priekÅ”rakstÄ«Å”anas žurnÄlÄ. Un kÄdÄ brÄ«dÄ« DBVS nolemj, ka ir pienÄcis laiks reÄlas lapas izmest diskÄ, lai, ja rodas kļūme, mÄs varÄtu mazÄk veikt REDO. TÄ ir kÄ rotaļlieta. Ja mÅ«s nogalina, tad spÄli sÄksim no pÄdÄjÄ kontrolpunkta. Un visas DBVS to Ä«steno.
Postgres iestatÄ«jumi atpaliek. Tie ir paredzÄti 10-15 gadus veciem datu un darÄ«jumu apjomiem. Un kontrolpunkts nav izÅÄmums.
Å eit ir informÄcija no mÅ«su Postgres pÄrbaudes ziÅojuma, t.i., automÄtiskÄs veselÄ«bas pÄrbaudes. Un Å”eit ir datubÄze ar vairÄkiem terabaitiem. Un labi redzams, ka piespiedu kontrolpunkti gandrÄ«z 90% gadÄ«jumu.
Ko tas nozÄ«mÄ? Tur ir divi iestatÄ«jumi. Kontrolpunkts var nÄkt pÄc taimauta, piemÄram, 10 minÅ«tÄs. Vai arÄ« tas var notikt, kad ir aizpildÄ«ts diezgan daudz datu.
Un pÄc noklusÄjuma max_wal_saze ir iestatÄ«ts uz 1 gigabaitu. Faktiski tas patieÅ”Äm notiek PostgresÄ pÄc 300ā400 megabaitiem. JÅ«s esat mainÄ«jis tik daudz datu, un jÅ«su kontrolpunkts notiek.
Un, ja neviens to neregulÄja, un pakalpojums auga, un uzÅÄmums nopelna daudz naudas, tajÄ ir daudz darÄ«jumu, tad kontrolpunkts nÄk reizi minÅ«tÄ, dažreiz ik pÄc 30 sekundÄm un dažreiz pat pÄrklÄjas. Tas ir diezgan slikti.
Un mums ir jÄpÄrliecinÄs, ka tas notiek retÄk. Tas ir, mÄs varam palielinÄt max_wal_size. Un tas nÄks retÄk.
Bet mÄs esam izstrÄdÄjuÅ”i veselu metodiku, kÄ to izdarÄ«t pareizÄk, tas ir, kÄ pieÅemt lÄmumu par iestatÄ«jumu izvÄli, skaidri balstoties uz konkrÄtiem datiem.
AttiecÄ«gi mÄs veicam divas eksperimentu sÄrijas datu bÄzÄs.
PirmÄ sÄrija - mainÄm max_wal_size. Un mÄs veicam apjomÄ«gu operÄciju. PirmkÄrt, mÄs to darÄm pÄc noklusÄjuma 1 gigabaita. Un mÄs veicam milzÄ«gu daudzu miljonu rindu DELETE.
JÅ«s varat redzÄt, cik mums tas ir grÅ«ti. MÄs redzam, ka diska IO ir ļoti slikts. MÄs skatÄmies, cik WAL esam Ä£enerÄjuÅ”i, jo tas ir ļoti svarÄ«gi. PaskatÄ«simies, cik reizes kontrolpunkts notika. Un mÄs redzam, ka tas nav labi.
TÄlÄk mÄs palielinÄm max_wal_size. MÄs atkÄrtojam. MÄs palielinÄm, mÄs atkÄrtojam. Un tik daudzas reizes. PrincipÄ 10 punkti ir labi, kur 1, 2, 4, 8 gigabaiti. Un mÄs skatÄmies uz konkrÄtas sistÄmas uzvedÄ«bu. Skaidrs, ka Å”eit aprÄ«kojumam jÄbÅ«t kÄ uz prod. Jums ir jÄbÅ«t vienÄdiem diskiem, vienÄdam atmiÅas apjomam un tiem paÅ”iem Postgres iestatÄ«jumiem.
Un tÄdÄ veidÄ mÄs apmainÄ«simies ar savu sistÄmu, un mÄs zinÄm, kÄ DBVS uzvedÄ«sies sliktas masas DELETE gadÄ«jumÄ, kÄ tÄ veiks kontrolpunktu.
Kontrolpunkts krievu valodÄ ir kontrolpunkti.
PiemÄrs: DZÄST vairÄkus miljonus rindu pÄc indeksa, rindas ir "izkaisÄ«tas" pa lapÄm.
Å eit ir piemÄrs. Å Ä« ir kaut kÄda bÄze. Un ar noklusÄjuma iestatÄ«jumu 1 gigabaits vienumam max_wal_size, ir ļoti skaidrs, ka mÅ«su diski nonÄk plauktÄ ierakstÄ«Å”anai. Å is attÄls ir tipisks simptoms ļoti slimam pacientam, tas ir, viÅÅ” patieÅ”Äm jutÄs slikti. Un bija viena operÄcija, bija tikai vairÄku miljonu rindu DELETE.
Ja prod ir atļauta Å”Äda darbÄ«ba, tad mÄs vienkÄrÅ”i gulÄsim, jo āāskaidrs, ka viens DELETE mÅ«s nogalina plauktÄ.
TÄlÄk, kur 16 gigabaiti, skaidrs, ka zobi jau aizgÄjuÅ”i. Zobi jau ir labÄki, proti, klauvÄjam pie griestiem, bet ne tik slikti. Tur bija zinÄma brÄ«vÄ«ba. LabajÄ pusÄ ir ieraksts. Un operÄciju skaits - otrais grafiks. Un skaidrs, ka mÄs jau nedaudz vieglÄk elpojam, kad 16 gigabaiti.
Un kur 64 gigabaiti var redzÄt, ka tas ir kļuvis pilnÄ«gi labÄks. Jau zobi ir izteikti, ir lielÄkas iespÄjas pÄrdzÄ«vot citas operÄcijas un kaut ko darÄ«t ar disku.
KÄpÄc tÄ?
Es nedaudz iedziļinÄÅ”os detaļÄs, bet Ŕī tÄma, kÄ veikt kontrolpunktu noskaÅoÅ”anu, var radÄ«t veselu ziÅojumu, tÄpÄc es neielÄdÄÅ”u daudz, bet es nedaudz ieskicÄtu, kÄdas grÅ«tÄ«bas ir.
Ja kontrolpunkts notiek pÄrÄk bieži, un mÄs atjaunojam savas rindas nevis secÄ«gi, bet atrodam pÄc indeksa, kas ir labi, jo mÄs neizdzÄÅ”am visu tabulu, tad var gadÄ«ties, ka sÄkumÄ pieskÄrÄmies pirmajai lapai, tad tÅ«kstoÅ”ajai, un pÄc tam atgriezÄs pie pirmÄs . Un, ja starp Å”iem pirmÄs lapas apmeklÄjumiem kontrolpunkts to jau ir saglabÄjis diskÄ, tad tas to saglabÄs vÄlreiz, jo mÄs to sasmÄrÄjÄm otrreiz.
Un mÄs piespiedÄ«sim kontrolpunktu to saglabÄt daudzas reizes. KÄ viÅam bÅ«tu liekas operÄcijas.
Bet tas vÄl nav viss. Lapas ir 8 kilobaiti programmÄ Postgres un 4 kilobaiti operÄtÄjsistÄmÄ Linux. Un ir iestatÄ«jums full_page_writes. Tas ir iespÄjots pÄc noklusÄjuma. Un tas ir pareizi, jo, ja mÄs to izslÄdzam, tad pastÄv risks, ka, ja tÄ avarÄ, tiks saglabÄta tikai puse no lapas.
PÄrsÅ«tÄ«Å”anas žurnÄla WAL rakstÄ«Å”anas darbÄ«ba ir tÄda, ka tad, kad mums ir kontrolpunkts un mÄs pirmo reizi mainÄm lapu, visa lapa, t.i., visi 8 kilobaiti, nonÄk pÄrsÅ«tÄ«Å”anas žurnÄlÄ, lai gan mÄs mainÄ«jÄm tikai rinda, kas sver 100 baitus . Un mums ir jÄpieraksta visa lapa.
TurpmÄkajÄs izmaiÅÄs bÅ«s tikai konkrÄts kortežs, bet pirmo reizi mÄs pierakstÄm visu.
Un attiecÄ«gi, ja kontrolpunkts atkÄrtojÄs, tad atkal jÄsÄk viss no nulles un jÄspiež visa lapa. Ar biežu kontrolpunktu palÄ«dzÄ«bu, kad mÄs ejam cauri vienÄm un tÄm paÅ”Äm lapÄm, full_page_writes = on bÅ«s vairÄk nekÄ tas varÄtu bÅ«t, t.i., mÄs Ä£enerÄjam vairÄk WAL. VairÄk tiek nosÅ«tÄ«ts uz replikÄm, arhÄ«vu, disku.
Un attiecīgi mums ir divas atlaiŔanas.
Ja mÄs palielinÄm max_wal_size, izrÄdÄs, ka mÄs to atvieglosim gan kontrolpunktam, gan wal rakstniekam. Un tas ir lieliski.
Ieliksim terabaitu un dzÄ«vosim ar to. Kas tur slikts? Tas ir slikti, jo neveiksmes gadÄ«jumÄ kÄpsim stundÄm, jo āākontrolpunkts bija sen un daudz kas jau ir mainÄ«jies. Un mums tas viss ir jÄdara REDO. Un tÄ mÄs veicam otro eksperimentu sÄriju.
MÄs veicam operÄciju un redzam, kad kontrolpunkts drÄ«z beigsies, mÄs ar nolÅ«ku nogalinÄm -9 Postgres.
Un pÄc tam mÄs to iedarbinÄm no jauna, un skatÄmies, cik ilgi tas uz Ŕīs iekÄrtas celsies, t.i., cik daudz tas PÄRSKÄS Å”ajÄ sliktajÄ situÄcijÄ.
Divas reizes atzÄ«mÄÅ”u, ka situÄcija ir slikta. PirmkÄrt, mÄs avarÄjÄm tieÅ”i pirms kontrolpunkta beigÄm, tÄpÄc mums ir daudz ko zaudÄt. Un, otrkÄrt, mums bija masveida operÄcija. Un, ja kontrolpunkti bÅ«tu noildze, tad, visticamÄk, kopÅ” pÄdÄjÄ kontrolpunkta tiktu Ä£enerÄts mazÄk WAL. Tas ir, tas ir dubults zaudÄtÄjs.
MÄs izmÄrÄm Å”Ädu situÄciju dažÄdiem max_wal_size izmÄriem un saprotam, ja max_wal_size ir 64 gigabaiti, tad dubultÄ sliktÄkajÄ gadÄ«jumÄ uzkÄpsim 10 minÅ«tes. Un mÄs domÄjam, vai tas mums der vai nÄ. Å is ir biznesa jautÄjums. Mums ir jÄparÄda Å”is attÄls tiem, kas ir atbildÄ«gi par biznesa lÄmumiem, un jÄjautÄ: āCik ilgi mÄs varam nogulÄt ilgÄkais, ja rodas problÄma? Vai sliktÄkajÄ situÄcijÄ varam nogulÄt 3-5 minÅ«tes? Un jÅ«s pieÅemat lÄmumu.
Un Å”eit ir interesants punkts. Mums konferencÄ ir pÄris referÄti par Patroni. Un varbÅ«t jÅ«s to izmantojat. Å is ir Postgres automÄtiskais failover. Par to runÄja GitLab un Data Egret.
Un, ja jums ir autofailover, kas notiek 30 sekundÄs, tad varbÅ«t varam nogulÄt uz 10 minÅ«tÄm? Jo mÄs lÄ«dz Å”im pÄriesim uz repliku, un viss bÅ«s kÄrtÄ«bÄ. Tas ir strÄ«dÄ«gs jautÄjums. Es nezinu skaidru atbildi. Es tikai jÅ«tu, ka Ŕī tÄma nav saistÄ«ta tikai ar avÄrijas atkopÅ”anu.
Ja mums ir ilga atveseļoÅ”anÄs pÄc neveiksmes, tad mums bÅ«s neÄrti daudzÄs citÄs situÄcijÄs. PiemÄram, tajos paÅ”os eksperimentos, kad mÄs kaut ko darÄm un dažreiz ir jÄgaida 10 minÅ«tes.
Es tik un tÄ neietu pÄrÄk tÄlu, pat ja mums ir automÄtiska pÄrslÄgÅ”anÄs. Parasti tÄdas vÄrtÄ«bas kÄ 64, 100 gigabaiti ir labas vÄrtÄ«bas. Dažreiz pat ir vÄrts izvÄlÄties mazÄk. KopumÄ Å”Ä« ir smalka zinÄtne.
Lai veiktu iterÄcijas, piemÄram, max_wal_size =1, 8, masu darbÄ«ba ir jÄatkÄrto daudzas reizes. Tu to izdarÄ«ji. Un uz tÄs paÅ”as bÄzes jÅ«s vÄlaties to darÄ«t vÄlreiz, bet jÅ«s jau esat visu izdzÄsis. Ko darÄ«t?
Par mÅ«su risinÄjumu, ko mÄs darÄm, lai atkÄrtotos Å”ÄdÄs situÄcijÄs, pastÄstÄ«Å”u vÄlÄk. Un Ŕī ir vispareizÄkÄ pieeja.
Bet Å”ajÄ gadÄ«jumÄ mums paveicÄs. Ja, kÄ Å”eit teikts "BEGIN, DELETE, ROLLBACK", tad mÄs varam atkÄrtot DELETE. Tas ir, ja mÄs paÅ”i to atcÄlÄm, tad varam atkÄrtot. Un fiziski pie jums dati atradÄ«sies tajÄ paÅ”Ä vietÄ. JÅ«s pat nesaÅemat vÄdera uzpÅ«Å”anos. Varat atkÄrtot Å”Ädus DELETE vienumus.
Å is DELETE ar ROLLBACK ir ideÄli piemÄrots kontrolpunktu regulÄÅ”anai, pat ja jums nav pareizi izvietotas datu bÄzes laboratorijas.
IzgatavojÄm plÄksni ar vienu kolonnu "i". Postgres ir lietderÄ«bas kolonnas. Tie ir neredzami, ja vien nav Ä«paÅ”i lÅ«gts. Tie ir: ctid, xmid, xmax.
Ctid ir fiziska adrese. Nulle lapa, pirmais kortežs lapÄ.
Var redzÄt, ka pÄc ROOLBACK korte palika tajÄ paÅ”Ä vietÄ. Tas ir, mÄs varam mÄÄ£inÄt vÄlreiz, tas rÄ«kosies tÄpat. Tas ir galvenais.
Xmax ir kortedža nÄves laiks. Tas tika apzÄ«mogots, bet Postgres zina, ka darÄ«jums tika atsaukts, tÄpÄc nav svarÄ«gi, vai tas ir 0 vai atsaukts darÄ«jums. Tas liek domÄt, ka ir iespÄjams atkÄrtot DELETE un pÄrbaudÄ«t sistÄmas darbÄ«bas lielapjoma darbÄ«bas. JÅ«s varat izveidot datubÄzes laboratorijas nabadzÄ«gajiem.
Å eit ir runa par programmÄtÄjiem. ArÄ« par DBA viÅi vienmÄr aizrÄda programmÄtÄjus par to: "KÄpÄc jÅ«s veicat tik ilgas un sarežģītas darbÄ«bas?". Å Ä« ir pavisam cita perpendikulÄra tÄma. KÄdreiz bija administrÄcija, tagad bÅ«s attÄ«stÄ«ba.
AcÄ«mredzot mÄs neesam sadalÄ«juÅ”ies gabalos. Tas ir skaidrs. Nav iespÄjams Å”Ädu DELETE miljoniem rindu nesadalÄ«t daļÄs. Tas tiks darÄ«ts 20 minÅ«tes, un viss gulÄs. Bet diemžÄl pat pieredzÄjuÅ”i izstrÄdÄtÄji pieļauj kļūdas pat ļoti lielos uzÅÄmumos.
KÄpÄc ir svarÄ«gi lauzt?
-
Ja redzam, ka disks ir ciets, tad palÄninÄsim. Un, ja esam salauzti, tad varam pievienot pauzes, varam palÄninÄt droseles darbÄ«bu.
-
Un citus ilgi nebloÄ·Äsim. Dažos gadÄ«jumos nav nozÄ«mes, ja jÅ«s izdzÄÅ”at Ä«stus atkritumus, ar kuriem neviens nestrÄdÄ, tad, visticamÄk, jÅ«s nebloÄ·Äsit nevienu, izÅemot autovakuuma darbu, jo tas gaidÄ«s darÄ«juma pabeigÅ”anu. Bet, ja jÅ«s noÅemat kaut ko, ko kÄds cits var pieprasÄ«t, tad tas tiks bloÄ·Äts, bÅ«s sava veida Ä·Ädes reakcija. JÄizvairÄs no ilgstoÅ”iem darÄ«jumiem vietnÄs un mobilajÄs lietojumprogrammÄs.
Tas ir interesanti. Es bieži redzu, ka izstrÄdÄtÄji jautÄ: "KÄdu iepakojuma izmÄru man izvÄlÄties?".
Ir skaidrs, ka jo lielÄks ir paketes lielums, jo mazÄkas ir darÄ«jumu pieskaitÄmÄs izmaksas, t.i., papildu pieskaitÄmÄs izmaksas no darÄ«jumiem. Bet tajÄ paÅ”Ä laikÄ Å”im darÄ«jumam laiks palielinÄs.
Man ir ļoti vienkÄrÅ”s noteikums: Åemiet tik daudz, cik varat, bet nepÄrsniedziet izpildÄmos failus sekundÄ.
KÄpÄc sekunde? Izskaidrojums ir ļoti vienkÄrÅ”s un saprotams visiem, arÄ« netehniskiem cilvÄkiem. MÄs redzam reakciju. PaÅemsim 50 milisekundes. Ja kaut kas ir mainÄ«jies, tad mÅ«su acs reaÄ£Äs. Ja mazÄk, tad grÅ«tÄk. Ja kaut kas atbild pÄc 100 milisekundÄm, piemÄram, jÅ«s noklikŔķinÄjÄt ar peli un tÄ jums atbildÄja pÄc 100 milisekundÄm, jÅ«s jau jÅ«tat Å”o nelielo aizkavi. Sekunde jau tiek uztverta kÄ bremzes.
AttiecÄ«gi, ja mÄs sadalÄ«sim savas masveida operÄcijas 10 sekunžu sÄrijÄs, tad pastÄv risks, ka mÄs kÄdu bloÄ·Äsim. Un tas darbosies dažas sekundes, un cilvÄki to jau pamanÄ«s. TÄpÄc es nevÄlos darÄ«t vairÄk par sekundi. Bet tajÄ paÅ”Ä laikÄ nesajauciet to ļoti smalki, jo darÄ«juma izmaksas bÅ«s manÄmas. Pamatne bÅ«s cietÄka, un var rasties citas dažÄdas problÄmas.
MÄs izvÄlamies iepakojuma izmÄru. KatrÄ gadÄ«jumÄ mÄs to varam darÄ«t savÄdÄk. Var automatizÄt. Un mÄs esam pÄrliecinÄti par viena iepakojuma apstrÄdes efektivitÄti. Tas nozÄ«mÄ, ka mÄs IZDZÄM vienu iepakojumu vai ATJAUNINÄM.
Starp citu, viss, par ko es runÄju, nav tikai par DELETE. KÄ jÅ«s uzminÄjÄt, Ŕīs ir jebkuras lielapjoma darbÄ«bas ar datiem.
Un mÄs redzam, ka plÄns ir lielisks. JÅ«s varat redzÄt indeksa skenÄÅ”anu, tikai indeksa skenÄÅ”ana ir vÄl labÄka. Un mums ir iesaistÄ«ts neliels datu apjoms. Un nepilna sekunde piepildÄs. Super.
Un mums joprojÄm ir jÄpÄrliecinÄs, ka nenotiek degradÄcija. GadÄs, ka pirmie iepakojumi Ätri izdodas, un pÄc tam kļūst arvien sliktÄk un sliktÄk. Process ir tÄds, ka jums ir daudz jÄpÄrbauda. TieÅ”i tam ir paredzÄtas datu bÄzes laboratorijas.
Un mums vÄl kaut kas ir jÄsagatavo, lai tas ļautu mums to pareizi ievÄrot ražoÅ”anÄ. PiemÄram, mÄs varam ierakstÄ«t laiku žurnÄlÄ, mÄs varam ierakstÄ«t, kur mÄs Å”obrÄ«d atrodamies un kurus mÄs tagad esam izdzÄsuÅ”i. Un tas ļaus vÄlÄk saprast, kas notiek. Un, ja kaut kas noiet greizi, Ätri atrodiet problÄmu.
Ja mums ir jÄpÄrbauda pieprasÄ«jumu efektivitÄte un tas ir jÄatkÄrto daudzas reizes, tad ir tÄda lieta kÄ kolÄÄ£is bot. ViÅÅ” jau ir gatavs. To katru dienu izmanto desmitiem izstrÄdÄtÄju. Un viÅÅ” zina, kÄ pÄc pieprasÄ«juma 30 sekundÄs pieŔķirt milzÄ«gu terabaitu datubÄzi, savu kopiju. Un jÅ«s varat kaut ko izdzÄst un pateikt RESET un dzÄst vÄlreiz. JÅ«s varat eksperimentÄt ar to Å”ÄdÄ veidÄ. Es redzu Å”ai lietai nÄkotni. Un mÄs to jau darÄm.
Kas ir sadalÄ«Å”anas stratÄÄ£ijas? Es redzu 3 dažÄdas sadalÄ«Å”anas stratÄÄ£ijas, kuras izmanto pakotnes izstrÄdÄtÄji.
Pirmais ir ļoti vienkÄrÅ”s. Mums ir ciparu ID. SadalÄ«sim to dažÄdos intervÄlos un strÄdÄsim ar to. NegatÄ«vÄ puse ir skaidra. PirmajÄ segmentÄ mums var bÅ«t 100 Ä«stu atkritumu rindas, otrajÄ 5 rindas vai vispÄr nav, vai arÄ« visas 1 rindas izrÄdÄ«sies atkritumi. Ä»oti nevienmÄrÄ«gs darbs, bet viegli saplÄ«st. ViÅi paÅÄma maksimÄlo ID un to sadauzÄ«ja. TÄ ir naiva pieeja.
OtrÄ stratÄÄ£ija ir lÄ«dzsvarota pieeja. To izmanto Gitlab. ViÅi paÅÄma un skenÄja galdu. MÄs atradÄm ID pakotÅu robežas tÄ, ka katrÄ iepakojumÄ bija tieÅ”i 10 000 ierakstu. Un ielieciet tos rindÄ. Un tad apstrÄdÄjam. To var izdarÄ«t vairÄkos pavedienos.
Starp citu, arÄ« pirmajÄ stratÄÄ£ijÄ to var izdarÄ«t vairÄkos pavedienos. Tas nav grÅ«ti.
Bet ir vÄsÄka un labÄka pieeja. Å Ä« ir treÅ”Ä stratÄÄ£ija. Un, kad iespÄjams, labÄk to izvÄlÄties. MÄs to darÄm, pamatojoties uz Ä«paÅ”u indeksu. Å ajÄ gadÄ«jumÄ tas, visticamÄk, bÅ«s indekss atbilstoÅ”i mÅ«su atkritumu stÄvoklim un ID. MÄs iekļausim ID, lai tÄ bÅ«tu tikai indeksa skenÄÅ”ana, lai mÄs nepÄrietu uz kaudzi.
Parasti tikai indeksa skenÄÅ”ana ir ÄtrÄka nekÄ indeksa skenÄÅ”ana.
Un mÄs Ätri atrodam savus ID, kurus vÄlamies noÅemt. BATCH_SIZE mÄs atlasÄm iepriekÅ”. Un mÄs tos ne tikai iegÅ«stam, bet arÄ« iegÅ«stam Ä«paÅ”Ä veidÄ un nekavÄjoties uzlaužam. Bet mÄs slÄdzam, lai ja jau ir aizslÄgti, tad neslÄdzam, bet ejam tÄlÄk un Åemam nÄkamos. Tas ir bloÄ·Äts atjauninÄjumu izlaiÅ”anai. Å Ä« lieliskÄ Postgres funkcija ļauj mums strÄdÄt vairÄkos pavedienos, ja vÄlamies. Tas ir iespÄjams vienÄ plÅ«smÄ. Un Å”eit ir CTE - tas ir viens pieprasÄ«jums. Un Ŕī CTE otrajÄ stÄvÄ notiek reÄla dzÄÅ”ana - returning *
. JÅ«s varat atgriezt ID, bet tas ir labÄk *
ja jums nav daudz datu par katru rindiÅu.
KÄpÄc mums tas ir vajadzÄ«gs? Tas ir tas, par ko mums ir jÄziÅo. Tagad esam dzÄsuÅ”i tik daudz rindu. Un mums ir apmales pÄc ID vai Create_at, piemÄram, Å”is. JÅ«s varat veikt min, max. Var darÄ«t kaut ko citu. Å eit jÅ«s varat ievietot daudz lietu. Un tas ir ļoti Ärti uzraudzÄ«bai.
Ir vÄl viena piezÄ«me par indeksu. Ja mÄs nolemjam, ka Å”im uzdevumam ir nepiecieÅ”ams Ä«paÅ”s indekss, mums ir jÄpÄrliecinÄs, ka tas nesabojÄ tikai kaudzes atjauninÄjumus. Tas ir, Postgres ir Å”Äda statistika. To var redzÄt jÅ«su tabulas sadaÄ¼Ä pg_stat_user_tables. Varat redzÄt, vai tiek izmantoti karstie atjauninÄjumi.
Ir situÄcijas, kad jÅ«su jaunais indekss var tos vienkÄrÅ”i nogriezt. Un jums ir visi pÄrÄjie atjauninÄjumi, kas jau darbojas, palÄniniet. Ne tikai tÄpÄc, ka parÄdÄ«jÄs indekss (katrs indekss nedaudz palÄnina atjauninÄjumus, bet nedaudz), bet Å”eit tas joprojÄm to sabojÄ. Un Å”ai tabulai nav iespÄjams veikt Ä«paÅ”u optimizÄciju. Tas notiek dažreiz. Tas ir tik smalks, ka daži cilvÄki atceras. Un uz Ŕī grÄbekļa ir viegli uzkÄpt. ReizÄm gadÄs, ka jÄatrod pieeja no otras puses un tomÄr jÄiztiek bez Ŕī jaunÄ indeksa, vai jÄuztaisa cits indekss, vai kÄ citÄdi, piemÄram, var izmantot otro metodi.
Bet Ŕī ir optimÄlÄkÄ stratÄÄ£ija, kÄ sadalÄ«t pa partijÄm un Å”aut pa partijÄm ar vienu pieprasÄ«jumu, mazliet izdzÄst utt.
Ilgi darījumi
BloÄ·Äts autovakuums -
bloÄ·ÄÅ”anas problÄma -
Kļūda #5 ir liela. Nikolajs no Okmetra stÄstÄ«ja par Postgres monitoringu. IdeÄls Postgres monitorings diemžÄl nepastÄv. Daži atrodas tuvÄk, daži ir tÄlÄk. Okmeter ir pietiekami tuvu tam, lai bÅ«tu ideÄls, bet daudz kas pietrÅ«kst un ir jÄpievieno. Tam jÄbÅ«t gatavam.
PiemÄram, miruÅ”os koreÅ”us vislabÄk uzraudzÄ«t. Ja tabulÄ ir daudz miruÅ”u lietu, tad kaut kas nav kÄrtÄ«bÄ. LabÄk ir reaÄ£Ät tagad, pretÄjÄ gadÄ«jumÄ var bÅ«t degradÄcija, un mÄs varam apgulties. Tas notiek.
Ja ir liels IO, tad skaidrs, ka tas nav labi.
ArÄ« ilgi darÄ«jumi. Ilgus darÄ«jumus nevajadzÄtu atļaut OLTP. Un Å”eit ir saite uz fragmentu, kas ļauj Åemt Å”o fragmentu un jau izsekot gariem darÄ«jumiem.
KÄpÄc ilgi darÄ«jumi ir slikti? Jo visas slÄdzenes tiks atbrÄ«votas tikai beigÄs. Un mÄs visus apgrÅ«tinÄm. TurklÄt mÄs bloÄ·Äjam autovakuumu visiem galdiem. Tas nemaz nav labi. Pat ja replikÄ ir iespÄjots karstais gaidÄ«Å”anas režīms, tas joprojÄm ir slikti. KopumÄ nekur nav labÄk izvairÄ«ties no ilgstoÅ”iem darÄ«jumiem.
Ja mums ir daudz galdu, kas nav izsÅ«knÄtas, tad mums ir jÄbÅ«t brÄ«dinÄjumam. Å eit Å”Äda situÄcija ir iespÄjama. MÄs varam netieÅ”i ietekmÄt autovakuuma darbÄ«bu. Å is ir fragments no Avito, kuru es nedaudz uzlaboju. Un tas izrÄdÄ«jÄs interesants instruments, lai redzÄtu, kas mums ir ar autovakuumu. PiemÄram, daži galdi tur gaida un nesagaidÄ«s savu kÄrtu. Jums arÄ« jÄievieto uzraudzÄ«bÄ un jÄbÅ«t brÄ«dinÄjumam.
Un izdod blokus. Bloku koku mežs. Man patÄ«k no kÄda kaut ko paÅemt un uzlabot. Å eit es paÅÄmu forÅ”u rekursÄ«vo CTE no Data Egret, kurÄ redzams slūžu koku mežs. Tas ir labs diagnostikas rÄ«ks. Un uz tÄ pamata jÅ«s varat arÄ« izveidot uzraudzÄ«bu. Bet tas jÄdara uzmanÄ«gi. Jums ir jÄiesniedz neliels paziÅojums_taimauts. Un lock_timeout ir vÄlams.
Dažreiz visas Ŕīs kļūdas rodas kopÄ.
ManuprÄt, galvenÄ kļūda Å”eit ir organizatoriskÄ. Tas ir organizatoriski, jo tehnika nevelk. Tas ir 2. numurs ā viÅi pÄrbaudÄ«ja nepareizÄ vietÄ.
MÄs pÄrbaudÄ«jÄm nepareizÄ vietÄ, jo mums nebija ražoÅ”anas klona, āākuru ir viegli pÄrbaudÄ«t. IzstrÄdÄtÄjam var nebÅ«t piekļuves produkcijai.
Un mÄs pÄrbaudÄ«jÄm ne tur. Ja mÄs bÅ«tu tur pÄrbaudÄ«juÅ”i, mÄs paÅ”i to redzÄtu. IzstrÄdÄtÄjs to visu redzÄja pat bez DBA, ja viÅÅ” to pÄrbaudÄ«ja labÄ vidÄ, kur ir vienÄds datu apjoms un identiska atraÅ”anÄs vieta. ViÅÅ” bÅ«tu redzÄjis visu Å”o degradÄciju un viÅam bÅ«tu kauns.
VairÄk par autovakuumu. PÄc tam, kad esam veikuÅ”i masveida slaucÄ«Å”anu vairÄku miljonu rindu garumÄ, mums joprojÄm ir jÄveic PÄRPAKOÅ ANA. Tas ir Ä«paÅ”i svarÄ«gi indeksiem. ViÅi jutÄ«sies slikti pÄc tam, kad mÄs tur visu iztÄ«rÄ«sim.
Un ja vÄlies atgriezt ikdienas uzkopÅ”anas darbus, tad ieteiktu to darÄ«t biežÄk, bet mazÄk. Tas var bÅ«t reizi minÅ«tÄ vai pat biežÄk mazliet. Un jums ir jÄuzrauga divas lietas: lai Å”ai lietai nebÅ«tu kļūdu un lai tÄ neatpaliktu. Triks, ko es parÄdÄ«ju, to vienkÄrÅ”i atrisinÄs.
Tas, ko mÄs darÄm, ir atvÄrtais avots. Tas ir ievietots GitLab. Un mÄs to darÄm tÄ, lai cilvÄki varÄtu pÄrbaudÄ«t pat bez DBA. MÄs veicam datu bÄzes laboratoriju, tas ir, mÄs izsaucam bÄzes komponentu, pie kura Džo paÅ”laik strÄdÄ. Un jÅ«s varat paÄ·ert produkcijas kopiju. Tagad ir Joe for slack ievieÅ”ana, tur varat teikt: āizskaidrojiet Å”Ädu un tÄdu pieprasÄ«jumuā un nekavÄjoties iegÅ«stiet rezultÄtu savai datu bÄzes kopijai. Tur pat varat DZÄST, un neviens to nepamanÄ«s.
PieÅemsim, ka jums ir 10 terabaiti, mÄs izveidojam datu bÄzes laboratoriju arÄ« 10 terabaitus. Un ar vienlaicÄ«gÄm 10 terabaitu datu bÄzÄm vienlaikus var strÄdÄt 10 izstrÄdÄtÄji. Katrs var darÄ«t, ko vÄlas. Var izdzÄst, nomest utt. TÄ ir tÄda fantÄzija. Par to mÄs runÄsim rÄ«t.
To sauc par plÄnoÅ”anu. Tas ir smalks nodroÅ”inÄjums. Å Ä« ir sava veida fantÄzija, kas ievÄrojami novÄrÅ” kavÄÅ”anos attÄ«stÄ«bÄ, testÄÅ”anÄ un padara pasauli par labÄku vietu Å”ajÄ ziÅÄ. Tas nozÄ«mÄ, ka tas tikai ļauj izvairÄ«ties no problÄmÄm ar lielapjoma operÄcijÄm.
PiemÄrs: 5 terabaitu datubÄze, kopijas iegÅ«Å”ana mazÄk nekÄ 30 sekundÄs. Un tas pat nav atkarÄ«gs no izmÄra, tas ir, nav svarÄ«gi, cik terabaitu.
Šodien jūs varat doties uz
jautÄjumi
Ä»oti bieži reÄlÄs situÄcijÄs izrÄdÄs, ka datu, kam jÄpaliek tabulÄ, ir daudz mazÄk nekÄ dzÄÅ”amo. RespektÄ«vi, Å”ÄdÄ situÄcijÄ nereti ir vieglÄk Ä«stenot Å”Ädu pieeju, kad vienkÄrÅ”Äk ir izveidot jaunu objektu, kopÄt tur tikai nepiecieÅ”amos datus un izdalÄ«t veco tabulu. Ir skaidrs, ka Å”im brÄ«dim, kamÄr jÅ«s pÄrslÄgsit, ir nepiecieÅ”ama programmatiska pieeja. KÄ ir Ŕī pieeja?
TÄ ir ļoti laba pieeja un ļoti labs uzdevums. Tas ir ļoti lÄ«dzÄ«gs tam, ko dara pg_repack, tas ir ļoti lÄ«dzÄ«gs tam, kas jums jÄdara, veidojot ID 4 baitus. Daudzi ietvari to izdarÄ«ja pirms dažiem gadiem, un tikai plÄksnes ir izauguÅ”as, un tÄs ir jÄpÄrvÄrÅ” uz 8 baitiem.
Å is uzdevums ir diezgan grÅ«ts. MÄs to izdarÄ«jÄm. Un jums ir jÄbÅ«t ļoti uzmanÄ«giem. Ir slÄdzenes utt. Bet tas tiek darÄ«ts. Tas ir, standarta pieeja ir izmantot pg_repack. JÅ«s deklarÄjat Å”Ädu etiÄ·eti. Un pirms sÄkat tajÄ augÅ”upielÄdÄt momentuzÅÄmuma datus, jÅ«s arÄ« deklarÄjat vienu plÄksnÄ«ti, kas izseko visas izmaiÅas. Ir triks, ka jÅ«s pat nevarat izsekot dažÄm izmaiÅÄm. Ir smalkumi. Un tad jÅ«s pÄrslÄdzaties, veicot izmaiÅas. BÅ«s neliela pauze, kad visus slÄgsim, bet kopumÄ tas tiek darÄ«ts.
Ja paskatÄs uz pg_repack uz GitHub, tad tur, kad bija uzdevums konvertÄt ID no int 4 uz int 8, tad radÄs doma izmantot paÅ”u pg_repack. Tas ir arÄ« iespÄjams, taÄu tas ir nedaudz uzlauzts, taÄu tas darbosies arÄ« Å”ajÄ gadÄ«jumÄ. Varat iejaukties trigerÄ, ko izmanto pg_repack, un teikt: "Mums Å”ie dati nav vajadzÄ«gi", t.i., mÄs pÄrsÅ«tÄm tikai to, kas mums nepiecieÅ”ams. Un tad viÅÅ” vienkÄrÅ”i pÄrslÄdzas un viss.
Izmantojot Å”o pieeju, mÄs joprojÄm iegÅ«stam otro tabulas kopiju, kurÄ dati jau ir indeksÄti un salikti ļoti vienmÄrÄ«gi ar skaistiem indeksiem.
UzpÅ«Å”anÄs nav klÄt, tÄ ir laba pieeja. Bet es zinu, ka Å”im nolÅ«kam tiek mÄÄ£inÄts izstrÄdÄt automatizÄciju, t.i., izveidot universÄlu risinÄjumu. Es varu jÅ«s sazinÄties ar Å”o automatizÄciju. Tas ir rakstÄ«ts Python valodÄ, kas ir laba lieta.
Esmu tikai nedaudz no MySQL pasaules, tÄpÄc atnÄcu klausÄ«ties. Un mÄs izmantojam Å”o pieeju.
Bet tas ir tikai tad, ja mums ir 90%. Ja mums ir 5%, tad nav īpaŔi labi tos izmantot.
Paldies par ziÅojumu! Ja nav resursu, lai izveidotu pilnÄ«gu prod kopiju, vai ir kÄds algoritms vai formula, lai aprÄÄ·inÄtu slodzi vai izmÄru?
Labs jautÄjums. PagaidÄm mÄs varam atrast vairÄku terabaitu datu bÄzes. Pat ja aparatÅ«ra tur nav vienÄda, piemÄram, mazÄk atmiÅas, mazÄk procesora un diski nav gluži vienÄdi, bet tomÄr mÄs to darÄm. Ja pilnÄ«gi nekur nav, tad jÄdomÄ. Ä»aujiet man padomÄt lÄ«dz rÄ«tdienai, jÅ«s atnÄcÄt, mÄs parunÄsim, tas ir labs jautÄjums.
Paldies par ziÅojumu! JÅ«s vispirms sÄkÄt par to, ka ir forÅ”s Postgres, kuram ir tÄdi un tÄdi ierobežojumi, bet tas attÄ«stÄs. Un tas viss kopumÄ ir kruÄ·is. Vai tas viss nav pretrunÄ ar paÅ”u Postgres attÄ«stÄ«bu, kurÄ parÄdÄ«sies kaut kÄds DELETE deferents vai kas cits, kam vajadzÄtu noturÄt zemÄ lÄ«menÄ« to, ko mÄs te cenÅ”amies iesmÄrÄt ar kaut kÄdiem mÅ«su dÄ«vainajiem lÄ«dzekļiem?
Ja mÄs SQL teicÄm dzÄst vai atjauninÄt daudzus ierakstus vienÄ darÄ«jumÄ, tad kÄ Postgres to var izplatÄ«t tur? MÄs esam fiziski ierobežoti darbÄ«bÄs. MÄs to darÄ«sim vÄl ilgi. Un mÄs Å”ajÄ laikÄ bloÄ·Äsim utt.
Pabeigts ar indeksiem.
Varu pieÅemt, ka Å”o paÅ”u kontrolpunktu regulÄÅ”anu varÄtu automatizÄt. KÄdreiz tÄ varÄtu bÅ«t. Bet tad es Ä«sti nesaprotu jautÄjumu.
JautÄjums, vai ir tÄds attÄ«stÄ«bas vektors, kas iet Å”ur tur, un te tavÄjais iet paralÄli? Tie. Vai viÅi vÄl nav par to domÄjuÅ”i?
Es runÄju par principiem, kurus var izmantot tagad. Ir vÄl viens bots
Un kontrolpunktu regulÄÅ”anai varat rÄ«koties Å”Ädi: ja jums ir tÅ«kstoÅ” klasteru un dažÄdas aparatÅ«ras, dažÄdas virtuÄlÄs maŔīnas mÄkonÄ«, varat izmantot mÅ«su robotu.
Labdien JÅ«s runÄjÄt par ilgu darÄ«jumu bÄ«stamÄ«bu. JÅ«s teicÄt, ka autovakuums tiek bloÄ·Äts dzÄÅ”anas gadÄ«jumÄ. KÄ vÄl tas mums kaitÄ? Jo mÄs vairÄk runÄjam par vietas atbrÄ«voÅ”anu un iespÄju to izmantot. Kas vÄl mums trÅ«kst?
Autovakuums Å”eit varbÅ«t nav lielÄkÄ problÄma. Un tas, ka ilgstoÅ”s darÄ«jums var bloÄ·Ät citus darÄ«jumus, Ŕī iespÄja ir daudz bÄ«stamÄka. ViÅa var satikties vai nesatikties. Ja viÅa satikÄs, tad var bÅ«t ļoti slikti. Un ar autovakuumu - arÄ« tÄ ir problÄma. Ar ilgstoÅ”iem darÄ«jumiem OLTP ir divas problÄmas: slÄdzenes un autovakuums. Un, ja replikÄ ir iespÄjota karstÄ gaidstÄves atgriezeniskÄ saite, jÅ«s joprojÄm saÅemsit automÄtisko vakuuma bloÄ·ÄÅ”anu uz galvenÄs ierÄ«ces, tÄ tiks saÅemta no kopijas. Bet vismaz slÄdzenes nebÅ«s. Un bÅ«s loks. MÄs runÄjam par datu izmaiÅÄm, tÄpÄc slÄdzenes Å”eit ir svarÄ«gs punkts. Un, ja tas viss ir uz ilgu, ilgu laiku, tad arvien vairÄk darÄ«jumu tiek bloÄ·Äti. ViÅi var nozagt citus. Un parÄdÄs lok koki. Es sniedzu saiti uz fragmentu. Un Ŕī problÄma kļūst pamanÄmÄka ÄtrÄk nekÄ problÄma ar autovakuumu, kas var tikai uzkrÄties.
Paldies par ziÅojumu! JÅ«s sÄkÄt savu ziÅojumu, sakot, ka pÄrbaudÄ«jÄt nepareizi. TurpinÄjÄm domu, ka jÄÅem tas pats aprÄ«kojums, ar bÄzi tÄpat. PieÅemsim, ka mÄs sniedzÄm izstrÄdÄtÄjam bÄzi. Un viÅÅ” lÅ«gumu izpildÄ«ja. Un Ŕķiet, ka viÅam viss ir kÄrtÄ«bÄ. Bet viÅÅ” nepÄrbauda uz dzÄ«vu, bet uz dzÄ«vu, piemÄram, mums slodze ir 60-70%. Un pat ja mÄs izmantojam Å”o skaÅoÅ”anu, tas nedarbojas ļoti labi.
Ir svarÄ«gi, lai komandÄ bÅ«tu eksperts un jÄizmanto DBA eksperti, kas var paredzÄt, kas notiks ar reÄlu fona slodzi. Kad mÄs tikko veicÄm savas tÄ«rÄs izmaiÅas, mÄs redzam attÄlu. Bet progresÄ«vÄka pieeja, kad mÄs darÄ«jÄm to paÅ”u vÄlreiz, bet ar slodzi, kas simulÄta ar ražoÅ”anu. Tas ir diezgan forÅ”i. LÄ«dz tam laikam jÄpaaug. Tas ir kÄ pieauguÅ”ais. MÄs vienkÄrÅ”i skatÄ«jÄmies, kas mums ir, un arÄ« paskatÄ«jÄmies, vai mums ir pietiekami daudz resursu. Tas ir labs jautÄjums.
Kad mÄs jau veicam atkritumu atlasi un mums ir, piemÄram, dzÄsts karogs
Tas ir tas, ko autovacuum automÄtiski dara Postgres.
Ak, vai viÅÅ” to dara?
Autovakuums ir atkritumu savÄcÄjs.
Paldies!
Paldies par ziÅojumu! Vai ir iespÄja uzreiz noformÄt datu bÄzi ar sadalÄ«Å”anu tÄ, lai visi atkritumi no galvenÄs tabulas sasmÄrÄtos kaut kur malÄ?
Protams, ir.
Vai tad ir iespÄjams sevi pasargÄt, ja esam aizslÄguÅ”i galdu, kuru nedrÄ«kst lietot?
Protams, ir. Bet tas ir kÄ jautÄjums par vistu un olu. Ja mÄs visi zinÄm, kas notiks turpmÄk, tad, protams, visu darÄ«sim forÅ”i. Bet bizness mainÄs, ir jaunas slejas, jauni pieprasÄ«jumi. Un tad - ak, mÄs vÄlamies to noÅemt. Bet Ŕī ideÄlÄ situÄcija dzÄ«vÄ notiek, bet ne vienmÄr. Bet kopumÄ tÄ ir laba ideja. VienkÄrÅ”i saÄ«si un viss.
Avots: www.habr.com