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:
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:
KilledFür detailliertere Informationen prüfen Sie die Diagnosemeldungen mit dem Befehl dmesg (möglicherweise benötigen Sie sudo):
sudo dmesgWenn der Prozess vom OOM-Killer/Reaper beendet wurde, finden Sie einen Eintrag wie diesen:
[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:0Fehlerbehebung 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“.