尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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 模式没有继承批次目录的元数据或调度开销。
RELATED

相关推荐

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

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

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

📅 2026/9/8 14:16:15
【sub2API部署或迁移】

【sub2API部署或迁移】

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

📅 2026/9/14 20:01:45
Zephyr RTOS开发实战:从设备树到STM32 LED控制

Zephyr RTOS开发实战:从设备树到STM32 LED控制

最近在尝试用 Zephyr RTOS 开发 STM32F103C8T6 最小系统板时,发现很多新手朋友卡在了环境搭建和项目构建的第一步,尤其是如何正确获取和配置 device 字段,经常遇到 No Cortex-M SW Device Found 或 Could not stop Cortex-M device! 这…

📅 2026/9/19 20:44:49
MORE NEWS

更多资讯

📰

基于微信小程序的母婴用品电商平台系统-附源码

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

📰

False作为Python语言中布尔类型的核心常量之一,贯穿于程序逻辑判断、流程控制、数据校验等各个环节

False作为Python语言中布尔类型的核心常量之一,贯穿于程序逻辑判断、流程控制、数据校验等各个环节,也是全国计算机等级考试(NCRE)二级Python科目的高频考点。根据最新考试大纲要求,考生需掌握真假无值(Tru…

📰

基于SpringBoot康复训练计划管理系统-附源码

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

📰

在Python编程体系中,异常处理是保障程序健壮性与稳定性的核心机制

在Python编程体系中,异常处理是保障程序健壮性与稳定性的核心机制。作为Python错误处理的核心关键字,except与try、finally、raise等语句紧密配合,构成了完整的异常捕获与处理流程。掌握except的用法,不仅能避免程序因未处理的错误…

📰

如何快速下载国家中小学智慧教育平台电子课本PDF:tchMaterial-parser 完整指南

如何快速下载国家中小学智慧教育平台电子课本PDF:tchMaterial-parser 完整指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获…

📰

LiteRT-LM 上手指南:语言模型边缘推理库,在手机上实测有多快

LiteRT-LM 上手指南:语言模型边缘推理库,在手机上实测有多快 【免费下载链接】LiteRT-LM LiteRT-LM is Googles production-ready, high-performance, open-source inference framework for deploying Large Language Models on edge devices. 项目地址…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