Kann ich OPTIMIZE TABLE auf einer InnoDB-Tabelle sicher beenden?

9

Die MySQL-Dokumentation für kill Warnungen :

Warnung

Das Beenden einer REPAIR TABLEoder einer OPTIMIZE TABLEOperation für eine MyISAMTabelle führt zu einer Tabelle, die beschädigt und unbrauchbar ist. Alle Lese- oder Schreibvorgänge in eine solche Tabelle schlagen fehl, bis Sie sie erneut optimieren oder reparieren (ohne Unterbrechung).

Das ist für MyISAM.

Ist es auch unsicher, einen OPTIMIZE TABLEProzess abzubrechen, der für eine InnoDB-Tabelle ausgeführt wird?

KCD
quelle

Antworten:

8

Laut MySQL Certification Guide:

Die Anweisung OPTIMIZE TABLE bereinigt eine MyISAM-Tabelle, indem sie defragmentiert wird. Dies beinhaltet die Rückgewinnung von nicht verwendetem Speicherplatz, der aus Löschungen und Aktualisierungen resultiert, und das Zusammenführen von Datensätzen, die aufgeteilt und nicht zusammenhängend gespeichert wurden. OPTIMIZE TABLE sortiert auch die Indexseiten, wenn sie nicht in Ordnung sind, und aktualisiert die Indexstatistik

Funktioniert auch für InnoDB-Tabellen, ist jedoch ALTER TABLE zugeordnet, wodurch die Tabelle neu erstellt wird. Dadurch werden die Indexstatistiken aktualisiert und Speicherplatz im Clustered-Index freigegeben.

Also im Falle von InnoDB:

Innodb ist ACID-konform. Die Optimierungstabelle kopiert einfach alle Datensätze in eine neue Tabelle

  1. Wenn die Indexseiten nicht sortiert sind, sortieren Sie sie,
  2. Wenn die Statistiken der Tabelle nicht aktuell sind (und die Reparatur nicht durch Sortieren des Index durchgeführt werden konnte), aktualisieren Sie sie.
  3. Wenn die Tabelle Zeilen gelöscht oder geteilt hat, reparieren Sie die Tabelle.

Und wenn Sie versuchen, es zu töten, während es läuft, verlieren Sie keine Datensätze.

Bei InnoDB mit innodb_defragment=1ist kein ROLLBACK erforderlich, da dies in diesem Fall OPTIMIZE TABLEinkrementell ist.

Abdul Manaf
quelle