У овом ћемо чланку размотрити методе компресије и дефрагментације табела и база података у МиСКЛ / МариаДБ, што ће вам омогућити да уштедите простор на диску из базе података.
У великим пројектима, временом базе података постају огромне величине и увек се поставља питање како се с тим носити. Постоји неколико могућности за решавање овог проблема. Можете смањити количину података у самој бази података брисањем старих информација, поделити базу података на неколико, повећати количину простора на диску на серверу или компримовати табеле.
Други важан аспект функционисања базе података је потреба за периодичном дефрагментацијом табела и база података, што може значајно убрзати њихов рад.
Садржај:
- Компресија и оптимизација базе података с типом ИнноДБ таблице
- Стисните МиИСАМ табеле у МиСКЛ
- Оптимизација табеле и базе података у МиСКЛ / МариаДБ
Компресија и оптимизација базе података с типом ИнноДБ таблице
Ибдата1 и иб_лог датотеке
На многим пројектима са табелама Иннодб постоји проблем са огромним величинама датотека ибдата1 и иб_лог. Разлог је у већини случајева последица погрешних поставки МиСКЛ / МариаДБ сервера или архитектуре базе података. Све информације из табела Иннодб сачувано у датотеци ибдата1, чији се простор не ослобађа сам од себе. Радије чувам податке таблице у засебним датотекама ибд *. Да бисте то урадили, у конфигурацијској датотеци ми.цнф додај линију:
иннодб_филе_пер_табле
или
иннодб_филе_пер_табле = 1
Ако је ваш сервер већ конфигуриран и имате неколико радних база података с таблицама Иннодб, треба да урадите следеће:
- Направите сигурносну копију свих база података на вашем серверу (осим мискл и перформанце_сцхема). Думп базе се могу уклонити следећом наредбом:
# мисклдумп -у [корисничко име] -п [лозинка] [база_наме]> [думп_филе.скл]
- Након резервне копије базе података, зауставите мискл / мариадб сервер;
- Промените подешавања у датотеци ми.цфг;
- Избришите датотеке ибдата1 и иб_лог Фајлови
- Покрените мискл / мариадб сервер;
- Вратите све базе података из сигурносне копије:
# мискл -у [корисничко име] -п [лозинка] [име_податка] < [dump_file.sql]
Након завршетка овог поступка, све табеле Иннодб биће сачувани у засебним датотекама и датотеци ибдата1 неће расти експоненцијално.
Компресија таблице ИнноДБ
Можете компримирати табеле са подацима типа текста / БЛОБ. Ако имате сличне таблице, можете уштедети доста простора на диску.
Имам базу података иннодб_тест са табелама које би се потенцијално могле компримовати и ослободити простор на диску. Прије свих радова топло препоручујем да направите сигурносну копију свих својих база података. Повежите се на мискл сервер:
# мискл -у роот -п
На мискл конзоли пријавите се на жељену базу података:
# усе иннодб_тест;
За попис табела и њихове величине користите упит:
СЕЛЕЦТ име_табеле АС "Табела",
РОУНД ((дата_ленгтх + индек_ленгтх) / 1024/1024), 2) АС "Величина у (МБ)"
ФРОМ информатион_сцхема.ТАБЛЕС
ВХЕРЕ табле_сцхема = "иннодб_тест"
НАРОЧИТЕ ПО (дата_ленгтх + индек_ленгтх) ДЕСЦ;
Где је иннодб_тест назив ваше базе података.
Вероватно је да се неке табеле могу сажети. Узмите табелу б_црм_евент_релатионс као пример. Покрените захтев:
мискл> АЛТЕР ТАБЛЕ б_црм_евент_релатионс РОВ_ФОРМАТ = ЦОМПРЕССЕД;
Упит је у реду, погођено је 0 редова (3,27 сец) Евиденција: 0 дупликата: 0 Упозорења: 0
Након извршења можете видети да се због компресије величина табеле смањила са 26 на 11 МБ.
Захваљујући компресији стола, можете уштедети много простора на диску на серверу. Али, када радите са компримованим табелама, оптерећење процесора ће се повећавати. Компресија табеле треба користити ако немате проблема са ресурсима процесора, али постоји проблем са дисковним простором.
Стисните МиИСАМ табеле у МиСКЛ
За компримовање табела формата Миисам, морате да користите посебан захтев са конзоле сервера, а не на мискл конзоли. Да бисте компримовали жељену табелу, урадите:
# миисампацк -б / вар / либ / мискл / тест / модк_сессион
Где / вар / либ / мискл / тест / модк_сессион је пут до ваше табеле. Нажалост, нисам имао надувену базу података и морао сам да извршим компресију на малим таблицама, али резултат је и даље видљив (датотека је компримована од 25 до 18 МБ):
# ду -сх модк_сессион.МИД
25М модк_сессион.МИД
# миисампацк -б / вар / либ / мискл / тест / модк_сессион
Сажимање /вар/либ/мискл/тест/модк_сессион.МИД: (4933 записа) - Израчунавање статистике - Сажимање датотеке 29,84% Не заборавите да покренете миисамцхк -рк на компримованим табелама
# ду -сх модк_сессион.МИД
18М модк_сессион.МИД
У захтеву смо одредили -б прекидач, када се дода, креира се сигурносна копија табеле пре компресије и обележи као ОЛД:
# лс -ла модк_сессион.ОЛД
-рв-р ----- 1 мискл мискл 25550000 17 дек. 15:20 модк_сессион.ОЛД
# ду -сх модк_сессион.ОЛД
25М модк_сессион.ОЛД
Оптимизација табеле и базе података у МиСКЛ / МариаДБ
Да бисте оптимизирали табеле и базе података, препоручује се извођење дефрагментације. Проверите да ли у бази података постоје табеле које захтевају дефрагментацију.
Уђимо у МиСКЛ конзолу, изаберемо потребну базу података и извршимо упит:
одаберите дата_наме, роунд (дата_ленгтх / 1024/1024) као дата_ленгтх_мб, округли (дата_фрее / 1024/1024) као дата_фрее_мб из информације_сцхема.таблес где је заокружено (дата_фрее / 1024/1024)> 50 како бисте их наредили по дата_фрее_мб;
Тако ћемо приказати све табеле које имају најмање 50 МБ неискориштеног простора:
+-------------------------------+----------------+--------------+ | ТАБЛЕ_НАМЕ | дата_ленгтх_мб | дата_фрее_мб | + ------------------------------- + ---------------- + -------------- + | б_диск_делетед_лог_в2 | 402 | 64 | | б_црм_тимелине_бинд | 827 | 150 | | б_диск_објецт_патх | 980 | 72 |
дата_ленгтх_мб - укупна величина табеле
дата_фрее_мб - неискориштени простор таблице
Можемо дефрагментирати ове табеле. Проверите простор на диску пре:
# лс -лх / вар / либ / мискл / иннодб_тест / | греп б_
-рв-р ----- 1 мискл мискл 402М 17 дек 15:43 б_диск_делетед_лог_в2.МИД -рв-р ----- 1 мискл мискл 828М 17 дек. 14:52 б_црм_тимелине_бинд.МИД -рв-р ----- 1 мискл мискл 981М 17. децембра 15:45 б_диск_објецт_патх.МИД
Да бисте оптимизовали ове табеле, користите следећу наредбу на мискл конзоли:
# ОПТИМИЗИРАЈТЕ ТАБЕЛУ б_диск_делетед_лог_в2, б_диск_објецт_патх, б_црм_тимелине_бинд;
Након успешне дефрагментације, требало би да имате овако нешто:
+-------------------------------+----------------+--------------+ | ТАБЛЕ_НАМЕ | дата_ленгтх_мб | дата_фрее_мб | + ------------------------------- + ---------------- + -------------- + | б_диск_делетед_лог_в2 | 74 | 0 | | б_црм_тимелине_бинд | 115 | 0 | | б_диск_објецт_патх | 201 | 0 |
Као што видите, дата_фрее_мб је сада 0, а укупна величина табеле се значајно смањила (3-4 пута).
Можете и да се дефрагментирате помоћу услужног програма мисклцхецк са конзоле сервера:
# мисклцхецк -о иннодб_тест б_воркфлов_филе -у роот -п иннодб_тест.б_воркфлов_филе
Где је иннодб_тест ваша база података
А б_воркфлов_филе је назив жељене табеле
Да бисте оптимизирали све таблице базе података која вам је потребна, покрените наредбу на конзоли сервера:
# мисклцхецк -о иннодб_тест -у роот -п
Где је иннодб_тест назив жељене базе података.
Или покрените оптимизацију свих база података на серверу:
# мисклцхецк -о - све базе података -у роот -п
Ако проверите величину базе података пре и после оптимизације, тада се величина у целини смањила:
# ду -сх
2.5Г
# мисклцхецк -о иннодб_тест -у роот -п
Унесите лозинку: иннодб_тест.б_админ_нотифи напомена: Табела не подржава оптимизацију, радећи поново креирање + анализирање уместо статуса: ОК иннодб_тест.б_админ_нотифи_ланг напомена: Табела не подржава оптимизацију, понављајући + анализирајте уместо статуса: ОК иннодб_тест.б_адв_баннер напомена: Табела не подржава оптимизујте, радећи поново креирајте + анализирајте уместо статуса: ОК ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
# ду -сх
1.7Г
Тако, да бисте уштедјели простор на серверу, можете повремено оптимизирати и компримирати таблице и базе података. Понављам, пре него што обавите било какав посао оптимизације, направите резервну копију базе података.