MySQL တွင် မှတ်တမ်းပေါင်း သန်း 300 ကို ရုပ်ပိုင်းဆိုင်ရာ ဖျက်ခြင်း၏ ဇာတ်လမ်း

နိဒါန်း

မင်္ဂလာပါ။ ကျွန်တော်က ningenMe၊ ဝဘ်ဆော့ဖ်ဝဲရေးသားသူပါ။

ခေါင်းစဉ်ပြောထားသည့်အတိုင်း၊ ကျွန်ုပ်၏ဇာတ်လမ်းသည် MySQL တွင် မှတ်တမ်းပေါင်း သန်း 300 ကို ရုပ်ပိုင်းဆိုင်ရာ ဖျက်ပစ်သည့် ဇာတ်လမ်းဖြစ်သည်။

ဒါကို စိတ်ဝင်စားလာတဲ့အတွက် သတိပေးချက် (ညွှန်ကြားချက်များ) ပြုလုပ်ဖို့ ဆုံးဖြတ်ခဲ့ပါတယ်။

အိမ် - သတိပေးချက်

အသုတ်လိုက်မှာ ဆာဗာကျွန်တော်အသုံးပြုပြီး ထိန်းသိမ်းထားတဲ့ database မှာ MySQL ကနေ ပြီးခဲ့တဲ့လက data တွေကို တစ်နေ့တစ်ကြိမ် စုဆောင်းတဲ့ ပုံမှန်လုပ်ငန်းစဉ်တစ်ခု ရှိပါတယ်။

ပုံမှန်အားဖြင့် ဤလုပ်ငန်းစဉ်သည် ၁ နာရီခန့်အတွင်း ပြီးစီးသော်လည်း ဤအကြိမ်သည် ၇ နာရီ သို့မဟုတ် ၈ နာရီကြာပြီးနောက် သတိပေးချက် ထွက်ပေါ်လာခြင်း မရပ်တန့်ခဲ့ပါ။

အကြောင်းပြချက်ရှာဖွေနေ

လုပ်ငန်းစဉ်ကို ပြန်လည်စတင်ပြီး မှတ်တမ်းများကို ကြည့်ရှုရန် ကြိုးစားခဲ့သော်လည်း အမှားအယွင်းမရှိခဲ့ပါ။
မေးခွန်းကို မှန်ကန်စွာ အညွှန်းတပ်ထားပါသည်။ ဒါပေမယ့် ဘာများမှားနေပြီလဲလို့ တွေးလိုက်တော့ ဒေတာဘေ့စ် အရွယ်အစားက တော်တော်ကြီးတာကို သိလိုက်ရတယ်။

hoge_table | 350'000'000 |

သန်း ၃၅၀ မှတ်တမ်းများ။ အညွှန်းကိန်းသည် မှန်ကန်စွာ လုပ်ဆောင်နေပုံရပြီး အလွန်နှေးကွေးပါသည်။

တစ်လလျှင် လိုအပ်သော အချက်အလက်စုဆောင်းမှုမှာ မှတ်တမ်းပေါင်း 12 ခန့်ဖြစ်သည်။ Select command သည် အချိန်အတော်ကြာပုံရပြီး ငွေပေးငွေယူကို အချိန်အတော်ကြာ မလုပ်ဆောင်ခဲ့ပုံရသည်။

DB

၎င်းသည် နေ့စဉ် စာရင်းသွင်းမှု 400 ခန့်ဖြင့် တိုးပွားလာသော ဇယားတစ်ခုဖြစ်သည်။ ဒေတာဘေ့စ်သည် ပြီးခဲ့သောလအတွက်သာ ဒေတာစုဆောင်းရမည်ဖြစ်ပြီး၊ ထို့ကြောင့် ဤဒေတာပမာဏအတိအကျကို ခံနိုင်ရည်ရှိမည်ဟု မျှော်လင့်ထားသော်လည်း၊ ကံမကောင်းစွာဖြင့်၊ လှည့်ပတ်လည်ပတ်မှုတွင် မပါဝင်ပါ။

