本文共 1609 字,大约阅读时间需要 5 分钟。
在查询执行中,数据可以通过多种方式分发到Segments:
Orca是一个现代的自顶向下的,基于Cascades优化框架的查询优化器。Orca和数据库系统是松耦合的,这样它可以支持不同的计算架构(如MPP和Hadoop)。
Data eXchange Language,优化器和数据库系统之间的通讯协议。分为三种:DXL Query, DXL MD, DXL Plan。
优化器生成的所有可行计划的空间被编码到内存中叫做Memo的数据结构中。Memo数据结构由一系列叫做groups的容器组成,每个group包含逻辑等价的表达式。不同的Memo Group表达不同的查询子目标(如表的filter,两个表的join)。Group成员叫做group expression,通过不同的逻辑方式达成group的目标(如join的不同顺序)。每个group expression是一个包含其他group作为它的子女的操作符,所以这是一个递归的结构。
Orca利用一个搜索机制来探索所有可行计划的空间,并找到具有最小估算代价的计划。
搜索机制通过作业调度器实现,它创建独立、并行的工作单元,并通过以下三个步骤实现查询优化:
可行计划的生成是通过应用变换规则:
应用变换规则的结果被复制到Memo,结果可能三创建新的group,或者添加新的group expression到现有的group。
描述查询需求和计划特征的可扩展的框架,通过属性指定实现。
在查询优化中,每个操作符会要求子女的特定属性,优化后的子计划或者自己满足这个属性(如IndexScan计划提供排序后的数据),或者需要在计划中插入一个enforcer(如排序操作符)以提供需要的属性。
元数据的变化并不频繁,每次查询元数据都有开销。Orca把元数据在优化器端做了缓存,旨在缓存中无法取到元数据或者元数据改变的时候才会从catalog中读取。元数据缓存同时抽象了数据库系统的细节,方便测试和调试。
一个OS抽象曾,用于Orca和外部操作系统交互,包括一个内存管理器,以及一些原语:
转载地址:http://janbb.baihongyu.com/