⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
环境

运行 DuckDB 的环境对性能有显著影响。本页面重点介绍硬件配置和所用操作系统带来的影响。

硬件配置

CPU

DuckDB 在 AMD64 (x86_64) 和 ARM64 (AArch64) CPU 架构上均能高效运行。

内存

最佳实践:每个线程建议配备 1-4 GB 内存。

最低内存要求

根据经验,DuckDB 每个线程至少需要 125 MB 内存。例如,如果您使用 8 个线程,则至少需要 1 GB 内存。如果您在内存受限的环境中工作,请考虑限制线程数,例如通过执行:

SET threads = 4;

理想性能所需的内存

获得理想性能所需的内存量取决于多个因素,包括数据集大小和要执行的查询。令人惊讶的是,查询对内存需求的影响更大。包含多对多表之间大型连接的工作负载会产生较大的中间数据集,因此需要更多内存来完全加载到内存中进行评估。大致而言,聚合密集型工作负载每个线程需要 1-2 GB 内存,而连接密集型工作负载每个线程需要 3-4 GB 内存。

超出内存容量的工作负载

DuckDB 可以通过溢出到磁盘来处理超出内存容量的工作负载。这得益于其对分组、连接、排序和窗口化算子的核外(out-of-core)支持。请注意,无论是在持久化模式还是内存模式下,DuckDB 都可以处理超出内存的工作负载,因为在这两种模式下,DuckDB 都会将数据溢出到磁盘。

本地磁盘

磁盘类型。 DuckDB 的基于磁盘的模式旨在与 SSD 和 NVMe 磁盘配合使用时达到最佳效果。虽然支持 HDD,但它们会导致性能低下,尤其是在写入操作时。

基于磁盘与基于内存的存储。 反直觉的是,由于压缩技术的存在,使用基于磁盘的 DuckDB 实例有时可能比基于内存的实例更快。请阅读“如何调优工作负载”页面了解更多信息。

文件系统。 在 Linux 上,DuckDB 在 XFS 文件系统上表现最佳,但在 ext4 等其他文件系统上也表现良好。在 Windows 上,我们建议使用 NTFS 并避免使用 FAT32。

请注意,DuckDB 数据库具有内置校验和,因此不需要来自文件系统的完整性检查来防止数据损坏。

网络挂载磁盘

云盘。 DuckDB 在网络支持的云盘(例如 AWS EBS)上运行良好,适用于只读和读写工作负载。

网络附加存储 (NAS)。 网络附加存储可用于 DuckDB 的只读工作负载。然而,不建议在网络附加存储 (NAS) 上以读写模式运行 DuckDB。 这些设置包括 NFS 以及网络驱动器(如 SMBSamba)。根据用户报告,在网络附加存储上运行读写工作负载可能会导致性能缓慢且不可预测,以及由底层文件系统引起的异常错误。

警告:避免在网络附加存储上以读写模式运行 DuckDB。

最佳实践:如果您的工作负载超过内存容量和/或快速数据加载至关重要,则快速磁盘非常重要。仅在网络支持的磁盘可靠(例如云盘)且保证高 IO 的情况下才使用它们。

操作系统

我们建议使用最新版本的稳定操作系统:macOS、Windows 和 Linux 都经过充分测试,DuckDB 可以在其上实现高性能运行。

Linux

DuckDB 可以在过去约 5 年内发布的所有主流 Linux 发行版上运行。如果您没有特殊偏好,我们建议使用 Ubuntu Linux LTS,因为它稳定性高,并且大多数 DuckDB 的 Linux 测试套件作业都在 Ubuntu 工作节点上运行。

glibc 与 musl libc

DuckDB 既可以使用 glibc(默认)构建,也可以使用 musl libc 构建(参见构建指南)。但请注意,使用 musl libc 构建的 DuckDB 二进制文件性能较低。在实际操作中,这可能导致计算密集型工作负载性能下降超过 5 倍。因此,建议在运行 DuckDB 时,针对性能敏感的工作负载使用带有 glibc 的 Linux 发行版。

内存分配器

如果您在配备多核 CPU 的系统上运行,且 DuckDB 默认使用 jemalloc 作为内存分配器,请考虑启用分配器的后台线程

© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南