jemalloc
jemalloc (내부 구현)
jemalloc 확장은 시스템의 메모리 할당자를 jemalloc으로 교체해 주는 확장이에요. jemalloc 확장은 정적으로 링크되어 있어서 실행 중에 설치하거나 로드할 수는 없답니다.
출처: 문서
본문
기술적인 이유로 이전에는
jemalloc을 확장 형태로 배포했어요. DuckDB v1.5.3부터는 서드파티 라이브러리 형태로 배포된답니다.
운영체제 지원 (Operating System Support)
jemalloc 확장의 사용 가능 여부는 운영체제에 따라 달라져요.
Linux
Linux 배포판의 DuckDB에는 jemalloc이 기본으로 포함되어 있어요. jemalloc을 비활성화하려면 소스에서 DuckDB를 빌드하고 다음과 같이 SKIP_EXTENSIONS 플래그를 설정해요.
GEN=ninja SKIP_EXTENSIONS="jemalloc" make
macOS
macOS 버전의 DuckDB에는 jemalloc이 기본 포함되어 있지 않지만, 소스에서 빌드해서 포함시킬 수 있어요.
GEN=ninja BUILD_JEMALLOC=1 make
Windows
Windows에서는 이 확장을 사용할 수 없어요.
설정 (Configuration)
환경 변수 (Environment Variables)
DuckDB의 jemalloc 할당자는 DUCKDB_JE_MALLOC_CONF 환경 변수로 설정할 수 있어요. 이는 jemalloc의 MALLOC_CONF 환경 변수를 설정하는 것과 동일해요. 다른 애플리케이션과의 이름 충돌을 피하기 위해 DuckDB는 다른 환경 변수 이름을 사용한답니다.
백그라운드 스레드 (Background Threads)
기본적으로 jemalloc의 백그라운드 스레드는 비활성화되어 있어요. 활성화하려면 다음 설정 옵션을 사용해요.
SET allocator_background_threads = true;
백그라운드 스레드는 대기 중인 할당을 비동기적으로 정리해서 포그라운드 스레드가 동기적으로 처리하지 않아도 되게 해 줘요. 성능이 향상되고, 특히 할당이 많은 워크로드와 멀티코어 CPU에서 효과가 두드러져요.