Ang istorya sa pisikal nga pagtangtang sa 300 milyon nga mga rekord sa MySQL

Pasiuna

Hello. Ako si ningenMe, web developer.

Sama sa giingon sa titulo, ang akong istorya mao ang istorya sa pisikal nga pagtangtang sa 300 milyon nga mga rekord sa MySQL.

Nainteres ko niini, mao nga nakahukom ko nga maghimog pahinumdom (mga instruksyon).

Panimalay - Alerto

Ang batch server nga akong gigamit ug gipadayon adunay regular nga proseso nga nagkolekta sa datos sa miaging bulan gikan sa MySQL kausa sa usa ka adlaw.

Kasagaran kini nga proseso nahuman sulod sa mga 1 ka oras, apan niining panahona wala kini makompleto sulod sa 7 o 8 ka oras, ug ang alerto wala mohunong sa pag-pop up...

Pagpangita sa usa ka hinungdan

Gisulayan nako nga i-restart ang proseso ug tan-awon ang mga troso, apan wala akoy nakita nga sayup.
Ang pangutana gi-index sa husto. Apan sa dihang naghunahuna ko kon unsay nahitabo, akong naamgohan nga ang gidak-on sa database dako kaayo.

hoge_table | 350'000'000 |

350 milyon nga mga rekord. Ang pag-indeks ingon og nagtrabaho sa husto, hinay kaayo.

Ang gikinahanglan nga pagkolekta sa datos kada bulan maoy gibana-bana nga 12 ka mga rekord. Morag dugay ang pinili nga sugo ug ang transaksyon wala matuman sa dugay nga panahon.

DB

Kini usa ka lamesa nga motubo sa mga 400 nga mga entry kada adlaw. Ang database kinahanglan nga mangolekta og datos alang lamang sa miaging bulan, busa, gilauman nga kini makasugakod sa tukma niining gidaghanon sa datos, apan, sa kasubo, ang rotate operation wala gilakip.

Kini nga database wala nako gihimo. Gikuha nako kini gikan sa laing developer, mao nga gibati gihapon kini sama sa teknikal nga utang.

Miabot ang punto nga ang gidaghanon sa datos nga gisulod kada adlaw nahimong dako ug sa kataposan nakaabot sa limitasyon niini. Gituohan nga kung nagtrabaho sa ingon ka daghan nga datos, kinahanglan nga ibulag sila, apan kini, sa kasubo, wala nahimo.

Ug dayon milihok ko.

Pagtul-id

Mas makataronganon ang pagpakunhod sa gidak-on sa database mismo ug pagpakunhod sa oras sa pagproseso niini kaysa pag-usab sa lohika mismo.

Kinahanglang magbag-o pag-ayo ang sitwasyon kung imong papason ang 300 ka milyon nga mga rekord, mao nga nakahukom ko nga buhaton kini ... Eh, naghunahuna ko nga kini molihok.

Aksyon 1

Kay nakaandam na ug kasaligang backup, sa kataposan nagsugod ko sa pagpadala og mga hangyo.

γ€ŒNagpadala usa ka hangyo」

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

"…”

"…”

β€œHmm... Walay tubag. Tingali dugay ang proseso?” β€” Naghunahuna ko, apan sa kaso lang, akong gitan-aw ang grafana ug nakita nga ang disk load kusog kaayong mitubo.
β€œDelikado,” naghunahuna ko pag-usab ug gihunong dayon ang hangyo.

Aksyon 2

Human sa pag-analisar sa tanan, akong naamgohan nga ang gidaghanon sa datos dako kaayo aron matangtang ang tanan sa makausa.

Nakahukom ko sa pagsulat og script nga makatangtang sa mga 1 ka mga rekord ug gilusad kini.

γ€ŒGipatuman nako ang script」

β€œKaron mosalir na kini,” naghunahuna ko.

Aksyon 3

