MySQL 8 - optymalizuj wszystkie tabele + indeksy
Mam kilka tabel (InnoDB) w kilku bazach danych (MySQL 8), na których codziennie uruchamiam skrypty Garbage Collect, usuwając przestarzałe rekordy, które nie są już potrzebne. Wszystkie tabele mają indeksy.
Czy optymalizacja wszystkich tabel, powiedzmy co tydzień, miałaby sens / byłaby w ogóle korzystna, aby zwiększyć wydajność? Jeśli tak, czy istnieje dobre polecenie do uruchomienia, aby to zrobić?
Próbowałem to zrobić
sudo mysqlcheck -o --all-databases
Ale otrzymaj następujący komunikat o błędzie:
note : Table does not support optimize, doing recreate + analyze instead
status : OK
Odpowiedzi
Nie kłopocz się. InnoDB w większości dba o siebie. OPTIMIZE
tymczasowo zajmuje trochę zmarnowanej przestrzeni, ale nowe odpady pojawiają się, gdy pojawiają się wkładki / itp. Korzyść z wydajności OPTIMIZE
jest bliska zeru.
Te komunikaty są normalne dla InnoDB. Możesz to kontynuować.
InnoDB Storage Engine działa w OPTIMIZE TABLE mydb.mytable;
ten sposób
ALTER TABLE mydb.mytable ENGINE=InnoDB;
ANALYZE TABLE mydb.mytable;
Wspominałem o tym przez lata:
Sep 27, 2015
: Jak mogę defragmentować tabele w MySQL?Jun 24, 2015
: wytyczne dotyczące wywoływania tabeli optymalizacji po zmianie tabeli?Feb 27, 2013
: Jaka jest różnica między optymalizacją tabeli a analizą tabeli w mysqlAug 04, 2011
: Optymalizacja domyślnych ustawień InnoDB
Zalecam przeprowadzanie analiz codziennie lub co tydzień
sudo mysqlcheck --analyze --all-databases
Następnie przeprowadzaj optymalizację raz w miesiącu lub raz na kwartał.