Zum Inhalt springen

Speicherfehler (Out of Memory)

DuckDB hat eine hochmoderne Out-of-Core-Query-Engine, die für die Verarbeitung größerer Datenmengen als der verfügbare Speicher auf die Festplatte auslagern kann. Wir arbeiten fortlaufend daran, die Skalierbarkeit von DuckDB zu verbessern und Speicherfehler möglichst zu vermeiden. Dennoch können Out-of-Memory-Fehler auftreten, wenn Sie Abfragen mit mehreren blockierenden Operatoren, bestimmten Aggregatfunktionen, PIVOT-Operationen usw. ausführen oder wenn im Vergleich zur Datensatzgröße sehr wenig Speicher verfügbar ist.

Arten von „Out of Memory“-Fehlern

Speicherfehler treten vor allem in zwei Formen auf:

OutOfMemoryException

Meistens läuft DuckDB mit einer OutOfMemoryException aus dem Speicher. Zum Beispiel:

Terminal window
duckdb.duckdb.OutOfMemoryException: Out of Memory Error: failed to pin block of size 256.0 KiB (476.7 MiB/476.8 MiB used)

OOM Reaper (Linux)

Viele Linux-Distributionen haben einen OOM-Killer- oder OOM-Reaper-Prozess, dessen Ziel es ist, Memory Overcommitment zu verhindern. Wenn der OOM-Reaper Ihren Prozess beendet hat, sehen Sie oft die folgende Meldung dort, wo DuckDB ausgeführt wurde:

Terminal window
Killed

Für detailliertere Informationen prüfen Sie die Diagnosemeldungen mit dem Befehl dmesg (möglicherweise benötigen Sie sudo):

Terminal window
sudo dmesg

Wenn der Prozess vom OOM-Killer/Reaper beendet wurde, finden Sie einen Eintrag wie diesen:

Terminal window
[Fri Apr 18 02:04:10 2025] Out of memory: Killed process 54400 (duckdb) total-vm:1037911068kB, anon-rss:770031964kB, file-rss:0kB, shmem-rss:0kB, UID:1000 pgtables:1814612kB oom_score_adj:0

Fehlerbehebung bei Out-of-Memory-Fehlern

Um Out-of-Memory-Fehler zu vermeiden, konsultieren Sie die Seite „Out-of-Memory“-Probleme im Performance-Leitfaden.

Siehe auch

Weitere Informationen zur Speicherverwaltung von DuckDB finden Sie im Blogbeitrag „Memory Management in DuckDB“.