Jak provést optimalizaci tabulek v databázi MySQL
OPTIMIZE TABLE
- odstraní z tabuky nepotřebná data po úkonech jako je mazání, rozdělování řádků, opravy v tabulce
- setřídí indexy
- zaktualizuje statistiky
Pokud nad tabulkou neprobíhají výše uvedené operace není z pravidla potřeba ji optimalizovat.
Spuštěním příkazu:
OPTIMIZE TABLE `nazev_tabulky`;
provedete optimalizaci tabulky.
Z tabulky se odstraní prázdné řádky, které tam zůstaly po mazání a následně provede setřízení indexů a aktualizaci statistik.
Na filesystémů, kde si zobrazíte přehled všech tabulek (souboru) po spuštění této akce přibude soubor s názvem podobný tomuto
#sql-ib1745-3689028624.ibd
Při spouštění optimalizace nad tabulkou mající 68GB se vytvořil výše uvedený soubor, který rostl až do výše 50GB a poté se zastavil. Na souboru se mění datum jelikož provádí setřízení indexů a optimalizaci statistik a dalo by se to považovat za výslednou velikost po optimalizaci +-pár MB navíc.
Tabulka v našem případě byla sražena o 18GB což je veliká úspora a projeví se na běhu obratem ať už v rychlosti provádění DUMPu či jiných úkonech nad touto tabulkou.
Upozornění: Příkaz pro optimalizaci tabulky danou tabulku zamkne a nepustí do ni nikoho. Ideální je však zastavení aplikace nahlížející do databáze před touto akcí.
Časově se to může velice lišit. V našem případě se jednalo o čas 4h.
po dokončení by měl vypadat výstup nějak takto:
Table Op Msg_type Msg_text
nazev_db.nazeb_tabulky optimize note Table does not support optimize, doing recreate + analyze instead
nazev_db.nazeb_tabulky optimize status OK