GreenPlum优化器Orca论文笔记

一、简介

Orca特性

  • 模块化
  • 可扩展性
  • 适应多核
  • 可验证性
  • 性能

二、预备知识

MPP(大规模并行处理)

  • Share-nothing计算结构
  • 两个以上的协调处理器
  • 每个处理器有自己的内存,OS和硬盘
  • Master负责数据库实例之间的工作协调,每部分数据处理和存储的工作称为Segements。
  • 当查询提交到master,查询会被优化并拆分为小的部分,并被分发为Segments。
  • 通过网络层互联,实现Segments之间的进程间通信。

在查询执行中,数据可以通过多种方式分发到Segments:

  • 哈希分发:通过哈希汉书
  • 复制分发:全表复制存储到每个实现Segments之间的进程间通信
  • 单例分发:全表从多个Segment汇集到一个Host

SQL on Hadoop

  • Hive: HiveQL编译为MapReduce作业,需要优化器提高性能
  • Pivotal HAWQ: 使用Orca优化器,CBO优化
  • 其他:Cloudera的Impala,Facebook的Presto,只支持部分SQL标准,只有RBO(写作这篇论文时的情况)

三、ORCA架构

Orca是一个现代的自顶向下的,基于Cascades优化框架的查询优化器。Orca和数据库系统是松耦合的,这样它可以支持不同的计算架构(如MPP和Hadoop)。

DXL

Data eXchange Language,优化器和数据库系统之间的通讯协议。分为三种:DXL Query, DXL MD, DXL Plan。

Memo

优化器生成的所有可行计划的空间被编码到内存中叫做Memo的数据结构中。Memo数据结构由一系列叫做groups的容器组成,每个group包含逻辑等价的表达式。不同的Memo Group表达不同的查询子目标(如表的filter,两个表的join)。Group成员叫做group expression,通过不同的逻辑方式达成group的目标(如join的不同顺序)。每个group expression是一个包含其他group作为它的子女的操作符,所以这是一个递归的结构。

搜索机制和作业调度器

Orca利用一个搜索机制来探索所有可行计划的空间,并找到具有最小估算代价的计划。

搜索机制通过作业调度器实现,它创建独立、并行的工作单元,并通过以下三个步骤实现查询优化:

  • exploration:生成等价的logical expressions
  • implementation:生成物理计划
  • optimization:强制必须的物理属性(如排序顺序),计算所有可行计划的代价

变换

可行计划的生成是通过应用变换规则:

  • 生成等价的逻辑表达式(如InnerJoin(A, B) => InnerJoin(B, A))
  • 现有表达式的物理实现(如Join(A, B) => HashJoin(A, B))

应用变换规则的结果被复制到Memo,结果可能三创建新的group,或者添加新的group expression到现有的group。

属性强制

描述查询需求和计划特征的可扩展的框架,通过属性指定实现。

  • 逻辑属性:如输出列
  • 物理属性:如排序顺序和数据分布
  • 标量属性:如join条件中使用的列

在查询优化中,每个操作符会要求子女的特定属性,优化后的子计划或者自己满足这个属性(如IndexScan计划提供排序后的数据),或者需要在计划中插入一个enforcer(如排序操作符)以提供需要的属性。

元数据缓存

元数据的变化并不频繁,每次查询元数据都有开销。Orca把元数据在优化器端做了缓存,旨在缓存中无法取到元数据或者元数据改变的时候才会从catalog中读取。元数据缓存同时抽象了数据库系统的细节,方便测试和调试。

GPOS

一个OS抽象曾,用于Orca和外部操作系统交互,包括一个内存管理器,以及一些原语:

  • 并发控制
  • 异常处理
  • 文件I/O
  • 同步数据结构

你可能感兴趣的:(GreenPlum优化器Orca论文笔记)