数据库查询执行:向量化与编译的对比分析

需积分: 14 1 下载量 174 浏览量 更新于2024-08-05 收藏 257KB PDF 举报
"这篇论文探讨了向量化执行与编译在查询执行中的对比,作者包括Juliusz Sompolski, Marcin Zukowski和Peter Boncz。他们分别来自VectorWise B.V. 和Vrije Universiteit Amsterdam。文章的重点是分析现代CPU上针对分析型数据库工作负载的向量化和编译策略的行为,并通过研究Project、Select和Hash Join三个使用场景,揭示这两种方法的优劣。" 在数据库查询执行领域,向量化和编译是两种关键的技术,它们各自有着独特的优点。向量化执行(Vectorization)是一种优化技术,它将数据处理以向量的形式进行,一次处理多个数据元素,显著提升了CPU对数据的并行处理能力。这在现代处理器支持单指令多数据流(SIMD,Single Instruction Multiple Data)的情况下尤其有效,因为SIMD指令允许处理器在同一时钟周期内对多个数据执行相同的操作,从而提高了吞吐量。 向量化执行模型通常用于减少解释执行的开销,因为它减少了指令的跳转,增强了指令代码的局部性。然而,编译(Compilation)策略,特别是即时编译(JIT,Just-In-Time)技术,通过将查询转化为机器码,可以进一步消除解释器的开销,并可能进行更深度的优化,如循环展开、死代码消除等。 论文指出,对于分析型数据库工作负载,编译的优势在于能够生成更接近硬件优化的代码,而向量化则能利用现代处理器的SIMD特性。然而,两者并非互斥,而是相辅相成。在Ingres VectorWise数据库系统的研究中,他们发现编译应该总是与块级查询执行(block-wise query execution)相结合,这意味着查询被分解成一系列处理大块数据的子任务,每个子任务都可被高效地编译和向量化。 在Project、Select和Hash Join这三个经典操作中,向量化执行和编译的结合表现出了更好的性能。Project操作涉及到选择数据集中的特定列,Select操作则是过滤数据,而Hash Join是关联两个数据集的关键操作。论文的贡献之一是识别出在这些操作中,结合使用向量化和编译可以取得最优效果。 向量化和编译都是提升数据库查询效率的重要手段。在现代CPU架构下,理解如何有效地结合这两种技术对于数据库系统设计者和优化者至关重要。通过深入研究具体的工作负载和操作,可以更好地利用硬件资源,提供更高效的查询性能。
2019-09-07 上传
多核和众核处理器成为新的具有强大并行处理能力的大内存计算平台的主流配置。多核处理器遵循以LLC(Last Level Cache,最后一级cache)大小为中心的优化技术,而众核处理器,如Phi、GPU协处理器,则采用较小的cache并以更多的硬件级线程来掩盖内存访问延迟的设计。随着处理核心数量的增长,计算框架更倾向于面向大规模处理核心的、代码执行效率高并且扩展性强的设计思想。提出了一种基于数组存储和向量处理的内存分析处理框架Array OLAP,简化OLAP的存储模型和查询处理模型。在Array OLAP计算框架中,维表规范化为基于向量的维过滤器,事实表规范化为带有多维索引的度量属性。通过多维索引计算,一个多维查询被简化为事实表上的向量索引扫描并根据度量表达式进行聚集计算。规范化的向量查找和向量索引扫描具有较好的代码执行效率,并且阶段化的处理模型更好地适应不同的计算平台,将计算阶段分配给最适合的计算平台。同时,Array OLAP是一种面向数据仓库模式特点的设计,向量处理模型设计简单,对于数据仓库维表较小且增长缓慢的特点具有较好的效率。描述了在不同平台上的Array OLAP计算框架并且通过基准测试评估Array OLAP的性能,通过与当前的内存分析型数据库的性能对比,Array OLAP性能超过主流的内存分析型数据库并且可以平滑地迁移到新的硬件平台。