MySQL 8 - optimiser toutes les tables + index

Nov 27 2020

J'ai un tas de tables (InnoDB) dans plusieurs bases de données (MySQL 8), sur lesquelles j'exécute des scripts Garbage Collect, quotidiennement, en supprimant les enregistrements périmés qui ne sont plus nécessaires. Toutes les tables ont des index sur elles.

Serait-il logique / serait-il avantageux d'optimiser toutes les tables, disons chaque semaine, pour augmenter les performances? Si tel est le cas, y a-t-il une bonne commande à exécuter pour le faire?

J'ai essayé de faire

sudo mysqlcheck -o --all-databases

Mais obtenez le message d'erreur suivant:

note     : Table does not support optimize, doing recreate + analyze instead
status   : OK

Réponses

1 RickJames Nov 29 2020 at 14:36

Ne vous en faites pas. InnoDB prend essentiellement soin de lui-même. OPTIMIZEsupprime temporairement un peu d'espace perdu, mais de nouveaux déchets se produisent lorsque les insertions / etc. se produisent. L'avantage de performance de OPTIMIZEest presque nul.

1 RolandoMySQLDBA Nov 27 2020 at 04:39

Ces messages sont normaux pour InnoDB. Vous pouvez continuer à le faire.

Le moteur de stockage InnoDB fonctionne OPTIMIZE TABLE mydb.mytable;comme ceci

ALTER TABLE mydb.mytable ENGINE=InnoDB;
ANALYZE TABLE mydb.mytable;

J'en ai parlé au fil des ans:

  • Sep 27, 2015: Comment puis-je défragmenter des tables dans MySQL?
  • Jun 24, 2015: guide pour appeler optimiser table après alter table?
  • Feb 27, 2013: Quelle est la différence entre optimiser table et analyser table dans mysql
  • Aug 04, 2011: Optimiser les paramètres par défaut d'InnoDB

Je recommande de faire une analyse quotidienne ou hebdomadaire

sudo mysqlcheck --analyze --all-databases

Ensuite, faites l'optimisation une fois par mois ou une fois par trimestre.