首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spark SQL Catalyst 内部原理 与 RBO

本文转发自技术世界,原文链接 http://www.jasongj.com/spark/rbo/ 本文所述内容均基于 2018年9月10日 Spark 最新 Release 2.3.1 版本。...Optimizer Spark SQL 目前的优化主要是基于规则的优化,即 RBO (Rule-based optimization) 每个优化以 Rule 的形式存在,每条 Rule 都是对 Analyzed...Plan 的等价转换 RBO 设计良好,易于扩展,新的规则可以非常方便地嵌入进 Optimizer RBO 目前已经足够好,但仍然需要更多规则来 cover 更多的场景 优化思路主要是减少参与计算的数据量以及计算本身的代价...本文介绍的 Optimizer 属于 RBO,实现简单有效。它属于 LogicalPlan 的优化,所有优化均基于 LogicalPlan 本身的特点,未考虑数据本身的特点,也未考虑算子本身的代价。

79920

Spark SQL Catalyst 内部原理 与 RBO

本文转发自技术世界,原文链接 http://www.jasongj.com/spark/rbo/ 本文所述内容均基于 2018年9月10日 Spark 最新 Release 2.3.1 版本。...Plan 的等价转换 RBO 设计良好,易于扩展,新的规则可以非常方便地嵌入进 Optimizer RBO 目前已经足够好,但仍然需要更多规则来 cover 更多的场景 优化思路主要是减少参与计算的数据量以及计算本身的代价...[Spark SQL RBO Predicate Pushdown] 当 Filter 可过滤掉大部分数据时,参与 Join 的数据量大大减少,从而使得 Join 操作速度大大提高。...[Spark SQL RBO Column Pruning] 这里需要说明的是,此处的优化是逻辑上的优化。...[Spark SQL RBO Column Pruning] 至此,一条 SQL 从提交到解析、分析、优化以及执行的完整过程就介绍完毕。 本文介绍的 Optimizer 属于 RBO,实现简单有效。

1.3K60
您找到你想要的搜索结果了吗?
是的
没有找到

【DB笔试面试574】在Oracle中,什么是RBO和CBO?

♣ 题目部分 在Oracle中,什么是RBO和CBO? ♣ 答案部分 Oracle数据库中优化器(Optimizer)是SQL分析和执行的优化工具,是Oracle数据库中内置的一个核心模块。...(一)RBO RBO的执行机制非常简单,就是在优化器里面嵌入若干种规则,如果执行的SQL语句符合某个规则(Rank,共有1~15共15个等级),那么Oracle会按照规则(Rank)制定出相应的执行计划...由于RBO只是简单的去匹配Rank,所以它的执行计划在很多时候并不是最佳的。例如,某个表的其中一列数据分布非常不均匀,其中90%的数据内容是一样的,并且在这个字段上有索引。...其实,在这种情况下,选择全表扫描是最优的,但是RBO不会这么选择。RBO的缺点主要有: ①执行计划出了问题,很难对其做调整。...③Oracle很多新特性不被RBO支持。 ④制定出差的执行计划的概率比较大。 ⑤忽略了SQL中表本身的统计信息情况。

1.1K20

Nebula Graph 源码解读系列 | Vol.04 基于 RBO 的 Optimizer 实现

[Nebula Graph 源码解读系列 | Vol.04 基于 RBO 的 Optimizer 实现] 上篇我们讲述了一个执行计划是如何生成的,这次我们来看下这个生成的执行计划是被 Optimizer...数据库的优化器通常分为两类,一类是基于规则的优化器 RBO(Rule-basd optimizer),一类是基于代价的优化 CBO(Cost-based optimizer),前者完全基于预设的优化规则进行优化...目前 Nebula Graph 主要实现得是 RBO,所以本文也主要集中讲述 Nebula Graph 中的 RBO 实现。...[Nebula Graph 源码解读系列 | 基于 RBO 的 Optimizer 实现] 图1 优化器目前的主要功能就是根据预设模式在执行计划中进行匹配,如果匹配成功,再调用相应的转换函数将匹配到的部分执行计划按预设的规则进行转换...[Nebula Graph 源码解读系列 | 基于 RBO 的 Optimizer 实现] 图2 最后,优化器会把已经完成优化的优化计划重新转换成执行计划,这里和第一步相反,不过也是一个递归遍历转换的过程

42630

构想下一代优化器MBO:MachineLearning Based Optimizer

熟悉ORACLE数据库的人,对RBO/CBO肯定很熟。...Rule Based Optimizer(RBO)基于规则 Cost Based Optimizer(CBO)基于成本,或者讲统计信息 ORACLE 提供了CBO、RBO两种SQL优化器。...ORACLE 已经明确声明在ORACLE9i之后的版本中(ORACLE 10G ),RBO将不再支持。因此选择CBO 是必然的趋势。...RBO自ORACLE 6版以来被采用,有着一套严格的使用规则,只要你按照它去写SQL语句,无论数据表中的内容怎样,也不会影响到你的“执行计划”,也就是说对数据不“敏感”;CBO计算各种可能“执行计划”的...RBO是一种呆板、过时的优化器,它只认规则,对数据不敏感。毕竟规则是死的,数据是变化的,这样生成的执行计划往往是不可靠的,不是最优的,CBO 相比RBO进步很大。

