kryonix 提交的DuckDB并行化有序缓冲 CTE 扫描 - #24361PR
并行化有序缓冲 CTE 扫描 - #24361管道交换pipeline exchange可以通过批次索引在并行生产者之间保持顺序但一个有序缓冲 CTE 消费者consumer之前被迫只能使用单个源任务。缓冲扫描暴露了一个平坦的数据块游标flat chunk cursor因此让多个任务从中拉取数据会在它们到达下游接收器之前重新排序这些数据块。当一个有序 CTE 馈送给一个批次感知的接收器如CREATE TABLE AS、COPY或缓冲结果收集器时这个问题尤为明显生产者可以并行运行但交换到接收器的管道部分变成了串行执行。我修改了缓冲交换使其可以将完整的生产者批次分配给独立的扫描任务。一个任务仍然会按顺序读取其批次内的数据块而不同的任务可以并发地处理不同的批次。下游接收器接收原始的批次索引并使用其现有的批次排序机制来按顺序发布结果。这种选择是基于物理管道需求而非在 CTE 被绑定或优化时附加到它进行的。这很重要因为 CTE 可能在优化过程中被引入并且有用的执行策略取决于最终的消费者管道。在PhysicalCTE::BuildPipelines期间一个缓冲消费者使用批次扫描仅当满足以下所有条件时交换拥有批次索引下游接收器需要批次索引并且接收器不需要分区列。所有其他缓冲消费者都保持现有的数据块扫描。这包括无序交换、没有批次索引的顺序交换、不需要批次索引的结果路径以及分区列接收器。直接和完全物化的 CTE 消费者保持不变。这种区别在EXPLAIN ANALYZE中对缓冲 CTE 扫描是可见的CTE Mode: BUFFERED, Scan Mode: BATCH意味着源任务声明完整的交换批次范围。扫描可以使用交换的常规并行性因为接收器可以从批次索引重建所需的顺序。CTE Mode: BUFFERED, Scan Mode: CHUNK意味着消费者读取现有的共享数据块流。如果交换保持顺序此路径仍然是单线程的。我有意保留了现有的内存中/假脱机spooled数据块流作为权威存储。批次扫描在该流之上添加了一个轻量级目录它不会将数据块复制到第二个集合中。每个目录条目记录生产者和交换批次索引以及在平坦数据块流中的起始/结束位置。当一个批次到达、生产者推进其最小批次索引或生产完成时一个范围range被关闭。每个本地扫描一次可以拥有一个范围。消费者全局状态记录下一个未声明的范围、每个已声明范围的下一个未读位置以及当前在交换锁之外的任何假脱机读取。范围的退役受这三个条件限制因此只要任务还能读取无论是内存中的数据块还是假脱机数据块都不会被退役。空闲任务还会在所有当前可见范围被声明后发布一个批次下限batch floor否则一个空闲任务可能会无限期地让一个批次感知接收器的全局最小值固定在一个旧的批次上。这里有一个不太明显的执行过渡。动态源可能在一个批次的数据可用之前就完成了该批次。返回一个空数据块是不够的因为接收器仍然需要关闭旧的本地批次然后获知新的全局最小值。我为此添加了只用于控制流的源结果类型SourceResultType::BATCH_ADVANCED。管道执行器分两个有序步骤处理该结果。它首先运行现有的NextBatch路径此时旧的最小值仍然可见。然后它更新本地最小值并在接收器上调用UpdateMinBatchIndex。这个顺序对于批次插入和批次复制很重要旧批次必须在其最后一个拥有者从最小值中消失之前被最终化。这两个操作都可以独立地阻塞和恢复。最小值的更新也会通过直接和嵌套的 CTE 消费者传播因此当交换被链接时批次边界不会丢失。PhysicalOperator::UpdateMinBatchIndex默认是一个空操作。缓冲批次收集器、批次插入、批次复制和PhysicalCTE会覆盖它因为它们维护依赖于全局最小值的状态。这使得通用的执行器转换变得明确而无需不相关的接收器去实现它。此变更最广泛的开销是管道执行器中新的源控制结果和接收器回调。在交换内部批次消费者添加了范围和声明元数据以及更多的退役簿记bookkeeping。该元数据仅在一个批次扫描消费者被注册后才维护因此现有的CHUNK路径不会构建一个并行批次目录。假脱机 I/O 和回调保持在交换互斥锁之外并且取消、早期源终止、重置和消费者注销会在唤醒被阻塞的读写者之前清除未完成的声明。我为最容易弄错此协议的情况添加了测试覆盖重复的并行有序扫描、产生的批次少于扫描任务、早期LIMIT、混合的直接/缓冲消费者共享一个假脱机、稀疏和空批次、嵌套的缓冲交换、单个执行器、挂起结果执行和放弃以及通过直接嵌套 CTE 传播到有序 Parquet 输出。这些测试验证了查询结果和所选的扫描模式。为了进行本地性能检查我在 Apple Silicon/macOS 上将确切的主分支提交bf753f906d与此提交9b22d512c9进行了比较。两者都是 Release 构建具有相同的链接扩展两个源码树都没有跟踪修改查询使用了八个线程。输入由两个包含 1000 万行的表组成EXPLAINANALYZECREATEORREPLACETABLEoutASWITHinputASMATERIALIZED(SELECT*FROMlUNIONALLSELECT*FROMr)SELECTi,hash(i)AShFROMinput;经过两次预热和九次交替采样中位数总时间从主分支的 0.717 秒变为批次扫描的 0.279 秒加速比为 2.57 倍。主分支的样本范围从 0.651 秒到 0.766 秒此分支的样本范围从 0.265 秒到 0.361 秒。两个输出都恰好包含 2000 万行其中min(i) 0max(i) 19999999以及 2000 万个不同的哈希值。作为保护性测量我还将一个 1 亿行的物化 CTE 运行到一个非批次感知的结果路径中。其计划保持为Scan Mode: CHUNK。经过三次预热和 31 次交替采样主分支和此分支的中位数时间均为 0.360 秒。它们的范围重叠0.241 秒-0.455 秒 和 0.241 秒-0.460 秒修整均值trimmed mean也重叠0.363 秒 和 0.345 秒。我不会从这些数字中解读出性能变化但它们表明在此工作负载中后备路径CHUNK 模式没有继承批次目录的元数据或调度开销。