Ang ikaduha nga pamaagi nagtrabaho, apan nahimo nga labi ka kusog sa pagtrabaho.
Ang pagbuhat sa tanan nga maampingon, nga walay wala kinahanglana nga nerbiyos, mokabat ug mga duha ka semana. Apan sa gihapon, kini nga senaryo wala makatuman sa mga kinahanglanon sa serbisyo, mao nga kinahanglan namong mopahilayo niini.

Busa ania ang akong nakahukom nga buhaton:

Kopyaha ang lamesa ug ilisan ang ngalan niini

Gikan sa miaging lakang, akong naamgohan nga ang pagtangtang sa ingon ka daghan nga datos nagmugna og parehas nga dako nga load. Mao nga nakahukom ko nga maghimo usa ka bag-ong lamesa gikan sa wala gamit ang insert ug ibalhin ang datos nga akong papason niini.

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

Kung himuon nimo ang bag-ong lamesa nga parehas ang gidak-on sa taas, ang katulin sa pagproseso sa datos kinahanglan usab nga mahimong 1/7 nga mas paspas.

Human sa paghimo sa lamesa ug pag-ilis sa ngalan niini, gisugdan nako kini sa paggamit isip master table. Karon kung akong ihulog ang lamesa nga adunay 300 milyon nga mga rekord kinahanglan nga maayo ang tanan.
Akong nahibal-an nga ang truncate o drop nagmugna og gamay nga overhead kaysa pagtangtang ug nakahukom nga gamiton kini nga pamaagi.

Pag-ayo

γ€ŒNagpadala usa ka hangyo」

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

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

Aksyon 4

Naghunahuna ko nga ang miaging ideya molihok, apan pagkahuman ipadala ang hangyo sa pagsulud, daghang mga sayup ang nagpakita. Ang MySQL dili mapasayloon.

Gikapoy na kaayo ko nga nagsugod ko sa paghunahuna nga dili na nako gusto nga buhaton kini.

Milingkod ko ug naghunahuna ug nakaamgo nga tingali adunay daghan kaayong mga pangutana sa pagsulod sa usa ka higayon...
Gisulayan nako ang pagpadala ug insert request para sa kantidad sa datos nga kinahanglang iproseso sa database sulod sa 1 ka adlaw. Nahitabo!

Aw, pagkahuman niana nagpadayon kami sa pagpadala sa mga hangyo alang sa parehas nga kantidad sa datos. Tungod kay kinahanglan namon nga tangtangon ang usa ka bulan nga kantidad sa datos, gisubli namon kini nga operasyon mga 35 ka beses.

Pag-usab sa ngalan sa usa ka lamesa

Ania ang swerte sa akong kiliran: hapsay ang tanan.

Nawala ang alerto

Ang katulin sa pagproseso sa batch misaka.

Kaniadto kini nga proseso mokabat ug usa ka oras, karon mokabat ug mga 2 ka minuto.

Human nako maseguro nga nasulbad na ang tanang problema, gihulog nako ang 300 ka milyon nga mga rekord. Gitangtang nako ang lamesa ug gibati nako nga natawo pag-usab.

Summary

Nakaamgo ko nga ang pagproseso sa rotation nawala sa pagproseso sa batch, ug kana ang panguna nga problema. Kini nga matang sa sayup sa arkitektura nagdala sa pag-usik sa oras.

Naghunahuna ka ba bahin sa pagkarga sa panahon sa pagkopya sa datos kung gitangtang ang mga rekord gikan sa database? Dili ta mag-overload sa MySQL.

Kadtong mga batid kaayo sa mga database siguradong dili makasugat sa ingon nga problema. Para sa uban kaninyo, nanghinaut ko nga kining artikuloha mapuslanon.

Salamat sa pagbasa!

Malipay kami pag-ayo kung sultihan mo kami kung gusto nimo kini nga artikulo, kung ang paghubad klaro, kung kini mapuslanon kanimo?

Source: www.habr.com

Idugang sa usa ka comment