web-dev-qa-db-fra.com

Avantages de l'exécution de la requête Optimiser Table dans le serveur MySQL DB

J'aimerais savoir quels sont les avantages [vraiment pratiques] qui peuvent être récoltés en exécutant le OPTIMIZE TABLE tbl_name Requête dans MySQL Server.

J'ai vérifié cela une fois et j'ai constaté qu'après exécution, le prochain coup de DB prend beaucoup de temps peut être dû à la délocalisation des fragments ou donc, mais les hits ultérieurs montrent une sorte de performance, je ne suis pas sûr que la mise en cache de requête fait ce truc Avec l'optimisation ou l'optimisation seule, cette astuce.

Quelqu'un peut-il me guider avec des valeurs de différence de performance réelles si possible, afin que je puisse suivre plus loin comme fonctionner avec MySQL gagne de la gravité dans notre projet.

9
Saravanan

Veuillez garder à l'esprit que optimiser la table n'effectue pas de défragmentation. En interne, Optimiser la table Effectuez plusieurs opérations (copie des données sur un fichier temporaire, des index de recréer, recomputer les statistiques de l'indice). En fait, l'exemple que j'ai peut être effectué manuellement comme indiqué.

Exemple: si vous optimisez mydb.mytable, vous entrez cette commande:

OPTIMIZE TABLE mydb.mytable;

Notez que MySQL effectue quelque chose le suivant sous la hotte:

CREATE TABLE mydb.mytable2 LIKE mydb.mytable;
ALTER TABLE mydb.mytable2 DISABLE KEYS;
INSERT INTO mydb.mytable2 SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable2 ENABLE KEYS;
DROP TABLE mydb.mytable;
ALTER TABLE mydb.mytable2 RENAME mydb.mytable;
ANALYZE TABLE mydb.mytable;

Ceci est assez utile pour les tables qui subissent un volume élevé de mises à jour et de suppression.

Effectuer cela peut accomplir deux choses

  1. Empêchez MySQL de rechercher des fragments dans une table dans une tentative de chargement des données dans les fragments de taille droite. L'élimination de ces fragments réduira cette opération.

  2. Avoir les statistiques de l'index recalculées aide l'optimiseur de requêtes MySQL à mieux expliquer les plans. Sinon, les requêtes peuvent se détériorer dans du temps d'exécution car l'optimiseur de requêtes MySQL a décidé de prendre de mauvaises supposies au plan d'explication. Ce serait un symptôme précis d'une table qui a eu un volume élevé de mises à jour et de suppression.

CAVEAT

En ce qui concerne la mise en cache, la mise en cache prend rapidement une plongée à cause d'une balayage de table complète. Pour les pages de myisam Index Flow in et sortant du cache de clé Myisam. Pour les pages d'InnoDb, de données et d'index Flux dans et hors du pool de tampons InnoDB.

7
RolandoMySQLDBA