Puis-je tuer OPTIMIZE TABLE en toute sécurité sur une table InnoDB?

9

La documentation de MySQL pour kill avertit :

Attention

Tuer une opération REPAIR TABLEou OPTIMIZE TABLEsur une MyISAMtable entraîne une table corrompue et inutilisable. Toute lecture ou écriture sur une telle table échoue jusqu'à ce que vous l'optimisiez ou la répariez à nouveau (sans interruption).

C'est pour MyISAM.

Est-il également dangereux de tuer un OPTIMIZE TABLEprocessus exécuté sur une table InnoDB?

KCD
la source

Réponses:

8

Selon le guide de certification MySQL:

L'instruction OPTIMIZE TABLE nettoie une table MyISAM en la défragmentant. Cela implique de récupérer l'espace inutilisé résultant des suppressions et des mises à jour, et de fusionner les enregistrements qui ont été divisés et stockés de manière non contiguë. OPTIMIZE TABLE trie également les pages d'index si elles sont en panne et met à jour les statistiques d'index

Fonctionne également pour les tables InnoDB, mais correspond à ALTER TABLE, qui reconstruit la table. Cela met à jour les statistiques d'index et libère de l'espace dans l'index cluster.

Donc, dans le cas d'InnoDB:

Innodb est conforme à ACID, la table d'optimisation copie simplement tous les enregistrements dans une nouvelle table

  1. Si les pages d'index ne sont pas triées, triez-les,
  2. Si les statistiques de la table ne sont pas à jour (et que la réparation n'a pas pu être effectuée en triant l'index), mettez-les à jour.
  3. Si le tableau a supprimé ou fractionné des lignes, réparez le tableau.

Et si vous essayez de le tuer lorsqu'il est en cours d'exécution, vous ne perdrez aucun enregistrement.

De plus, dans le cas d'InnoDB avec innodb_defragment=1, aucun ROLLBACK ne sera requis, car dans ce cas, il OPTIMIZE TABLEest incrémentiel.

Abdul Manaf
la source