ဤဒေတာဘေ့စ်ကို ကျွန်ုပ်မှ မတီထွင်ခဲ့ပါ။ အခြား developer ထံမှ လွှဲပြောင်းယူခဲ့ခြင်းဖြစ်သောကြောင့် နည်းပညာအကြွေးများကဲ့သို့ ခံစားရပါသည်။

နေ့စဥ်ထည့်သွင်းသည့် ဒေတာပမာဏ ကြီးမားလာပြီး နောက်ဆုံးတွင် ၎င်း၏ ကန့်သတ်ချက်သို့ ရောက်ရှိသွားသောအခါတွင် အချက်တစ်ခု ပေါ်လာသည်။ ဤမျှများပြားသော ဒေတာပမာဏဖြင့် အလုပ်လုပ်သောအခါ ၎င်းတို့ကို ခွဲခြားထားရန် လိုအပ်မည်ဟု ယူဆသော်လည်း၊ ဤအရာသည် ကံမကောင်းစွာဖြင့် မပြီးမြောက်ခဲ့ပါ။

ပြီးတော့ ငါ လှုပ်ရှားလာတယ်။

ပြင်ဆင်ချက်

ဒေတာဘေ့စ်၏ အရွယ်အစားကို လျှော့ချရန်နှင့် လော့ဂျစ်ကိုယ်တိုင် ပြောင်းလဲခြင်းထက် ၎င်းကို လုပ်ဆောင်ရန် အချိန်ကို လျှော့ချခြင်းသည် ပို၍ ဆင်ခြင်တုံတရားဖြစ်သည်။

မှတ်တမ်းပေါင်း သန်း 300 ကို ဖျက်လိုက်လျှင် အခြေအနေ သိသိသာသာ ပြောင်းလဲသွားသင့်သည် ၊ ဒါကြောင့် ကျွန်တော် ဒီလိုလုပ်ဖို့ ဆုံးဖြတ်လိုက်တယ်... အယ်၊ ဒါက သေချာပေါက် အလုပ်ဖြစ်မယ်ထင်တယ်။

လုပ်ဆောင်ချက် ၁

ယုံကြည်စိတ်ချရသော မိတ္တူတစ်ခုကို ပြင်ဆင်ပြီးသောအခါ နောက်ဆုံးတွင် ကျွန်ုပ်သည် တောင်းဆိုမှုများကို စတင်လိုက်ပါသည်။

"တောင်းဆိုမှုတစ်ခု ပေးပို့ခြင်း''

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

"... "

"... "

"ဟမ်... အဖြေမရှိပါ။ လုပ်ငန်းစဉ်က အချိန်အတော်ကြာမှ ဖြစ်ကောင်းဖြစ်နိုင်ပါတယ်။” - ငါထင်ခဲ့တယ်၊ ဒါပေမယ့်၊ အခြေအနေမှာ၊ ငါ Grafana ကိုကြည့်လိုက်ပြီး disk load ကအရမ်းမြန်လာတာကိုတွေ့လိုက်ရတယ်။
“အန္တရာယ်များတယ်” လို့ ပြန်တွေးပြီး တောင်းဆိုတာကို ချက်ချင်းရပ်လိုက်တယ်။

လုပ်ဆောင်ချက် ၁

အရာအားလုံးကို ခွဲခြမ်းစိတ်ဖြာပြီးနောက်၊ ဒေတာပမာဏသည် အားလုံးကို တစ်ပြိုင်နက် ဖျက်ပစ်ရန် အလွန်ကြီးမားသည်ကို ကျွန်ုပ်သဘောပေါက်လိုက်ပါသည်။

မှတ်တမ်းပေါင်း 1 လောက်ကို ဖျက်ပစ်နိုင်တဲ့ ဇာတ်ညွှန်းရေးဖို့ ဆုံးဖြတ်ပြီး အဲဒါကို စတင်ခဲ့ပါတယ်။

