走进 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 的计划优。
评论