Unified Query Optimization
ABSTRACT
十多年前,微软推出了并行数据仓库(Parallel Data Warehouse,PDW),这是一种用于管理和查询海量数据的大规模并行处理系统。其优化器通过复用 SQL Server 的基础设施并仅做少量修改构建而成,这是一种将基于成本的查询优化能力快速引入 PDW 的有效方法。随着时间的推移,生产环境中积累的经验以及产品架构的变化(例如从一体机形态迁移至云端、计算与存储分离,以及引入无服务器组件)要求我们对 Fabric DW 中的查询优化器进行演进。Fabric DW 是微软在云数据仓库领域推出的最新产品。本文介绍 Fabric DW 优化流程发生的变化,将其与早期 PDW 采用的架构进行比较,并验证我们的新方法。
INTRODUCTION
十多年前,数据仓库行业出现了一个重要趋势,即广泛采用大规模并行处理(Massively Parallel Processing,MPP)系统来管理海量数据 [3, 6, 12, 20, 23, 25, 26]。MPP 系统由多个独立节点组成,每个节点都拥有自己的软件栈和内存,并通过高速网络互连。Microsoft SQL Server Parallel Data Warehouse(PDW)是微软于 2010 年推出的一款无共享架构 MPP 一体机。它提供多种硬件配置,预装了所需软件,开箱即可使用。PDW 包含一个负责管理多个后端节点的控制节点。控制节点中的分布式引擎负责为一体机提供外部接口,并承担解析输入查询、创建分布式执行计划、向后端节点下发计划步骤、跟踪计划各步骤的执行,以及将最终结果的各个部分组装为单一返回结果集等工作。后端节点为一体机提供数据存储和查询处理的核心能力。控制节点和后端节点上都运行着一个 SQL Server RDBMS 实例,用户数据则存储在跨后端节点进行哈希分区或复制的表中。
几年后,随着云服务提供商登上舞台,PDW 演进为 Synapse Data Warehouse(简称 Synapse DW)。Synapse DW 将基于一体机的引擎转变为完全托管的 PaaS 产品。其主要构建模块保持不变:控制节点承载分布式引擎和本地前端 SQL Server 实例,后端节点则承载 SQL Server 实例。架构上的一些变化包括计算与存储解耦,从而实现灵活的资源扩缩容;以及采用多层数据缓存模型,并针对大型工作负载预取列存储数据。
随着时间的推移,Synapse DW 的架构开始从对本地部署系统的简单移植,逐步演进为云原生的横向扩展服务。这一转变始于 Synapse Serverless SQL Pool [14],它基于高可用的 Polaris 框架 [1] 构建。Polaris 采用无状态架构,要求后端节点不保留任何状态信息(例如数据、事务日志和元数据),仅允许保留用于提升性能的临时缓存。这使得引擎能够在发生……时部分重新启动查询的执行。