''ကျွန်တော် ဇာတ်ညွှန်းကို အကောင်အထည်ဖော်တာပါ''

“အခုတော့ သေချာပေါက် အလုပ်ဖြစ်မှာပါ” လို့ ကျွန်တော် တွေးမိတယ်။

လုပ်ဆောင်ချက် ၁

ဒုတိယနည်းလမ်းက အလုပ်ဖြစ်ပေမဲ့ အလုပ်သမား အလွန်အကျွံဖြစ်လာတယ်။
မလိုအပ်တဲ့ အာရုံကြောတွေမပါဘဲ အရာရာကို ဂရုတစိုက်လုပ်ဆောင်ဖို့က နှစ်ပတ်လောက်ကြာပါတယ်။ သို့သော်လည်း၊ ဤအခြေအနေသည် ဝန်ဆောင်မှုလိုအပ်ချက်များနှင့် မကိုက်ညီသောကြောင့် ကျွန်ုပ်တို့သည် ၎င်းနှင့်ဝေးရာသို့ ထွက်ခွာသွားရမည်ဖြစ်သည်။

ဒါဆို ငါလုပ်မယ်လို့ ဆုံးဖြတ်ထားတာက

ဇယားကို ကူးယူပြီး အမည်ပြောင်းပါ။

ယခင်အဆင့်မှ၊ ဤမျှများပြားသောဒေတာပမာဏကို ဖျက်ခြင်းသည် တူညီသောကြီးမားသောဝန်ကိုဖန်တီးပေးကြောင်း ကျွန်ုပ်သဘောပေါက်ပါသည်။ ဒါကြောင့် ထည့်သွင်းပြီး ဖျက်ပစ်မယ့်ဒေတာကို ထည့်သွင်းအသုံးပြုပြီး ဇယားအသစ်တစ်ခုကို ဖန်တီးဖို့ ဆုံးဖြတ်လိုက်ပါတယ်။

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

အကယ်၍ သင်သည် ဇယားအသစ်ကို အထက်ဖော်ပြပါ အရွယ်အစားနှင့် တူညီအောင် ပြုလုပ်ပါက၊ ဒေတာ စီမံဆောင်ရွက်မှု အမြန်နှုန်းသည်လည်း 1/7 ပိုမြန်သင့်ပါသည်။

ဇယားကိုဖန်တီးပြီး အမည်ပြောင်းပြီးနောက်၊ ၎င်းကို မာစတာဇယားအဖြစ် စတင်အသုံးပြုခဲ့သည်။ အခု သန်း 300 စံချိန်တင်ထားတဲ့ ဇယားကို ချလိုက်ရင် အားလုံးအဆင်ပြေသင့်တယ်။
ဖြတ်တောက်ခြင်း သို့မဟုတ် အစက်ချခြင်းသည် ဖျက်ခြင်းထက် ပိုနည်းသည်ကို ကျွန်ုပ်သိရှိခဲ့ပြီး ဤနည်းလမ်းကို အသုံးပြုရန် ဆုံးဖြတ်ခဲ့သည်။

သတ်ခြင်း

"တောင်းဆိုမှုတစ်ခု ပေးပို့ခြင်း''

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

"... "
"... "
"အမ်...?"

လုပ်ဆောင်ချက် ၁

ယခင်အကြံသည် အလုပ်ဖြစ်မည်ဟု ကျွန်တော်ထင်ခဲ့သော်လည်း ထည့်သွင်းတောင်းဆိုမှုကို ပေးပို့ပြီးနောက်တွင် အမှားအယွင်းများစွာ ပေါ်လာခဲ့သည်။ MySQL က ခွင့်မလွှတ်ပါဘူး။

ကျွန်တော် အရမ်းပင်ပန်းနေပြီမို့ ဒါကို ဆက်မလုပ်ချင်တော့ဘူးလို့ တွေးလိုက်မိတယ်။

