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 模式没有继承批次目录的元数据或调度开销。

相关新闻

适配媒体行业的固定资产管理软件有哪些功能与核心优势

适配媒体行业的固定资产管理软件有哪些功能与核心优势

做媒体行业的后勤资产管理,到底有多闹心?某地级市融媒体中心的资产管理员曾算过一笔账:全中心2100多件固定资产里,近6成是摄像机、镜头、收音设备、移动工作站这类外采装备,平时跟着记者跑现场、进演播厅,借…

2026/8/2 9:02:01 阅读更多 →
【sub2API部署或迁移】

【sub2API部署或迁移】

Sub2API 部署时配置已有 PostgreSQL 与 Redis 的方案及后期迁移指南 一、概述 Sub2API 支持两种部署方式:Docker Compose 容器化部署和二进制直接部署。无论采用哪种方式,都可以配置使用已有的外部 PostgreSQL 和 Redis 服务,而非使用项目自…

2026/8/2 9:02:01 阅读更多 →
3分钟QQ音乐解密指南:快速解锁加密音乐文件的终极方案

3分钟QQ音乐解密指南:快速解锁加密音乐文件的终极方案

3分钟QQ音乐解密指南:快速解锁加密音乐文件的终极方案 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否…

2026/8/2 9:01:01 阅读更多 →

最新新闻

书法美术对孩子有什么好处

书法美术对孩子有什么好处

在孩子的成长过程中,很多家长都在考虑要不要让孩子学习书法和美术。书法美术对孩子有什么好处呢?今天就结合天津市西青区艺绘空间书法艺术工作室(简称“艺绘空间”)的真实教学场景,来和大家好好聊一聊。 培养专注力和…

2026/8/2 9:43:17 阅读更多 →
3分钟永久激活Office:开源钩子工具让你的Microsoft 365完全免费

3分钟永久激活Office:开源钩子工具让你的Microsoft 365完全免费

3分钟永久激活Office:开源钩子工具让你的Microsoft 365完全免费 【免费下载链接】ohook An universal Office "activation" hook with main focus of enabling full functionality of subscription editions 项目地址: https://gitcode.com/gh_mirrors/…

2026/8/2 9:43:17 阅读更多 →
阿里通义千问负责人卸任:大模型开源生态与商业化路径的十字路口

阿里通义千问负责人卸任:大模型开源生态与商业化路径的十字路口

1. 事件背景与行业影响今天早上,我的技术圈和投资圈的朋友群几乎同时炸了锅,源头是一条简短但信息量巨大的消息:阿里通义千问(Qwen)大模型团队的负责人林俊旸官宣卸任。这个消息来得非常突然,没有任何预兆&…

2026/8/2 9:43:17 阅读更多 →
深入解析Apache Flink核心原理:从流处理基础到生产实践

深入解析Apache Flink核心原理:从流处理基础到生产实践

1. 项目概述:为什么是Flink?如果你正在处理实时数据,或者对“流处理”这个词不陌生,那么Flink大概率已经进入了你的技术雷达。我最早接触Flink是在一个需要实时计算用户行为热度的项目里,当时对比了Storm、Spark Strea…

2026/8/2 9:43:17 阅读更多 →
基于Claude与Agent框架的Windows自动化办公助手搭建指南

基于Claude与Agent框架的Windows自动化办公助手搭建指南

1. 项目概述:当Claude Cowork遇上Windows,一个“全职AI员工”的诞生 最近在AI圈子里,一个叫“Claude Cowork”的玩意儿配合Windows系统,被一些技术博主戏称为“140元雇了个全职员工”,这个说法确实挺抓眼球。作为一个…

2026/8/2 9:43:17 阅读更多 →
WarcraftHelper魔兽争霸助手:让经典游戏在现代电脑上焕发新生的终极解决方案

WarcraftHelper魔兽争霸助手:让经典游戏在现代电脑上焕发新生的终极解决方案

WarcraftHelper魔兽争霸助手:让经典游戏在现代电脑上焕发新生的终极解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为怀旧的…

2026/8/2 9:42:17 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

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

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

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

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

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

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

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

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →