走进 Orca 架构及技术世界

 Orca 的简介

Orca 是基于 cascades 框架的查询优化器,其中诸多概念都是源于 volcano / cascades。Orca有三大优点:模块化、高延展性、高并发性。其模块化的设计,能以插件的形式用于其他数据库系统。

Orca 主要的优化是 CBO 的优化。CBO 是 Cost - Based Optimization 的缩写,中文叫做“基于成本的优化”。成本指的是查询中使用的 CPU 资源,内存资源,网络资源,磁盘资源。

CBO 简单来说就是探索出所有可能的查询路径,然后分别计算出路径的成本,选择出成本最小的一条路径的一种优化手段。

介绍了 Orca 的部署结构,如下图:

 Orca 的架构

整体架构图如下:

  • Memo :用来存储执行计划的搜索空间,它有一系列的集合 (Group)构成,每个 Group 代表了执行计划的一个子表达式(想对应与查询语句的一个子表达式)。不同的 Group 又产生相互依赖的关系。Group 就代表整个查询语句。

  • Search & Job Scheduler :主要分成三步,一是 Exploration,探索和补全计划空间,就是根据优化规则不断生成语义相同的逻辑表达式。第二步是 Implementation,就是实例化逻辑表达式变成物理算子。第三步是优化,把计划的必要条件都加上。

  • Transformations :就是上面优化中第一步 Exploration 的详解,如何通过优化规则来补全计划空间。

  • Property Enforcement:增加算子的实现需要一些先决条件。

 Orca 的源码分析

起始入口:

COptTasks::SzOptimize->COptTasks::Execute->gpos_exec->gpos::CAutoTaskProxy::Execute->gpos::CWorker::Execute->gpos::CTask::Execute->COptTasks::PvOptimizeTask->gpopt::COptimizer::PdxlnOptimize->gpopt::COptimizer::PexprOptimize

1、Actions 机制:一般分为三部分,每个部分都有对应的处理函数。

2、Xform 机制:初始化时加入规则,在环境变量中可以设置是否起用规则,启动后会设置到 Actions 中,Xform 子类都会实现 PxfsCandidates,安排要进行处理的规则,最终会在 Transform 函数中调用。

3、状态切换:处理规则就是先处理子结点,然后处理自身结点。

4、代价评估处理:总的代价会放到 Context 的 Hash 表结构中,在 BetterThan 函数判断是否是代价更优,固定规则有三个。

  • 规则 1 :分区计划比非分区计划优;

  • 规则 2 :哈希分布比随机分布计划优;

  • 规则 3 :Join 时,行数一样的情况下,有更深 Outer Child 的计划优。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值