Posso tranquillamente eliminare OPTIMIZE TABLE su una tabella InnoDB?


9

La documentazione di MySQL per kill avvisa :

avvertimento

Se si annulla un'operazione REPAIR TABLEo OPTIMIZE TABLEsu una MyISAMtabella, la tabella risulta danneggiata e inutilizzabile. Qualsiasi lettura o scrittura su una tabella di questo tipo non riesce fino a quando non viene ottimizzata o riparata di nuovo (senza interruzione).

Questo è per MyISAM.

Non è inoltre sicuro interrompere un OPTIMIZE TABLEprocesso in esecuzione su una tabella InnoDB?

Risposte:


8

Secondo la guida alla certificazione MySQL:

L'istruzione OPTIMIZE TABLE pulisce una tabella MyISAM deframmentandola. Ciò comporta il recupero dello spazio inutilizzato derivante da eliminazioni e aggiornamenti e la fusione di record divisi e archiviati in modo non contiguo. OPTIMIZE TABLE ordina anche le pagine dell'indice se sono fuori servizio e aggiorna le statistiche dell'indice

Funziona anche con le tabelle InnoDB, ma è mappato su ALTER TABLE, che ricostruisce la tabella. Questo aggiorna le statistiche dell'indice e libera spazio nell'indice cluster.

Quindi, nel caso di InnoDB:

Innodb è conforme ACID, la tabella di ottimizzazione copia semplicemente tutti i record in una nuova tabella

  1. Se le pagine dell'indice non sono ordinate, ordinale,
  2. Se le statistiche della tabella non sono aggiornate (e non è possibile eseguire la riparazione ordinando l'indice), aggiornarle.
  3. Se la tabella ha eliminato o diviso le righe, ripristinare la tabella.

E se provi a ucciderlo mentre è in esecuzione non perderai alcun record.

Inoltre, nel caso di InnoDB con innodb_defragment=1, non ci saranno ROLLBACK richiesti, poiché in questo caso OPTIMIZE TABLEè incrementale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.