SQLite
 sql >> Datenbank >  >> RDS >> SQLite

SQLite VAKUUM

Zusammenfassung :In diesem Tutorial erklären wir, warum Sie das SQLite VACUUM verwenden müssen Befehl und zeigen Sie, wie Sie ihn verwenden, um die Datenbankdatei zu optimieren.

Warum brauchen Sie SQLite VACUUM Befehl

Erstens:Wenn Sie Datenbankobjekte wie Tabellen, Ansichten, Indizes und Trigger löschen oder Daten aus Tabellen löschen, bleibt die Dateigröße der Datenbank unverändert. Denn SQLite markiert die gelöschten Objekte einfach als frei und reserviert sie für zukünftige Verwendungen. Dadurch wächst die Größe der Datenbankdatei immer weiter an.

Zweitens werden die Indizes und Tabellen fragmentiert, wenn Sie Daten aus den Tabellen einfügen oder löschen, insbesondere bei Datenbanken mit einer hohen Anzahl von Einfügungen, Aktualisierungen und Löschungen.

Drittens erzeugen die Einfüge-, Aktualisierungs- und Löschoperationen ungenutzte Datenblöcke innerhalb einzelner Datenbankseiten. Es verringert die Anzahl der Zeilen, die auf einer einzelnen Seite gespeichert werden können. Daher wird die Anzahl der Seiten für eine Tabelle erhöht. Aus diesem Grund erhöht es den Speicheraufwand für die Tabelle, benötigt mehr Zeit zum Lesen/Schreiben und verringert die Cache-Leistung.

SQLite stellt das VACUUM bereit Befehl, um alle drei oben genannten Probleme zu lösen.

SQLite kopiert zuerst Daten innerhalb einer Datenbankdatei in eine temporäre Datenbank. Diese Operation defragmentiert die Datenbankobjekte, ignoriert die freien Plätze und packt einzelne Seiten neu. Anschließend kopiert SQLite den Inhalt der temporären Datenbankdatei zurück in die ursprüngliche Datenbankdatei. Die ursprüngliche Datenbankdatei wird überschrieben.

Denn das VACUUM Wenn der Befehl die Datenbank neu erstellt, können Sie ihn verwenden, um einige datenbankspezifische Konfigurationsparameter wie Seitengröße, Seitenformat und Standardkodierung zu ändern. Dazu setzen Sie per Pragma neue Werte und leeren dann die Datenbank.

Das SQLite VACUUM Befehl

Das VACUUM Der Befehl ändert den Inhalt der Datenbank mit Ausnahme der rowid-Werte nicht. Wenn Sie INTEGER PRIMARY KEY verwenden Spalte, das VACUUM ändert die Werte dieser Spalte nicht. Wenn Sie jedoch eine Zeilen-ID ohne Alias ​​verwenden, wird der VACUUM Der Befehl setzt die rowid-Werte zurück. Neben dem Ändern der rowid-Werte, VACUUM Befehl baut auch den Index von Grund auf neu auf.

Es empfiehlt sich, das VACUUM durchzuführen regelmäßig ausführen, insbesondere wenn Sie große Tabellen oder Indizes aus einer Datenbank löschen.

Es ist wichtig zu beachten, dass der VACCUM Der Befehl erfordert Speicherplatz, um die Originaldatei und auch die Kopie zu speichern. Auch das VACUUM Der Befehl erfordert exklusiven Zugriff auf die Datenbankdatei. Mit anderen Worten, das VACUUM Der Befehl wird nicht erfolgreich ausgeführt, wenn die Datenbank eine ausstehende SQL-Anweisung oder eine offene Transaktion hat.

Derzeit können Sie ab Version 3.9.2 das VACUUM ausführen Befehl auf dem main Datenbank, nicht die angehängte Datenbankdatei.

Obwohl SQLite den Auto-Vakuum-Modus aktiviert, der den Vakuum-Prozess mit einigen Einschränkungen automatisch auslöst. Es empfiehlt sich, VACUUM auszuführen Befehl manuell.

Wie man SQLite VACUUM ausführt Befehl

Im Folgenden wird gezeigt, wie das VACUUM ausgeführt wird Befehl:

VACUUM;Code language: SQL (Structured Query Language) (sql)

Stellen Sie sicher, dass keine offene Transaktion vorhanden ist, während Sie den Befehl ausführen.

Die folgende Anweisung aktiviert den vollständigen Auto-Vakuum-Modus:

PRAGMA auto_vacuum = FULL;Code language: SQL (Structured Query Language) (sql)

Um das inkrementelle Vakuum zu aktivieren, verwenden Sie die folgende Anweisung:

PRAGMA auto_vacuum = INCREMENTAL;Code language: SQL (Structured Query Language) (sql)

Die folgende Anweisung deaktiviert den Auto-Vakuum-Modus:

PRAGMA auto_vacuum = NONE;Code language: SQL (Structured Query Language) (sql)

VACUUM mit einem INTO Klausel

Hier ist die Syntax des VACUUM mit INTO Klausel:

VACUUM schema-name INTO filename;Code language: SQL (Structured Query Language) (sql)

Das VACUUM Anweisung mit einem INTO -Klausel behält die ursprüngliche Datenbankdatei unverändert bei und erstellt eine neue Datenbank mit dem angegebenen Dateinamen. Die neue Datenbank enthält den gleichen logischen Inhalt wie die ursprüngliche Datenbank, jedoch vollständig bereinigt.

Der filename im INTO -Klausel kann ein beliebiger SQL-Ausdruck sein, der als Zeichenfolge ausgewertet wird. Es muss ein Pfad zu einer Datei sein, die nicht existiert, oder zu einer leeren Datei, oder VACUUM INTO Befehl führt zu einem Fehler.

Das VACUUM Der Befehl ist sehr nützlich, um Sicherungskopien einer Live-Datenbank zu erstellen. Es ist transaktionssicher, da die generierte Datenbank eine konsistente Momentaufnahme der ursprünglichen Datenbank ist. Wenn jedoch ein ungeplantes Herunterfahren oder ein Stromausfall den Befehl unterbricht, ist die generierte Datenbank möglicherweise beschädigt.

Die folgende Anweisung verwendet den VACUUM INTO Befehl zum Generieren einer neuen Datenbank mit dem Dateinamen chinook_backup.db dessen Daten aus dem main kopiert werden Schema des chinook Datenbank:

VACUUM main INTO 'c:\sqlite\db\chinook_backup.db';Code language: JavaScript (javascript)

In diesem Tutorial haben Sie gelernt, warum Sie SQLite VACUUM verwenden müssen Befehl und wie man ihn ausführt, um die Datenbank zu optimieren.