ထိုင်ပြီး တွေးကြည့်တော့ တစ်ကြိမ်ထဲ မေးစရာတွေ အရမ်းများနေတယ်ဆိုတာ သိလိုက်ရတယ်...
ဒေတာဘေ့စ်သည် ၁ ရက်အတွင်း လုပ်ဆောင်သင့်သည့် ဒေတာပမာဏအတွက် ထည့်သွင်းတောင်းဆိုမှုတစ်ခုကို ပေးပို့ရန် ကြိုးစားခဲ့သည်။ ဖြစ်သွားပြီ!

ထို့နောက် ကျွန်ုပ်တို့သည် တူညီသောဒေတာပမာဏအတွက် တောင်းဆိုမှုများကို ဆက်လက်ပေးပို့ပါသည်။ ကျွန်ုပ်တို့သည် တစ်လ၏တန်ဖိုးရှိဒေတာကို ဖယ်ရှားရန် လိုအပ်သောကြောင့်၊ ကျွန်ုပ်တို့သည် ဤလုပ်ဆောင်ချက်ကို ၃၅ ကြိမ်ခန့် ထပ်လုပ်ပါသည်။

ဇယားတစ်ခုအမည်ပြောင်းခြင်း။

ကံတရားက ငါ့ဘက်မှာရှိတယ်၊ အရာအားလုံးက ချောမွေ့သွားတယ်။

သတိပေးချက် ပျောက်ဆုံးသွားခဲ့သည်။

Batch processing speed တိုးလာပါတယ်။

ယခင်က ဤလုပ်ငန်းစဉ်သည် တစ်နာရီခန့်ကြာမြင့်ခဲ့ပြီး ယခုအခါ ၂ မိနစ်ခန့်ကြာမြင့်ခဲ့သည်။

ပြဿနာအားလုံးကို ဖြေရှင်းပြီးဖြစ်ကြောင်း သေချာပြီးနောက်၊ မှတ်တမ်းပေါင်း သန်း 300 ကို ချခဲ့ပါတယ်။ စားပွဲကို ဖျက်ပြီး ပြန်လည်မွေးဖွားလာသည်ဟု ခံစားရသည်။

အကျဉ်းချုပ်

batch processing တွင် rotation processing ပျောက်ဆုံးနေကြောင်း သဘောပေါက်ခဲ့ပြီး ၎င်းသည် အဓိကပြဿနာဖြစ်သည်။ ဒီလိုမျိုး ဗိသုကာဆိုင်ရာ အမှားအယွင်းက အချိန်ကို ဖြုန်းတီးစေပါတယ်။

ဒေတာဘေ့စ်မှ မှတ်တမ်းများကို ဖျက်သည့်အခါ ဒေတာပုံတူပွားမှုအတွင်း ဝန်ကို စဉ်းစားနေပါသလား။ MySQL ကို overload မလုပ်ပါနဲ့။

ဒေတာဘေ့စ်များကို ကောင်းစွာနားလည်ထားသူများသည် ထိုကဲ့သို့သောပြဿနာမျိုးနှင့် ကြုံတွေ့ရမည်မဟုတ်ပေ။ ကျန်တဲ့သူတွေအတွက်တော့ ဒီဆောင်းပါးက အသုံးဝင်မယ်လို့ မျှော်လင့်ပါတယ်။

ဖတ်ရှုမှုအတွက် ကျေးဇူးတင်ပါသည်။

ဤဆောင်းပါးကို သင်နှစ်သက်သည်ဖြစ်စေ၊ ဘာသာပြန်သည်ဖြစ်စေ ရှင်းလင်းသည်ဖြစ်စေ၊ သင့်အတွက် အသုံးဝင်သည်ဖြစ်စေ ပြောပြပါက ကျွန်ုပ်တို့ကို အလွန်ဝမ်းမြောက်မိပါသည်။

source: www.habr.com