Umgebung
Die Umgebung, in der DuckDB läuft, hat einen offensichtlichen Einfluss auf die Leistung. Diese Seite behandelt die Auswirkungen der Hardware-Konfiguration und des verwendeten Betriebssystems.
Hardware-Konfiguration
CPU
Die offiziell unterstützten Architekturen von DuckDB sind die CPU-Architekturen AMD64 (x86_64) und ARM64 (AArch64). DuckDB arbeitet auf beiden effizient.
DuckDB lässt sich für andere Architekturen kompilieren, etwa LoongArch und RISC-V. Für diese Plattformen gibt es jedoch keine Leistungszusagen.
Speicher
Bestpractice Streben Sie 1–4 GB Speicher pro Thread an.
Minimaler Speicherbedarf
Als Faustregel benötigt DuckDB mindestens 125 MB Speicher pro Thread. Bei 8 Threads brauchen Sie also mindestens 1 GB Speicher. Wenn Sie in einer speicherarmen Umgebung arbeiten, sollten Sie die Anzahl der Threads begrenzen, z. B. mit:
SET threads = 4;Speicher für ideale Leistung
Der Speicherbedarf für ideale Leistung hängt von mehreren Faktoren ab, darunter die Datensatzgröße und die auszuführenden Abfragen. Überraschenderweise haben die Abfragen den größeren Einfluss auf den Speicherbedarf. Workloads mit großen Joins über Many-to-Many-Tabellen erzeugen große Zwischenergebnisse und brauchen daher mehr Speicher, damit die Auswertung vollständig im Speicher stattfinden kann. Näherungsweise benötigen aggregationslastige Workloads 1–2 GB Speicher pro Thread und joinlastige Workloads 3–4 GB Speicher pro Thread.
Workloads größer als der Speicher
DuckDB kann Workloads verarbeiten, die größer als der Speicher sind, indem es auf die Festplatte auslagert. Das ist dank Out-of-Core-Unterstützung für Gruppierungs-, Join-, Sortier- und Window-Operatoren möglich. Beachten Sie, dass Workloads größer als der Speicher sowohl im persistenten als auch im In-Memory-Modus verarbeitet werden können, da DuckDB in beiden Modi auf die Festplatte auslagert.
Lokale Festplatte
Festplattentyp. Der festplattenbasierte Modus von DuckDB ist für SSDs und NVMe-Festplatten ausgelegt. HDDs werden unterstützt, führen aber zu geringer Leistung, besonders bei Schreibvorgängen.
Festplattenbasierter vs. In-Memory-Speicher. Überraschenderweise kann eine festplattenbasierte DuckDB-Instanz schneller sein als eine In-Memory-Instanz. Das liegt daran, dass die Standardeinstellungen Kompression für festplattenbasierten Speicher vorsehen, für In-Memory-Speicher die Kompression aber ausschalten. Mehr dazu auf der Seite „Workloads abstimmen“.
Dateisysteme. Unter Linux läuft DuckDB am besten mit dem Dateisystem XFS, arbeitet aber auch mit anderen Dateisystemen wie ext4 gut. Unter Windows empfehlen wir NTFS und raten von FAT32 ab.
DuckDB-Datenbanken haben eingebaute Prüfsummen, Integritätsprüfungen des Dateisystems sind daher nicht nötig, um Datenkorruption zu verhindern.
Netzwerklaufwerke
Bei Netzwerklaufwerken ist besondere Vorsicht geboten:
- Wenn Sie auf die Festplatte schreiben, muss das Laufwerk zuverlässig sein. Als Faustregel gilt das für lokal angeschlossene Festplatten und Blockspeicher in der Cloud.
- Wenn Ihr Workload größer als der Speicher ist und/oder schnelles Laden wichtig ist, brauchen Sie schnelle Festplatten, vorzugsweise SSD oder NVMe mit einer schnellen Anbindung.
Vor diesem Hintergrund zwei gängige Architekturen und die zugehörigen Hinweise, wenn Sie das native Datenbankformat von DuckDB verwenden:
Blockspeicher in der Cloud. DuckDB läuft gut auf netzwerkgestützten Cloud-Festplatten wie AWS EBS, sowohl für nur lesende als auch für Lese-Schreib-Workloads.
Netzwerkspeicher. Netzwerkspeicher kann DuckDB für nur lesende Workloads bedienen. Es wird jedoch empfohlen, das native Datenbankformat von DuckDB im Lese-Schreib-Modus nicht auf Netzwerkspeicher (NAS) zu verwenden. Dazu gehören NFS, Netzwerklaufwerke wie SMB und Samba. Nutzerberichten zufolge können Lese-Schreib-Workloads auf Netzwerkspeicher zu langsamer und unvorhersehbarer Leistung führen sowie zu sporadischen Fehlern durch das zugrunde liegende Dateisystem. Statt des nativen DuckDB-Datenbankformats sollten Sie das DuckLake-Lakehouse-Format in Betracht ziehen.
Betriebssystem
Wir empfehlen die jeweils neueste stabile Version der Betriebssysteme: macOS, Windows und Linux sind gut getestet, und DuckDB läuft darauf mit hoher Leistung.
Linux
DuckDB läuft auf allen gängigen Linux-Distributionen der letzten ≈5 Jahre. Wenn Sie keine besondere Präferenz haben, empfehlen wir Ubuntu Linux LTS wegen der Stabilität und weil die meisten Linux-Jobs der DuckDB-Testsuite auf Ubuntu-Workern laufen.
glibc vs. musl libc
Wir verteilen DuckDB-Builds sowohl mit glibc als auch mit musl libc. Beachten Sie jedoch, dass mit musl libc gebaute DuckDB-Binaries deutlich geringere Leistung haben. In der Praxis kann das bei rechenintensiven Workloads zu einer Verlangsamung um mehr als das 5-Fache führen. Für leistungsorientierte Workloads mit DuckDB empfehlen wir daher eine Linux-Distribution mit glibc.
Speicherallokator
Wenn Sie eine Many-Core-CPU auf einem System nutzen, auf dem DuckDB jemalloc als Standard-Speicherallokator mitliefert, sollten Sie die Hintergrundthreads des Allokators aktivieren.