Ҳикояи аз ҷиҳати ҷисмонӣ нест кардани 300 миллион сабт дар MySQL

Муқаддима

Салом. Ман ningenMe ҳастам, таҳиягари веб.

Тавре ки дар сарлавҳа омадааст, достони ман достони аз ҷиҳати ҷисмонӣ нест кардани 300 миллион сабт дар MySQL мебошад.

Ман ба ин шавқ пайдо кардам, бинобар ин ман қарор додам, ки ёдраскунам (дастурҳо).

Хона - Огоҳӣ

Сервери партияе, ки ман истифода мебарам ва нигоҳ медорам, як раванди муқаррарӣ дорад, ки дар як рӯз як маротиба маълумоти моҳи гузаштаро аз MySQL ҷамъ меорад.

Одатан, ин раванд дар давоми тақрибан 1 соат анҷом меёбад, аммо ин дафъа он 7 ё 8 соат ба анҷом нарасид ва ҳушдор аз пайдо шуданаш қатъ нашуд...

Дар ҷустуҷӯи сабаб

Ман кӯшиш кардам, ки равандро аз нав оғоз кунам ва гузоришҳоро бубинам, аммо ман ҳеҷ чизи нодурустро надидам.
Дархост дуруст индексатсия карда шуд. Аммо вақте ки ман дар бораи он фикр мекардам, ки чӣ нодуруст аст, ман фаҳмидам, ки андозаи пойгоҳи додаҳо хеле калон аст.

hoge_table | 350'000'000 |

350 миллион сабт. Ба назар чунин менамуд, ки индексатсия дуруст кор мекунад, танҳо хеле суст.

Ҷамъоварии маълумот дар як моҳ тақрибан 12 000 000 сабтро ташкил медод. Чунин ба назар мерасад, ки фармони интихоб муддати тӯлонӣ гирифт ва транзаксия муддати тӯлонӣ иҷро нашуд.

DB

Ин аслан ҷадвалест, ки ҳар рӯз тақрибан 400 000 вуруд меафзояд. Махзани маълумот бояд танҳо дар як моҳи охир маълумот ҷамъоварӣ мекард, бинобар ин интизор мерафт, ки он маҳз ба ин миқдор маълумот тоб меорад, аммо, мутаассифона, амалиёти гардиш дохил карда нашуд.

Ин базаи маълумотро ман таҳия накардаам. Ман онро аз як таҳиягари дигар гирифтам, бинобар ин он ҳамчун қарзи техникӣ ҳис мекард.

Вақте ки ҳаҷми маълумоте, ки ҳамарӯза ворид карда мешавад, калон шуд ва ниҳоят ба ҳадди худ расид. Тахмин карда мешавад, ки хангоми кор бо чунин микдори зиёди маълумот онхоро чудо кардан лозим меомад, аммо ин, мутаассифона, ичро нашуд.

Ва он гоҳ ман ба амал омадам.

Ислоҳ

Кам кардани андозаи худи база ва кам кардани вақти коркарди он назар ба тағир додани худи мантиқ оқилонатар буд.

Агар шумо 300 миллион сабтро нест кунед, вазъият бояд ба таври назаррас тағйир ёбад, ман қарор додам, ки ин корро кунам ... Э, ман фикр мекардам, ки ин бешубҳа кор мекунад.

Амал 1

Нусхаи боэътимодро омода карда, ман ниҳоят ба фиристодани дархостҳо шурӯъ кардам.

「Ирсоли дархост」

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

"..."

"..."

«Хм... Чавоб нест. Шояд ин раванд вақти зиёдро талаб кунад?» — фикр мекардам, вале ба хар хол ба графана нигох кардам ва дидам, ки бори диск хеле тез меафзояд.
«Хатарнок», — боз фикр кардам ва дархол дархостро бас кардам.

Амал 2

