DuckDB 做了一个关键的架构变更。
从 v2.0(2026 年秋季)开始,DuckDB 将支持 Parquet 和 CSV 文件的异步读取。核心设计是双线程池:REGULAR 线程池负责解码、连接、聚合等计算任务,数量等于 CPU 核心数;ASYNC 线程池专为异步 I/O 设计,数量默认为系统线程数的 4 倍,上限 256 个。
配合预读队列,工作线程在需要数据之前就提前调度 fetch 任务。ASYNC 线程独立执行读取任务,完成后通过倒计数器唤醒等待中的扫描任务。

Benchmark 数据很说明问题。在 EC2 r7i.16xlarge(64 vCPU,512GB RAM)上查询同区域 S3 上的 TPC-H SF100 数据集:Parquet 单文件从 8.23 秒降到 2.84 秒(加速约 3 倍),调优后进一步降到 2.23 秒(3.7 倍)。CSV 文件从 887 秒降到 45 秒,加速近 20 倍。同步版本仅维持约 5 Gbit/s 吞吐,异步版本饱和了 25 Gbit/s 网络。

并发查询场景下差异更大。四个 TPC-H 查询同时运行,同步版本约 90% 的核心空闲等待 I/O,耗时 35.8 秒;异步版本占满所有核心,15.6 秒完成。

内存管理也很灵活。read_ahead_depth 配置控制预读队列深度,默认 -1 表示由临时内存管理器动态控制。内存压力大时队列自动缩容至接近同步行为,压力解除后恢复。
DuckDB 团队表示,JSON 和原生格式的异步读取即将支持,同时也在探索 Linux io_uring 接口进一步减少系统调用开销。
参考来源: