Indaba Yokususwa Okungokoqobo Kwamarekhodi Ayizigidi ezingama-300 ku-MySQL

Isingeniso

Sawubona. Ngingu-ningenMe, umthuthukisi wewebhu.

Njengoba isihloko sisho, indaba yami yindaba yokususa amarekhodi ayizigidi ezingama-300 ku-MySQL.

Ngaba nesithakazelo kulokhu, ngakho nganquma ukwenza isikhumbuzi (imiyalelo).

Ikhaya - Isexwayiso

Iseva yenqwaba engiyisebenzisayo nengiyigcinayo inenqubo evamile eqoqa idatha yenyanga edlule ku-MySQL kanye ngosuku.

Ngokuvamile le nqubo iqedwa phakathi nehora elingu-1, kodwa kulokhu ayizange iqede amahora angu-7 noma angu-8, futhi isexwayiso asizange siyeke ukuphuma...

Isesha isizathu

Ngazama ukuqalisa kabusha inqubo futhi ngibheke izingodo, kodwa angizange ngibone lutho olungalungile.
Umbuzo ukhonjwe ngendlela efanele. Kodwa lapho ngicabanga ngalokho okwakungahambi kahle, ngabona ukuthi usayizi wesizindalwazi mkhulu kakhulu.

hoge_table | 350'000'000 |

350 million amarekhodi. Ukwenza inkomba kubonakala kusebenza kahle, kuhamba kancane kakhulu.

Ukuqoqwa kwedatha edingekayo ngenyanga bekucishe kube amarekhodi ayi-12. Kubonakala sengathi umyalo okhethiwe uthathe isikhathi eside futhi umsebenzi akwenziwanga isikhathi eside.

DB

Empeleni itafula elikhula ngokufakwa okungaba ngu-400 nsuku zonke. I-database bekufanele iqoqe idatha kuphela ngenyanga edlule, ngakho-ke, bekulindeleke ukuthi ikwazi ukumelana ncamashi naleli nani ledatha, kodwa, ngeshwa, ukusebenza kokujikeleza akuzange kufakwe.

Le database ayizange ithuthukiswe yimi. Ngiyithathe komunye unjiniyela, ngakho-ke bekusezwakala njengesikweletu sobuchwepheshe.

Kwafika isikhathi lapho ivolumu yedatha efakwa nsuku zonke iba nkulu futhi ekugcineni yafinyelela umkhawulo wayo. Kucatshangwa ukuthi lapho usebenza ngenani elikhulu kangaka ledatha, kuzodingeka ukubahlukanisa, kodwa lokhu, ngeshwa, akuzange kwenziwe.

Ngabe sengingena esenzweni.

Ukulungiswa

Bekunengqondo kakhulu ukunciphisa usayizi wesizindalwazi uqobo nokunciphisa isikhathi sokuyicubungula kunokushintsha i-logic ngokwayo.

Isimo kufanele sishintshe kakhulu uma usula amarekhodi ayizigidi ezingu-300, ngakho nginqume ukwenza kanjalo... Eh, ngicabange ukuthi lokhu kuzosebenza nakanjani.

Isenzo 1

Ngemva kokulungisa isipele esithembekile, ekugcineni ngaqala ukuthumela izicelo.

「Ukuthumela isicelo」

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

"…"

"…"

“Hmm... Ayikho impendulo. Mhlawumbe inqubo ithatha isikhathi eside?” - Ngacabanga, kodwa uma kwenzeka, ngabheka i-grafana futhi ngabona ukuthi umthwalo wediski wawukhula ngokushesha kakhulu.
“Kuyingozi,” ngaphinda ngacabanga futhi ngaso leso sikhathi ngasimisa isicelo.

Isenzo 2

Ngemva kokuhlaziya yonke into, ngabona ukuthi umthamo wedatha wawumkhulu kakhulu ukususa yonke into ngesikhathi esisodwa.

Nginqume ukubhala umbhalo ongasusa amarekhodi angaba ngu-1 futhi ngiyethule.