Пас аз таҳлили ҳама чиз, ман фаҳмидам, ки ҳаҷми маълумот барои нест кардани ҳама чиз хеле калон аст.

Ман тасмим гирифтам, ки скрипте нависам, ки метавонад тақрибан 1 сабтҳоро нест кунад ва онро оғоз кунам.

'Ман скриптро амалӣ мекунам'

"Акнун ин бешубҳа кор хоҳад кард" ман фикр кардам.

Амал 3

Усули дуюм кор кард, вале хеле мехнатталаб шуд.
Барои анҷом додани ҳама кор бодиққат, бидуни асабҳои нолозим, тақрибан ду ҳафта лозим аст. Аммо ба ҳар ҳол, ин сенария ба талаботи хидмат ҷавобгӯ набуд, мо маҷбур шудем, ки аз он дур шавем.

Пас, ин аст он чизе ки ман қарор додам:

Ҷадвалро нусхабардорӣ кунед ва номи онро тағир диҳед

Аз қадами қаблӣ, ман фаҳмидам, ки нест кардани чунин миқдори зиёди маълумот бори баробар калонро эҷод мекунад. Аз ин рӯ, ман қарор додам, ки бо истифода аз ворид ҷадвали навро аз сифр созам ва маълумотеро, ки ман онро нест карданӣ будам, интиқол диҳам.

| 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';

"..."
"..."
"Эм...?"

Амал 4

Ман фикр мекардам, ки идеяи қаблӣ кор хоҳад кард, аммо пас аз фиристодани дархост, хатогиҳои сершумор пайдо шуданд. MySQL бахшанда нест.

Ман аллакай чунон хаста шудам, ки ман фикр мекардам, ки дигар ин корро кардан намехоҳам.

Ман нишастам ва фикр кардам ва фаҳмидам, ки шояд дар як вақт дархостҳои дохилкунӣ аз ҳад зиёд буданд ...
Ман кӯшиш кардам, ки дархости дохилкуниро барои миқдори маълумоте, ки пойгоҳи додаҳо бояд дар 1 рӯз коркард кунад, ирсол кунам. Ҳодиса!

Хуб, пас аз ин мо фиристодани дархостҳоро барои ҳамон миқдори маълумот идома медиҳем. Азбаски мо бояд маълумоти якмоҳаро нест кунем, мо ин амалиётро тақрибан 35 маротиба такрор мекунем.

Иваз кардани номи ҷадвал

Ана, бахт ба тарафи ман буд: хама чиз муътадил гузашт.

Огоҳӣ нопадид шуд

Суръати коркарди партия афзуд.

Пештар ин раванд тақрибан як соат тӯл мекашид, ҳоло тақрибан 2 дақиқа вақт мегирад.

Пас аз он ки ман боварӣ доштам, ки ҳама мушкилот ҳал карда шудаанд, ман 300 миллион сабтро партофтам. Ман ҷадвалро нест кардам ва худро дубора таваллуд кардам.

Хулоса

Ман фаҳмидам, ки коркарди ротатсия дар коркарди партия мавҷуд нест ва ин мушкилоти асосӣ буд. Ин гуна хатой меъморй боиси бехуда сарф шудани вакт мегардад.

Оё шумо дар бораи сарборӣ ҳангоми такрори маълумот ҳангоми нест кардани сабтҳо аз пойгоҳи додаҳо фикр мекунед? Биёед MySQL-ро аз ҳад зиёд бор накунем.

Онҳое, ки дар пойгоҳи додаҳо хуб медонанд, бешубҳа бо чунин мушкилот дучор нахоҳанд шуд. Барои дигарон, ман умедворам, ки ин мақола муфид буд.

Ташаккур барои хондан!

Агар ба мо бигӯед, ки оё ин мақола ба шумо писанд омад, оё тарҷума равшан аст ва оё он барои шумо муфид буд, мо хеле шод хоҳем шуд?

Манбаъ: will.com

Илова Эзоҳ