DuckDB 运行的环境对性能有明显的影响。本页重点介绍硬件配置和使用的操作系统的影响。
硬件配置
CPU 和内存
作为一般规则,DuckDB每个线程至少需要125 MB的内存。 例如,如果你使用8个线程,你至少需要1 GB的内存。 为了达到理想的性能,聚合密集型工作负载每个线程大约需要5 GB内存,而连接密集型工作负载每个线程大约需要10 GB内存。
最佳实践 每个线程的目标是5-10 GB内存。
提示 如果你的内存有限,尝试限制线程数量,例如通过执行
SET threads = 4;
。
磁盘
DuckDB 能够作为内存数据库和基于磁盘的数据库系统运行。在这两种情况下,它都可以将数据溢出到磁盘以处理大于内存的工作负载(也称为外核处理),在这种情况下,快速的磁盘非常有益。然而,如果工作负载适合内存,磁盘速度对性能的影响有限。
本地磁盘
DuckDB的基于磁盘的模式设计为最适合SSD和NVMe磁盘。虽然支持HDD,但它们会导致性能低下,尤其是在写操作时。
网络附加磁盘
云盘。 DuckDB 在网络支持的云盘(如 AWS EBS)上运行良好,适用于只读和读写工作负载。
网络附加存储。 网络附加存储可以为DuckDB提供只读工作负载的服务。 然而,不建议在网络附加存储(NAS)上以读写模式运行DuckDB。 这些设置包括NFS、 网络驱动器如SMB和 Samba。 根据用户报告,在网络附加存储上运行读写工作负载可能会导致性能缓慢且不可预测, 以及由底层文件系统引起的虚假错误。
警告 避免在网络附加存储上以读写模式运行DuckDB。
最佳实践 如果你的工作负载大于内存,和/或快速数据加载很重要,那么快速磁盘非常重要。只有在网络支持的磁盘可靠(例如,云磁盘)并保证高IO的情况下才使用它们。
操作系统
我们推荐使用最新稳定版本的操作系统:macOS、Windows 和 Linux 都经过了充分测试,DuckDB 可以在这些系统上高效运行。在 Linux 发行版中,我们推荐使用 Ubuntu Linux LTS,因为它稳定性高,而且 DuckDB 的大部分 Linux 测试套件任务都在 Ubuntu 工作器上运行。
内存分配器
如果您在一个系统上运行多核CPU,并且DuckDB默认使用jemalloc
作为内存分配器,请考虑启用分配器的后台线程。