Töredezettségmentesítésével asztalok minden mysql adatbázis

Ahogy a munka adatbázisok folyamatosan változtathatja meg azok tartalmát. Valami eltávolítására, hozzáadni vagy frissíteni - minden esetben, az új adatok felülírják, régi eltávolítjuk. Az eredmény töredezettségmentes asztalra, hogy végül hatással lehet az adatbázis teljesítményét. Az eljárás optimalizálása ilyen táblázatok ismert sokáig a csapat optimalizálja táblázatot MySQL. Azonban a csapat nem célja az összes optimiztsii vagy több asztalt. Ezért szükséges, hogy manipulálják minden asztalnál külön-külön. Azonban, ha van egy csomó táblázatok - ez már nehéz. Az interneten, sok szkripteket, amelyek egyszerűsítik a munkát. Van egy ilyen újrahasznosított forgatókönyvet, amely figyelembe veszi a számos tényező. A memóriában táblázatban nem igényel töredezettségmentesítés, és InnoDB táblák nem támogatják ezt a megközelítést. Plusz, mint a szabály alá, hogy optimalizálja az összes asztal, ahol a töredezettség nagyobb, mint 0 - azaz még a fragmentált 1%. Persze, a nagy táblák esetén ez kulcsfontosságú lehet - de bizonyos esetekben jobb, ha meghatározott optimalizálási küszöböt. Az alábbiakban maga sript:

#! / Bin / sh
echo -n "MySQL felhasználónév:"; olvasni felhasználónév
echo -n "MySQL jelszó:"; stty -echo; olvasni a jelszót; stty echo; visszhang
optimize_limit = 5

mysql -u $ username -p "$ password" -NBe "SHOW adatbázisokban;" | grep -v 'lost + found' | míg olvasható adatbázis; csinál
if [ "$ database" = "mysql"] || [ "$ Database" = "information_schema"]; majd folytassa; fi
mysql -u $ username -p "$ password" -NBe "SHOW TABLE STATUS"; $ Adatbázis |
míg az olvasott név motor változat rowformat sorok avgrowlength DataLength maxdatalength indexlength datafree autoincrement createtime updatetime checktime egybevetés ellenőrző createoptions megjegyzést;
csinál
if [ "$ DataLength" -eq "0"] || [ "$ Engine" = "MEMORY"] || [ "$ Engine" = "InnoDB"], majd tovább; fi
fragmentáció = $ (($ datafree * 100 / $ DataLength))
if [ "$ töredezettség" -gt $ optimize_limit]; majd
echo "$ tárol. $ name $ fragmentáció% töredezett."
mysql -u "$ username" -p "$ password" -NBe "optimalizálja TABLE $ name"; "$ Database"
fi
csinált
csinált

Amikor futtatja a szkript kell adnia a felhasználó nevét és jelszavát. A felhasználó kötelessége, hogy minden szükséges joggal. Jellemzően ez a gyökér. Részben optimize_limit - határ optimalizálás százalékában. Ja, és még egy fontos látott. Az optimalizálás az asztalnál - az le van zárva az írás. Ezért nagyon nagy asztal, a forgatókönyvet kell futtatni egy időben koggda nem aktív táblázatot, vagy ez, hogy azok optimalizálása kézzel.