Zum Inhalt springen

jemalloc-Erweiterung

Die jemalloc-Erweiterung ersetzt den Speicherallokator des Systems durch jemalloc. Im Gegensatz zu anderen DuckDB-Erweiterungen ist die jemalloc-Erweiterung statisch gelinkt und kann zur Laufzeit nicht installiert oder geladen werden.

Betriebssystemunterstützung

Die Verfügbarkeit der jemalloc-Erweiterung hängt vom Betriebssystem ab.

Linux

Linux-Distributionen von DuckDB werden mit der jemalloc-Erweiterung ausgeliefert. Um die jemalloc-Erweiterung zu deaktivieren, bauen Sie DuckDB aus dem Quellcode und setzen Sie das Flag SKIP_EXTENSIONS wie folgt:

Terminal window
GEN=ninja SKIP_EXTENSIONS="jemalloc" make

macOS

Die macOS-Version von DuckDB wird nicht mit der jemalloc-Erweiterung ausgeliefert, kann aber aus dem Quellcode gebaut werden, um sie einzubinden:

Terminal window
GEN=ninja BUILD_JEMALLOC=1 make

Windows

Unter Windows ist diese Erweiterung nicht verfügbar.

Konfiguration

Umgebungsvariablen

Der jemalloc-Allokator in DuckDB kann über die Umgebungsvariable DUCKDB_JE_MALLOC_CONF konfiguriert werden. Das Setzen dieser Variable entspricht dem Setzen der MALLOC_CONF-Umgebungsvariable für jemalloc, DuckDB verwendet jedoch einen anderen Variablennamen, um mögliche Namenskollisionen mit anderen Anwendungen zu vermeiden.

Hintergrund-Threads

Standardmäßig sind die Hintergrund-Threads von jemalloc deaktiviert. Um sie zu aktivieren, verwenden Sie die folgende Konfigurationsoption:

SET allocator_background_threads = true;

Hintergrund-Threads geben ausstehende Allokationen asynchron frei, sodass dies nicht synchron durch die Vordergrund-Threads erfolgen muss. Das verbessert die Allokationsleistung und sollte bei allokationslastigen Workloads spürbar sein, insbesondere auf CPUs mit vielen Kernen.