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 的打算优。