web-dev-qa-db-fra.com

Puis-je tuer en toute sécurité une table d'optimisation sur une table innodub?

La documentation de MySQL pour kill - avertit :

AVERTISSEMENT

Tuer un REPAIR TABLE ou alors OPTIMIZE TABLE Fonctionnement sur une table MyISAM Résultats dans une table corrompue et inutilisable. Toute lecture ou écrit à une telle table échoue jusqu'à l'optimisation ou la réparez à nouveau (sans interruption).

C'est pour Myisam.

Est-ce aussi dangereux de tuer un OPTIMIZE TABLE processus courant contre une table innodub?

9
KCD

Selon le guide de certification MySQL:

L'énoncé d'optimisation de la table nettoie une table myisam en le défragmentant. Cela implique de recouvrer l'espace inutilisé résultant de suppressions et de mises à jour et des enregistrements de coalescence qui sont devenus divisés et stockés non contiguës. Optimiser Tabley trie également les pages d'index si elles sont hors de commande et met à jour les statistiques d'index

Fonctionne également pour les tables d'Innodb, mais des cartes pour modifier la table, ce qui reconstruit la table. Cela met à jour les statistiques de l'indice et libère de l'espace dans l'index en cluster.

Donc, dans le cas d'InnoDB:

INNODB est une conformité acide, 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 accomplie en triant l'index), mettez-les à jour.
  3. Si la table a des lignes supprimées ou divisées, réparez la table.

Et si vous essayez de le tuer quand il fonctionne, vous ne perdrez aucun enregistrement.

De plus, cas d'innodb avec innodb_defragment=1, il n'y aura pas de rollback requis, comme dans ce cas OPTIMIZE TABLE est incrémental.

8
Abdul Manaf