MySQL 8 - optymalizuj wszystkie tabele + indeksy

Nov 27 2020

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

1 RickJames Nov 29 2020 at 14:36

Nie kłopocz się. InnoDB w większości dba o siebie. OPTIMIZEtymczasowo zajmuje trochę zmarnowanej przestrzeni, ale nowe odpady pojawiają się, gdy pojawiają się wkładki / itp. Korzyść z wydajności OPTIMIZEjest bliska zeru.

1 RolandoMySQLDBA Nov 27 2020 at 04:39

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 mysql
  • Aug 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ł.