87680

SQL 数据库查询的优化工具及实用

RBO中包含了一套有着严格顺序的优化规则,同样一条SQL,无论读取的表中数据是怎么样的,最后生成的执行计划都是一样的。同时,在RBO中SQL写法的不同很有可能影响最终的执行计划,从而影响脚本性能。...从上述描述可知,CBO是优于RBO的,原因是RBO是一种只认规则,对数据不敏感的呆板的优化器,而在实际过程中,数据往往是有变化的,通过RBO生成的执行计划很有可能不是最优的。...事实上目前各大数据库和大数据计算引擎都倾向于使用CBO,例如从Oracle 10g开始,Oracle已经彻底放弃RBO,转而使用CBO;而Hive在0.14版本中也引入了CBO。...下面将介绍RBO和CBO两种优化器的执行过程。...RBO RBO的执行过程比较简单,主要包含两个步骤: 1)Transformation 遍历关系表达式,只要模式能够满足特定优化规则就进行转换。

1.6K20

Orace的优化器简介

二、优化器优化方式 2.1 优化器的优化方式 Oracle优化器按照优化方式分为两种 基于规则的优化器(Rule-Based Optimizer),简称RBO 基于成本的优化器(Cost-Based Optimizer...),简称CBO 2.2 基于规则的优化器 2.2.1 RBO简介 基于规则的优化器(Rule-Based Optimizer):所谓基于规则的优化器是指Oracle按照硬编码在数据库的一系列规则来决定SQL...的执行计划,简称是RBO 2.2.2 RBO缺陷 RBO在oracle10后官方就不建议用,因为RBO并不支持oracle一些性能比较好的功能特性,也不会根据表的数据量等等获取执行计划,而且RBO定的那些规则也不是很容易修改...不过代码在oracle10后版本还是保存的,所以要学习测试也可以用SQL开启RBO模式 alter session set optimizer_mode='RULE'; 2.2.3 RBO执行过程 RBO...2.2.4 RBO特殊情况 对于执行路径一样的情况:假如出现执行路径一样的情况,这时候就要根据数据字典缓存来确定最低的等级了,意思就是获取缓存中的先后顺序确定哪条作为执行计划 2.2.5 强制CBO的情况

76330

袋鼠云数栈基于CBO在Spark SQL优化上的探索

