J'ai cherché à optimiser uniquement les tables fragmentées dans MySQL et j'ai examiné ce post sur l'optimisation des tables . Il effectue essentiellement une requête sur la base de données information_schema pour n'importe quelle table data_free > 0
et crée une instruction SQL OPTIMIZE
uniquement pour ces tables. J'ai exécuté cette requête et il a identifié 148 tables pour l'optimisation. Toutes les tables identifiées sont des tables InnoDB. Après avoir exécuté le script SQL d'optimisation résultant, j'ai réexécuté le script d'origine pour identifier les tables fragmentées et il a renvoyé exactement les mêmes tables lors de la première passe.
J'ai vu des messages contradictoires concernant les tables InnoDB et la OPTIMIZE
commande. Certains disent que OPTIMIZE
cela ne fonctionnera pas avec les tables InnoDB et que vous devez l'exécuter ALTER TABLE table_name ENGINE=INNODB
. D'autres disent que cela OPTIMIZE
appelle la ALTER TABLE
commande lors de l'exécution sur des tables InnoDB. Dans cet esprit, j'ai exécuté la ALTER TABLE
commande contre l'une des tables InnoDB identifiées comme étant fragmentées ( data_free > 0
) et j'ai constaté que la data_free
n'a pas changé par la suite. Il est toujours supérieur à 0. J'ai également redémarré MySQL et l'ai vérifié uniquement pour trouver les mêmes résultats.
Maintenant, nous avons plusieurs serveurs exécutant MySQL 5.5.29 dans notre organisation et j'ai exécuté une requête sur chacun d'eux pour identifier les tables InnoDB DATA_FREE=0 or NULL
et aucune n'a été retournée. Ils sont tous supérieurs à zéro.
J'ai également exécuté la OPTIMIZE
commande sur quelques MyISAM
tables où DATA_FREE
était supérieur à zéro et j'ai vérifié que c'était zéro par la suite.
Quelqu'un peut-il faire la lumière sur ce pour moi? Quelle est la bonne méthode pour supprimer la fragmentation des tables InnoDB? Quelle est la bonne méthode pour déterminer les tables InnoDB fragmentées?
Merci
la source
innodb_file_per_table
il affichera également la même valeur pour chaque table de l'espace de table partagé.