MySQL 8 - optimiser toutes les tables + index
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
Ne vous en faites pas. InnoDB prend essentiellement soin de lui-même. OPTIMIZE
supprime temporairement un peu d'espace perdu, mais de nouveaux déchets se produisent lorsque les insertions / etc. se produisent. L'avantage de performance de OPTIMIZE
est presque nul.
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 mysqlAug 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.