1、RBO 是传统的 SQL 优化技术 RBO 是发展比较早且比较成熟的一项 SQL 优化技术,它按照制定好的一系列优化规则对 SQL 语法表达式进行转换,最终生成一个最优的执行计划。...RBO 属于一种经验式的优化方法,严格按照既定的规则顺序进行匹配,所以不同的 SQL 写法直接决定执行效率不同。...2、CBO 是 RBO 改进演化的优化方式 CBO 是对 RBO 改进演化的优化方式,它能根据优化规则对关系表达式进行转换,生成多个执行计划,在根据统计信息 (Statistics) 和代价模型 (Cost...3、 CBO 与 RBO 优势对比 ● RBO 优化例子 下面我们来看一个例子:计算 t1 表(大小为:2G)和 t2 表(大小为:1.8G)join 后的行数 上图是: SELECT COUNT(...虽然 Spark SQL 运行时得到的统计信息可能不是最新的,但是总体相比较 RBO 来说还是有很大的性能提升。

1K20

一看就懂的 OpenGL 基础概念(4):各种 O 之 FBO丨音视频基础

这些附着点指向的缓冲区通常包含在某些对象里,我们把这些对象叫做附件,附件的类型有:纹理(Texture)或渲染缓冲区对象(Render Buffer Object,RBO)。...渲染缓冲区对象(Render Buffer Object,RBO)则是一个由应用程序分配的 2D 图像缓冲区,可以分配和存储颜色、深度或者模板值,可以用作 FBO 中的颜色、深度或者模板附着。...\n"); // ...省略其他代码... 2)使用 RBO 附件 下面是一个简单的使用 RBO 附件的例子: // 创建和绑定 FBO: GLuint fbo; glGenFramebuffers...: GLuint rbo; glGenRenderbuffers(1, &rbo); // 创建 RBO glBindRenderbuffer(GL_RENDERBUFFER, rbo); // 绑定...RBO 的颜色缓冲区分配存储空间 // 将 RBO 添加为 FBO 的附件,连接在颜色附着点: glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0

1.4K30

整个SQL语句的执行效率都靠它了...

在决定目标SQL的执行计划时,如果可能的执行路径不止一条,则RBO就会从该SQL多种可能的执行路径中选择一条等级最低的执行路径来作为其执行计划。...RBO的具体规则 下面我们就来看看RBO的具体规则,如表1所示。 ? 下面针对表1中所示的每一种规则的含义及其用法进行说明。 Single Row by ROWID:根据ROWID,返回一条记录。...RBO在实际工作中的应用 在一般的工作场景中,很少会涉及使用RBO的情况。随着Oracle自身技术的发展,CBO优化器成为首选。...需要注意的是,因为RBO技术出现比较早,很多新的技术不支持,所以在很多情况下即使手工指定使用RBO优化器,也可能会失效,Oracle仍然会使用CBO优化器。下面介绍一下失效的情况。...此时可以考虑使用RBO优化器,但即使是这种情况,也要严格限制特定范围,一般只在语句级使用RBO优化器。 本文摘编于《数据库高效优化:架构、规范与SQL技巧》。

87520

大数据Doris(二):Doris原理篇

查询优化器主要解决的是多个连接操作的复杂查询优化,负责生成、制定SQL的执行计划,目前主要有2种查询优化器:基于规则的优化器(RBO)与基于代价的优化器(CBO),下面分别大致了解RBO和CBO优化器原理...: RBO(Rule-Based Optimization): RBO即基于规则的优化器,该优化器按照硬编码在数据库中的一系列规则来决定SQL的执行计划,只要求我们按照这套规则来写SQL语句,无论表中的数据分布和数据量如何都不会影响这套规则下的执行计划...通过以上可以了解到在RBO对数据不“敏感”,但在实际的场景中,数据的量级以及数据的分布会严重影响同样的SQL执行性能,这也是RBO的缺点所在,所以RBO生成的执行计划往往不是最优的。...,这种查询引擎支持RBO和CBO优化器,Flink计算框架使用的是Calcite查询引擎(开源),这种查询引擎也是同时支持RBO和CBO优化器。...同样,Doris中在优化器方面也是使用 CBO 和 RBO 结合的优化策略,RBO 支持常量折叠、子查询改写、谓词下推等,CBO 支持 Join Reorder。

71631

如何使用calcite rule做SQL重写(上)

SQL 优化 基于规则优化(RBO) 基于规则的优化器(Rule-Based Optimizer,RBO):根据优化规则对关系表达式进行转换,这里的转换是说一个关系表达式经过优化规则后会变成另外一个关系表达式...RBO 中包含了一套有着严格顺序的优化规则,同样一条 SQL,无论读取的表中数据是怎么样的,最后生成的执行计划都是一样的。...同时,在 RBO 中 SQL 写法的不同很有可能影响最终的执行计划,从而影响执行计划的性能。...从上述描述可知,CBO 是优于 RBO 的,原因是 RBO 是一种只认规则,对数据不敏感的呆板的优化器,而在实际过程中,数据往往是有变化的,通过 RBO 生成的执行计划很有可能不是最优的。...Calcite优化器 Calcite提供了两类型的优化器,即上述所说的RBO优化器和CBO优化器,在Calcite中的具体实现类对应HepPlanner(RBO)和VolcanoPlanner(CBO

75621

Oracle优化04-Optimizer优化器

Oracle的优化器有两种 RBO 基于规则的优化器 CBO 基于代价的优化器 从ORACLE10G开始,RBO已经被弃用(但是我们依然可以通过HINT的方式使用它)。...---- RBO(Rule Based Optimizer) RBO概述 在8i之前,ORACLE使用RBO(Rule Based Optimizer 基于规则的优化器)优化器。...RBO选择执行计划的优先级列表如下: ? 其中,排名越靠前,Oracle认为效率越高。例如:按索引访问的效率肯定高于全表扫描,多字段复合索引的效率高于单字段索引,等等。可见,RBO策略其实很简单。...通俗地讲,RBO就是不关心被访问对象的实际数据分布情况、索引效率等,仅凭想象去决定应该如何去访问数据库。可见,RBO是一种非常粗放型的优化器。...可见相比RBO,CBO是一种更加精确而有效的优化器。 ---- 案例说明 同样是使用RBO中的案例,我们来看下CBO的表现。

1.1K20

Oracle统计信息的那点事儿

Oracle的优化器有两种,基于规则的优化器(RBO)与基于代价的优化器(CBO), RBO: Rule-Based Optimization 基于规则的优化器 CBO: Cost-Based Optimization...基于代价的优化器 RBO自ORACLE 6以来被采用,一直沿用至ORACLE 9i。...ORACLE 10g开始,ORACLE已经彻底丢弃了RBO,它有着一套严格的使用规则,只要你按照它去写SQL语句,无论数据表中的内容怎样,也不会影响到你的“执行计划”,也就是说RBO对数据不“敏感”;它根据...比如在规则中,索引的优先级大于全表扫描;在RBO中,SQL的写法往往会影响执行计划,这就要求开发人员非常了解RBO的各项细则,菜鸟写出来的SQL脚本性能可能非常差。...CBO是一种比RBO更加合理、可靠的优化器,它是从ORACLE 8中开始引入,但到ORACLE 9i中才逐渐成熟,在ORACLE 10g中完全取代RBO,CBO是计算各种可能“执行计划”的“代价”,即COST

1.6K20
领券