MySQL Optimize Table

Aus Thomas-Krenn-Wiki
Wechseln zu: Navigation, Suche

Die MySQL Operation OPTIMIZE TABLE reorganisiert und optimiert eine MySQL-Tabelle. Besonders für Tabellen mit vielen INSERT, UPDATE oder DELETE Statements ist OPTIMIZE vorgesehen. Die Tabelle und ihre Indices werden wieder neu strukturiert, bei Tabellen mit eigener ibd Datei wird außerdem Speicherplatz frei gegeben.

InnoDB

Für InnoDB wird ein OPTIMIZE TABLE intern in ein ALTER TABLE umgewandelt. Bis Version 5.6.17 wurde die Tabelle bei OPTIMIZE komplett gelockt, erst danach wurde dieses Verhalten optimiert:

Unter folgenden Bedingungen wird bei InnoDB dennoch ein Lock akquiriert:[1]

  1. Die System-/Umgebungs-Variable old_alter_table ist auf ON gesetzt
  2. Die Option skip-new ist für den MySQL-Daemon gesetzt
  3. Die Option ALGORITHM COPY wird für ALTER TABLE explizit verwendet
  4. Die zu optimierende Tabelle besitzt FULLTEXT Indices

Alternativ gibt es von Percona pt-online-schema-change, das auch ohne Locks auskommt.[2]

Für InnoDB Tabellen, die mit innodb_file_per_table betrieben werden, erzielt ein OPTIMIZE die Freigabe von Speicherplatz. Das heißt, die ibd Datei am Filesystem wird tatsächlich kleiner. Normalerweise werden diese Datei nicht kleiner, auch wenn aus der Tabelle Einträge gelöscht werden (z.B. über PURGE).[3]

Einzelnachweise

  1. OPTIMIZE TABLE Syntax (dev.mysql.com)
  2. pt-online-schema-change (percona.com)
  3. How often should you use OPTIMIZE TABLE? (code.openark.org/)
Foto Georg Schönberger.jpg

Autor: Georg Schönberger

Georg Schönberger, Abteilung DevOps bei der XORTEX eBusiness GmbH, absolvierte an der FH OÖ am Campus Hagenberg sein Studium zum Bachelor Computer- und Mediensicherheit, Studium Master Sichere Informationssysteme. Seit 2015 ist Georg bei XORTEX beschäftigt und arbeitet sehr lösungsorientiert und hat keine Angst vor schwierigen Aufgaben. Zu seinen Hobbys zählt neben Linux auch Tennis, Klettern und Reisen.


Das könnte Sie auch interessieren

MySQL Replikation
MySQL Server und Query Profiling
MySQL Verbindungen mit SSL verschlüsseln