⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 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 可以通过溢出到磁盘来处理大于内存的工作负载。这得益于对分组、连接、排序和窗口操作符的核心外支持。请注意,大于内存的工作负载可以在持久模式和内存模式下处理,因为 DuckDB 在这两种模式下仍然会溢出到磁盘。

本地磁盘

磁盘类型。DuckDB 的基于磁盘的模式设计为最适合 SSD 和 NVMe 磁盘。虽然支持 HDD,但它们会导致性能低下,尤其是在写入操作方面。

基于磁盘的存储与内存存储。 反直觉地,由于压缩,使用基于磁盘的 DuckDB 实例可能比内存实例更快。请在“如何优化工作负载”页面中阅读更多内容。

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

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

网络附加磁盘

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

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

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

最佳实践:如果您的工作负载大于内存和/或快速数据加载很重要,则快速磁盘非常重要。仅当网络支持的磁盘可靠(例如云磁盘)并保证高 I/O 时才使用它们。

操作系统

我们建议使用操作系统的最新稳定版本: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 并在默认搭载 jemalloc 作为内存分配器的系统上运行 DuckDB,请考虑启用该分配器的后台线程