CHECKPOINT-Anweisung
Die CHECKPOINT-Anweisung synchronisiert Daten aus dem Write-Ahead-Log (WAL) in die Datenbankdatei.
Beispiele
Daten in der Standarddatenbank synchronisieren:
CHECKPOINT;Daten in der angegebenen Datenbank synchronisieren:
CHECKPOINT file_db;Daten synchronisieren und verhindern, dass neue Transaktionen starten:
FORCE CHECKPOINT;In früheren DuckDB-Versionen hat
FORCE CHECKPOINTlaufende Transaktionen abgebrochen. Ab v1.4 wartet es, bis es die Checkpoint-Sperre erhalten kann.
Checkpointing von In-Memory-Tabellen
Ab v1.4.0 unterstützen In-Memory-Tabellen Checkpointing. Das hat zwei wesentliche Vorteile:
-
In-Memory-Tabellen unterstützen ebenfalls Kompression. Das ist standardmäßig deaktiviert – Sie können es so einschalten:
ATTACH ':memory:' AS memory_compressed (COMPRESS);USE memory_compressed; -
Ein Checkpoint löst das Vacuuming gelöschter Zeilen aus und gibt so nach Deletes/Truncation Platz frei.
Syntax
Checkpoint-Operationen laufen automatisch anhand der WAL-Größe (siehe Konfiguration). Diese Anweisung dient manuellen Checkpoint-Aktionen.
Verhalten
Der Standardbefehl CHECKPOINT schlägt fehl, wenn Transaktionen laufen. Mit FORCE wird gewartet, bis die
Checkpoint-Sperre erhalten werden kann, und anschließend die Checkpoint-Operation ausgeführt. In DuckDB-Versionen vor v1.4 hat FORCE CHECKPOINT stattdessen laufende Transaktionen abgebrochen.
Siehe auch die zugehörige PRAGMA-Option für weitere Verhaltensanpassungen.
Platz freigeben
Beim Ausführen eines Checkpoints (automatisch oder manuell) wird der von gelöschten Zeilen belegte Platz teilweise freigegeben. Beachten Sie, dass dabei nicht alle gelöschten Zeilen entfernt werden, sondern Row Groups mit einem erheblichen Anteil an Deletes zusammengeführt werden. In der aktuellen Implementierung müssen dafür etwa 25 % der Zeilen in benachbarten Row Groups gelöscht sein.
Seit v1.4.0 gilt Checkpointing auch für In-Memory-Datenbanken (siehe Checkpointing von In-Memory-Tabellen), wo es ebenfalls gelöschte Zeilen vacuumt und Platz freigibt.
Warnung Die
VACUUM-Anweisung löst kein Vacuuming von Deletes aus und gibt daher keinen Platz frei.