Istwa fizikman efase 300 milyon dosye nan MySQL

Entwodiksyon

Bonjou. Mwen se ningenMe, pwomotè entènèt.

Kòm tit la di, istwa mwen an se istwa a nan efase fizikman 300 milyon dosye nan MySQL.

Mwen te vin enterese nan sa a, se konsa mwen deside fè yon rapèl (enstriksyon).

Kay - Alèt

Sèvè pakèt mwen itilize epi kenbe a gen yon pwosesis regilye ki kolekte done dènye mwa a soti nan MySQL yon fwa pa jou.

Anjeneral pwosesis sa a fini nan apeprè 1 èdtan, men fwa sa a li pa t fini pou 7 oswa 8 èdtan, ak alèt la pa t sispann eklate...

Jwenn rezon an

Mwen te eseye rekòmanse pwosesis la epi gade mòso bwa yo, men mwen pa t 'wè anyen ki mal.
Rekèt la te endèks kòrèkteman. Men, lè mwen te panse sou sa ki te ale mal, mwen reyalize ke gwosè baz done a se byen gwo.

hoge_table | 350'000'000 |

350 milyon dosye. Indexing te sanble ap travay kòrèkteman, jis trè dousman.

Koleksyon done obligatwa pou chak mwa te apeprè 12 dosye. Li sanble ke kòmandman an chwazi te pran yon tan long ak tranzaksyon an pa te egzekite pou yon tan long.

DB

Li esansyèlman yon tab ki grandi pa anviwon 400 antre chak jou. Baz done a te sipoze kolekte done sèlman pou dènye mwa a, Se poutèt sa, li te espere ke li ta reziste egzakteman kantite done sa a, men, malerezman, operasyon an Thorne pa te enkli.

Baz done sa a pa te devlope pa mwen. Mwen te pran li nan men yon lòt pwomotè, kidonk li te toujou santi tankou dèt teknik.

Te rive yon pwen lè volim done yo mete chak jou te vin gwo epi finalman rive nan limit li. Li sipoze ke lè w ap travay ak yon gwo kantite done, li ta nesesè yo separe yo, men sa a, malerezman, pa t 'fè.

Apre sa, mwen te antre nan aksyon.

Koreksyon

Li te pi rasyonèl pou redwi gwosè baz done a tèt li epi redwi tan pou trete l pase pou chanje lojik li menm.

Sitiyasyon an ta dwe chanje anpil si ou efase 300 milyon dosye, kidonk mwen deside fè sa... Eh, mwen te panse sa a ta definitivman travay.

Aksyon 1

Èske w te prepare yon backup serye, mwen finalman te kòmanse voye demann.

「Voye yon demann」

DELETE FROM hoge_table WHERE create_time <= 'YYYY-MM-DD HH:MM:SS';

"…"

"…"

"Hmm... Pa gen repons. Petèt pwosesis la pran yon bon bout tan?" — Mwen te panse, men jis nan ka, mwen gade grafana epi mwen wè ke chaj la disk t ap grandi trè vit.
"Danjere," mwen te panse ankò e imedyatman sispann demann lan.

Aksyon 2

Apre analize tout bagay, mwen reyalize ke volim nan done te twò gwo efase tout bagay nan yon fwa.

Mwen deside ekri yon script ki ta ka efase apeprè 1 dosye epi te lanse li.

「Mwen aplike script la」

"Kounye a, sa a pral definitivman travay," mwen te panse.

Aksyon 3

Dezyèm metòd la te travay, men li te vin trè travayè.
Pou fè tout bagay ak anpil atansyon, san yo pa nè nesesè, ta pran apeprè de semèn. Men, toujou, senaryo sa a pa satisfè kondisyon sèvis yo, kidonk nou te oblije deplase lwen li.

Se konsa, men sa mwen deside fè:

Kopi tablo a epi chanje non li

Soti nan etap anvan an, mwen reyalize ke efase tankou yon gwo kantite done kreye yon chaj egalman gwo. Se konsa, mwen deside kreye yon nouvo tab nan grate lè l sèvi avèk insert epi deplase done yo mwen te pral efase nan li.

| hoge_table     | 350'000'000|
| tmp_hoge_table |  50'000'000|

Si ou fè nouvo tab la menm gwosè ak pi wo a, vitès pwosesis done a ta dwe tou vin 1/7 pi vit.

Apre kreye tab la ak chanje non li, mwen te kòmanse sèvi ak li kòm tab la mèt. Koulye a, si mwen lage tab la ak 300 milyon dosye tout bagay ta dwe anfòm.
Mwen te jwenn ke tronke oswa gout kreye mwens anlè pase efase ak deside sèvi ak metòd sa a.

Akonplisman

「Voye yon demann」

INSERT INTO tmp_hoge_table SELECT FROM hoge_table create_time > 'YYYY-MM-DD HH:MM:SS';

"…"
"…"
"Em...?"

Aksyon 4

Mwen te panse lide anvan an ta travay, men apre yo fin voye demann lan insert, erè miltip parèt. MySQL pa padonnen.

Mwen te deja tèlman fatige ke mwen te kòmanse panse ke mwen pa vle fè sa ankò.

Mwen te chita epi mwen te panse epi mwen reyalize ke petèt te gen twòp demann insert pou yon sèl fwa ...
Mwen te eseye voye yon demann insert pou kantite done ke baz done a ta dwe trete nan 1 jou. Sa te pase!

Oke, apre sa nou kontinye voye demann pou menm kantite done. Depi nou bezwen retire done yon mwa, nou repete operasyon sa a apeprè 35 fwa.

Chanje non yon tab

Isit la chans te sou bò mwen an: tout bagay te ale fèt san pwoblèm.

Alèt disparèt

Vitès pwosesis pakèt ogmante.

Anvan pwosesis sa a te pran apeprè inèdtan, kounye a li pran apeprè 2 minit.

Apre mwen te asire ke tout pwoblèm yo te rezoud, mwen lage 300 milyon dosye. Mwen te efase tab la epi mwen te santi m reborn.

Rezime

Mwen reyalize ke pwosesis wotasyon te manke nan pwosesis pakèt, e se sa ki te pwoblèm prensipal la. Sa a kalite erè achitekti mennen nan yon fatra nan tan.

Èske w panse sou chaj la pandan replikasyon done lè w ap efase dosye nan baz done a? Ann pa twò chaje MySQL.

Moun ki byen vèrs nan baz done pral definitivman pa rankontre tankou yon pwoblèm. Pou tout rès nou, mwen espere atik sa a te itil.

Mèsi pou lekti!

Nou pral trè kontan si ou di nou si ou te renmen atik sa a, si tradiksyon an klè, si li te itil pou ou?

Sous: www.habr.com

Add nouvo kòmantè