「Ngisebenzisa iskripthi」

“Manje lokhu kuzosebenza nakanjani,” ngicabanga.

Isenzo 3

Indlela yesibili yasebenza, kodwa yabonakala idinga abasebenzi abaningi.
Ukwenza konke ngokucophelela, ngaphandle kwezinzwa ezingadingekile, kuzothatha cishe amasonto amabili. Kodwa noma kunjalo, lesi simo asizange sihlangabezane nezimfuneko zenkonzo, ngakho kwadingeka sisuke kuso.

Ngakho nakhu enginqume ukukwenza:

Kopisha ithebula futhi uliqambe kabusha

Kusukela esinyathelweni sangaphambilini, ngabona ukuthi ukususa inani elikhulu kangaka ledatha kudala umthwalo omkhulu ngokulinganayo. Ngakho-ke nginqume ukudala ithebula elisha kusukela ekuqaleni ngisebenzisa ukufaka futhi ngihambise idatha engizoyisusa kulo.

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

Uma wenza ithebula elisha lilingane nosayizi ongenhla, isivinini sokucubungula idatha kufanele futhi sisheshe sibe ngu-1/7.

Ngemva kokudala itafula nokuliqamba kabusha, ngaqala ukulisebenzisa njengetafula eliyinhloko. Manje uma ngiwisa itafula ngamarekhodi ayizigidi ezingu-300 konke kufanele kuhambe kahle.
Ngithole ukuthi i-truncate noma i-drop idala i-overhead encane kunokususa futhi nganquma ukusebenzisa le ndlela.

Ukugcwaliseka

「Ukuthumela isicelo」

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

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

Isenzo 4

Bengicabanga ukuthi umbono wangaphambili uzosebenza, kodwa ngemva kokuthumela isicelo sokufaka, amaphutha amaningi avele. I-MySQL ayithetheleli.

Ngangivele ngikhathele kangangokuthi ngaqala ukucabanga ukuthi angisafuni ukwenza lokhu.

Ngahlala ngacabanga ngabona ukuthi mhlawumbe miningi imibuzo yokufaka isikhathi esisodwa...
Ngizamile ukuthumela isicelo sokufaka yenani ledatha okumele isizindalwazi kufanele siyicubungule osukwini olungu-1. Kwenzekile!

Nokho, ngemva kwalokho siyaqhubeka nokuthumela izicelo zenani elifanayo ledatha. Njengoba sidinga ukususa idatha yenyanga, siphinda lo msebenzi cishe izikhathi ezingu-35.

Ukuqamba kabusha ithebula

Nansi inhlanhla ngakimi: konke kwahamba kahle.

Isexwayiso silahlekile

Isivinini sokucubungula inqwaba sinyukile.

Ngaphambilini le nqubo ithatha cishe ihora, manje ithatha cishe imizuzu emi-2.

Ngemva kokuba nginesiqiniseko sokuthi zonke izinkinga zixazululiwe, ngehlisa amarekhodi ayizigidi ezingu-300. Ngasusa itafula ngazizwa ngizalwa kabusha.

Isifinyezo

Ngabona ukuthi ukucubungula ukuzungezisa kwakungekho ekucubungulweni kwe-batch, futhi leyo bekuyinkinga enkulu. Lolu hlobo lwephutha lezakhiwo luholela ekumosheni isikhathi.

Ingabe ucabanga ngomthwalo ngesikhathi sokuphindaphinda idatha lapho ususa amarekhodi kusizindalwazi? Masingalayishi kakhulu i-MySQL.

Labo abanolwazi olunzulu ku-database ngeke bahlangabezane nenkinga enjalo. Kunina nonke, ngithemba ukuthi lesi sihloko sibe usizo.

Siyabonga ngokufunda!

Sizojabula kakhulu uma usitshela ukuthi usithandile yini lesi sihloko, noma ngabe ukuhumusha kucacile, ukuthi bekuwusizo yini kuwe?

Source: www.habr.com

Engeza amazwana