Introduzzjoni
Bongu. Jien ningenMe, żviluppatur tal-web.
Kif jgħid it-titlu, l-istorja tiegħi hija l-istorja li tħassar fiżikament 300 miljun rekord fil-MySQL.
Sirt interessat f'dan, għalhekk iddeċidejt li nagħmel tfakkira (struzzjonijiet).
Dar - Twissija
Is-server tal-lott li nuża u nżomm għandu proċess regolari li jiġbor id-dejta tal-aħħar xahar mill-MySQL darba kuljum.
Normalment dan il-proċess jitlesta fi żmien madwar siegħa, iżda din id-darba ma tlestiex għal 1 jew 7 sigħat, u t-twissija ma waqfitx titfaċċa...
Tiftix għal raġuni
Ippruvajt nibda mill-ġdid il-proċess u nħares lejn ir-zkuk, imma ma rajt xejn ħażin.
Il-mistoqsija ġiet indiċjata b'mod korrett. Imma meta ħsibt dwar dak li kien sejjer ħażin, indunajt li d-daqs tad-database huwa pjuttost kbir.
hoge_table | 350'000'000 |
350 miljun rekord. L-indiċjar deher li qed jaħdem b'mod korrett, biss bil-mod ħafna.
Il-ġbir tad-dejta meħtieġ fix-xahar kien ta' madwar 12 rekord. Jidher li l-kmand tal-għażla ħa ħafna żmien u t-tranżazzjoni ma kinitx eżegwita għal żmien twil.
DB
Hija essenzjalment tabella li tikber b'madwar 400 daħla kuljum. Id-database kellha tiġbor data biss għall-aħħar xahar, għalhekk, kien mistenni li tiflaħ eżattament dan l-ammont ta 'data, iżda, sfortunatament, l-operazzjoni ta' rotazzjoni ma kinitx inkluża.
Din id-database ma ġietx żviluppata minni. Ħadt minn żviluppatur ieħor, u għalhekk xorta ħassejt bħal dejn tekniku.
Wasal punt meta l-volum tad-dejta mdaħħla kuljum sar kbir u fl-aħħar laħaq il-limitu tiegħu. Huwa preżunt li meta taħdem ma 'ammont daqshekk kbir ta' dejta, ikun meħtieġ li jiġu separati, iżda dan, sfortunatament, ma sarx.
U mbagħad dħalt fl-azzjoni.
Korrezzjoni
Kien aktar razzjonali li tnaqqas id-daqs tad-database nnifisha u tnaqqas iż-żmien għall-ipproċessar tagħha milli tinbidel il-loġika nnifisha.
Is-sitwazzjoni għandha tinbidel b'mod sinifikanti jekk tħassar 300 miljun rekord, għalhekk iddeċidejt li nagħmel hekk... Eh, ħsibt li dan żgur jaħdem.
Azzjoni 1
Wara li ħejjejt backup affidabbli, fl-aħħar bdejt nibgħat it-talbiet.
「Tibgħat talba」
DELETE FROM hoge_table WHERE create_time <= 'YYYY-MM-DD HH:MM:SS';
"…"
"…"
“Hmm... Ebda risposta. Forsi l-proċess jieħu ħafna żmien?” — Ħsibt, imma fil-każ, ħarist lejn grafana u rajt li t-tagħbija tad-diska kienet qed tikber malajr ħafna.
"Perikoluż," erġajt ħsibt u immedjatament waqqaf it-talba.
Azzjoni 2
Wara li analizzajt kollox, indunajt li l-volum tad-dejta kien kbir wisq biex iħassar kollox f'daqqa.
Iddeċidejt li nikteb script li jista 'jħassar madwar 1 rekord u nedietha.
「Nimplimenta l-iskrittura」
"Issa dan żgur se jaħdem," ħsibt.
Azzjoni 3
It-tieni metodu ħadem, iżda rriżulta li kien ħafna xogħol intensiv.
Biex tagħmel kollox bir-reqqa, mingħajr nervituri bla bżonn, tieħu madwar ġimgħatejn. Iżda xorta waħda, dan ix-xenarju ma ssodisfax ir-rekwiżiti tas-servizz, għalhekk kellna nimxu 'l bogħod minnu.
Allura hawn dak li ddeċidejt li nagħmel:
Ikkopja t-tabella u semmiha mill-ġdid
Mill-pass preċedenti, indunajt li t-tħassir ta 'ammont daqshekk kbir ta' dejta joħloq tagħbija daqstant kbira. Għalhekk iddeċidejt li noħloq tabella ġdida mill-bidu billi tuża daħħal u ċċaqlaq id-dejta li kont se nħassar fiha.
| hoge_table | 350'000'000|
| tmp_hoge_table | 50'000'000|
Jekk tagħmel it-tabella l-ġdida l-istess daqs bħal hawn fuq, il-veloċità tal-ipproċessar tad-dejta għandha ssir ukoll 1/7 aktar mgħaġġla.
Wara li ħoloq it-tabella u semmietha mill-ġdid, bdejt nużaha bħala t-tabella prinċipali. Issa jekk niżżel it-tabella bi 300 miljun rekord kollox għandu jkun tajjeb.
Sibt li truncate jew qatra toħloq inqas overhead milli tħassar u ddeċidejt li tuża dan il-metodu.
Prestazzjoni
「Tibgħat talba」
INSERT INTO tmp_hoge_table SELECT FROM hoge_table create_time > 'YYYY-MM-DD HH:MM:SS';
"…"
"…"
"Em...?"
Azzjoni 4
Ħsibt li l-idea preċedenti taħdem, iżda wara li bagħtet it-talba għall-inserzjoni, dehru żbalji multipli. MySQL mhux taħfer.
Diġa kont tant għajjien li bdejt naħseb li ma ridtx nagħmel dan aktar.
Poġġejt u ħsibt u rrealizzajt li forsi kien hemm wisq insert queries għal darba waħda...
Ippruvajt nibgħat talba għall-inserzjoni għall-ammont ta' data li d-database għandha tipproċessa f'ġurnata. Ġara!
Ukoll, wara li nkomplu nibagħtu talbiet għall-istess ammont ta 'dejta. Peress li għandna bżonn inneħħu data ta 'valur ta' xahar, nirrepetu din l-operazzjoni madwar 35 darba.
Tibdil-isem ta' tabella
Hawnhekk ix-xorti kienet min-naħa tiegħi: kollox mexa bla xkiel.
Twissija nieqes
Il-veloċità tal-ipproċessar tal-lott żdiedet.
Qabel dan il-proċess kien jieħu madwar siegħa, issa jieħu madwar 2 minuti.
Wara li kont ċert li l-problemi kollha ġew solvuti, waqajt 300 miljun rekord. Ħassejt il-mejda u ħassejtni twelidt mill-ġdid.
Sommarju
Irrealizzajt li l-ipproċessar tar-rotazzjoni kien nieqes fl-ipproċessar tal-lott, u dik kienet il-problema ewlenija. Dan it-tip ta 'żball arkitettoniku jwassal għal ħela ta' ħin.
Taħseb dwar it-tagħbija waqt ir-replikazzjoni tad-dejta meta tħassar ir-rekords mid-database? Ejja ma tagħbija żejda MySQL.
Dawk li huma kapaċi sew fid-databases żgur mhux se jiltaqgħu ma 'problema bħal din. Għall-bqija minnkom, nittama li dan l-artikolu kien utli.
Grazzi tal-qari!
Inkunu ferħanin ħafna jekk tgħidilna jekk għoġbokx dan l-artikolu, jekk it-traduzzjoni hijiex ċara, jekk kinitx utli għalik?
Sors: www.habr.com