相关新闻

Python零基础实战:从环境搭建到爬虫与数据分析项目全流程

Python零基础实战:从环境搭建到爬虫与数据分析项目全流程

如果你在B站、知乎或CSDN上搜索“Python零基础教程”,大概率会看到两类内容:一类是“3小时速成Python”的标题党,另一类是长达数百小时的学院派课程。前者往往跳过关键细节,让新手卡在环境配置和基础语法上;后者则过于…

2026/8/2 8:59:35阅读更多 →
vLLM大模型部署实战:从PagedAttention原理到生产环境调优

vLLM大模型部署实战:从PagedAttention原理到生产环境调优

1. 项目概述:为什么选择 vLLM 来部署大模型?如果你正在尝试把动辄几十亿参数的大模型跑起来,无论是为了内部测试、产品原型还是提供在线服务,第一个拦路虎大概率就是“推理速度”。原始的 PyTorch 或者 Hugging Face Transformers…

2026/8/2 8:59:35阅读更多 →
京东抢购脚本终极指南:3分钟快速部署,轻松抢购茅台等热门商品

京东抢购脚本终极指南:3分钟快速部署,轻松抢购茅台等热门商品

京东抢购脚本终极指南:3分钟快速部署,轻松抢购茅台等热门商品 【免费下载链接】JDspyder 京东预约&抢购脚本,可以自定义商品链接 项目地址: https://gitcode.com/gh_mirrors/jd/JDspyder 还在为京东秒杀抢不到心仪商品而烦恼吗&am…

2026/8/2 8:59:35阅读更多 →
Arduino Sidekick高级套件:一站式硬件扩展平台,快速构建智能小车与机器人项目

Arduino Sidekick高级套件:一站式硬件扩展平台,快速构建智能小车与机器人项目

1. 项目概述:Sidekick高级套件是什么?如果你玩过Arduino,大概率经历过这样的场景:想做个智能小车,得单独买电机驱动板、传感器扩展板、蓝牙模块,然后在一堆杜邦线和面包板上手忙脚乱地连接,最后…

2026/8/2 13:12:11阅读更多 →
AI 治理伦理 · 赋能每个人,而非取代任何人

AI 治理伦理 · 赋能每个人,而非取代任何人

🐉 AI 治理伦理 赋能每个人,而非取代任何人 龍魂伦理协议 v1.1(结构补全版)DNA: #龍芯⚡️2026-08-02-AI-ETHICS-ENABLEMENT-v1.1 CONFIRM: #CONFIRM🌌9622-ONLY-ONCE🧬LK9X-772Z SEAL: #ZHUGEXIN⚡️2025…

2026/8/2 13:12:11阅读更多 →
如何免费解锁Wand游戏修改器完整功能:安全构建与使用指南

如何免费解锁Wand游戏修改器完整功能:安全构建与使用指南

如何免费解锁Wand游戏修改器完整功能:安全构建与使用指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 还在为Wand(原WeM…

2026/8/2 13:12:11阅读更多 →
基于ESP32S3的迷你ChatGPT语音助手:从硬件选型到端云协同实现

基于ESP32S3的迷你ChatGPT语音助手:从硬件选型到端云协同实现

1. 项目缘起:为什么要在ESP32S3上跑语音助手?去年底,我在一个创客展上看到有人用树莓派Zero 2W做了一个离线语音助手,能控制家里的智能灯。效果挺酷,但那个小盒子加上散热片和电源,体积还是有点大&#xff…

2026/8/2 13:12:11阅读更多 →
3步将手机摄像头变成专业直播设备:DroidCam OBS插件完全指南

3步将手机摄像头变成专业直播设备:DroidCam OBS插件完全指南

3步将手机摄像头变成专业直播设备:DroidCam OBS插件完全指南 【免费下载链接】droidcam-obs-plugin DroidCam OBS Source 项目地址: https://gitcode.com/gh_mirrors/dr/droidcam-obs-plugin 你是否曾经羡慕专业主播的高清摄像头,却又不想为昂贵的…

2026/8/2 13:12:11阅读更多 →
3步轻松解锁群晖NAS硬盘兼容性:实用解决方案完全指南

3步轻松解锁群晖NAS硬盘兼容性:实用解决方案完全指南

3步轻松解锁群晖NAS硬盘兼容性:实用解决方案完全指南 【免费下载链接】Synology_HDD_db Add your HDD, SSD and NVMe drives to your Synologys compatible drive database and a lot more 项目地址: https://gitcode.com/GitHub_Trending/sy/Synology_HDD_db …

2026/8/2 13:10:10阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/2 1:29:34阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/2 2:32:55阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/2 2:09:20阅读更多 →