L-istorja tat-tħassir fiżika ta '300 miljun rekord fil-MySQL

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

Żid kumment