Tabellenwartung
Rechtsklick auf eine Tabelle, eine Tabellengruppe oder eine Datenbank in der Seitenleiste und Wartung wählen, um eine von vier Operationen auszuführen: CHECK, OPTIMIZE, REPAIR oder ANALYZE.
Die vier Namen stammen von MySQL, und das ist das Vokabular, das die Oberfläche spricht. Jedes andere System bildet sie auf sein eigenes Gegenstück ab, derselbe Menüpunkt bedeutet also überall dieselbe Absicht.
Wofür welche gedacht ist
- CHECK — sucht nach Struktur- und Datenfehlern. Ändert nichts und ist daher immer unbedenklich.
- OPTIMIZE — reorganisiert die Tabelle und gibt ungenutzten Speicher frei. Die Tabelle wird neu geschrieben.
- REPAIR — versucht, eine beschädigte Tabelle zu reparieren. Erst ausführen, wenn CHECK ein Problem gemeldet hat.
- ANALYZE — aktualisiert die Schlüsselstatistiken, auf die sich der Query-Planer stützt. Schnell und ungefährlich, und meist das Erste, was man versucht, wenn eine einst schnelle Abfrage langsam geworden ist.
Was tatsächlich ausgeführt wird
| CHECK | OPTIMIZE | REPAIR | ANALYZE | |
|---|---|---|---|---|
| MySQL / MariaDB | CHECK TABLE | OPTIMIZE TABLE | REPAIR TABLE | ANALYZE TABLE |
| PostgreSQL | — | VACUUM (FULL, ANALYZE) | REINDEX TABLE | ANALYZE |
| SQLite | PRAGMA integrity_check * | VACUUM * | REINDEX | ANALYZE |
| SQL Server | DBCC CHECKTABLE | ALTER INDEX ALL … REBUILD | — | UPDATE STATISTICS |
* Bei SQLite betreffen diese beiden die gesamte Datenbankdatei statt einer einzelnen Tabelle; sie laufen deshalb einmal pro Aufruf, unabhängig davon, wie viele Tabellen Sie ausgewählt haben.
Wo ein System kein Gegenstück hat, wird die Tabelle als übersprungen mit Begründung gemeldet. Sie wird nie stillschweigend durch etwas anderes ersetzt:
- PostgreSQL hat im Kern kein Gegenstück zu CHECK TABLE.
- Die Reparatur im SQL Server erfordert
DBCC CHECKDBmit einer Repair-Option im Single-User-Modus und kann Daten verwerfen. So etwas startet man nicht aus einem Kontextmenü.
Vor dem Ausführen
OPTIMIZE und REPAIR schreiben die Tabelle neu und halten währenddessen eine Sperre. Bei einer großen Tabelle kann das lange dauern, und alles, was sie zu lesen versucht, wartet. Der Dialog warnt vor diesen beiden, und auf einem Produktivserver während der Arbeitszeit sollte man darauf hören.
CHECK und ANALYZE sind im Vergleich günstig und lassen sich jederzeit ausführen.
Das Ergebnis lesen
Die Ergebnistabelle hat eine Zeile je Meldung des Servers: Tabelle, Operation, Status, Meldung.
Die Meldung ist wortwörtlich das, was der Server gesagt hat, oder die ausgeführte Anweisung. Auf PostgreSQL heißt das, dass ein OPTIMIZE VACUUM (FULL, ANALYZE) "t" meldet — die Abbildung aus dem MySQL-Vokabular ist damit sichtbar statt bloß unterstellt.
Die Status sind ok, info, warning, error und skipped. Bei InnoDB-Tabellen antwortet MySQL auf OPTIMIZE häufig mit einem info-Hinweis, es habe stattdessen einen Rebuild plus Analyse gemacht; das ist normal und kein Fehler.
Eine Tabelle, die scheitert, wird zu einer error-Zeile, und der Lauf geht mit den übrigen weiter — eine kaputte Tabelle verdeckt also nicht den Zustand aller anderen.
Mehrere Tabellen auswählen
Strg-Klick oder Umschalt-Klick auf Tabellen in der Seitenleiste, und das Menü gilt für die gesamte Auswahl. Auf einem Knoten Tabellengruppe erfasst es jede darin enthaltene Tabelle, auf einem Datenbank-Knoten jede Tabelle der Datenbank — auch die, die Sie noch nicht aufgeklappt haben.
