本文转发自技术世界,原文链接 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 本身的特点,未考虑数据本身的特点,也未考虑算子本身的代价。
本文转发自技术世界,原文链接 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,实现简单有效。
♣ 题目部分 在Oracle中,什么是RBO和CBO? ♣ 答案部分 Oracle数据库中优化器(Optimizer)是SQL分析和执行的优化工具,是Oracle数据库中内置的一个核心模块。...(一)RBO RBO的执行机制非常简单,就是在优化器里面嵌入若干种规则,如果执行的SQL语句符合某个规则(Rank,共有1~15共15个等级),那么Oracle会按照规则(Rank)制定出相应的执行计划...由于RBO只是简单的去匹配Rank,所以它的执行计划在很多时候并不是最佳的。例如,某个表的其中一列数据分布非常不均匀,其中90%的数据内容是一样的,并且在这个字段上有索引。...其实,在这种情况下,选择全表扫描是最优的,但是RBO不会这么选择。RBO的缺点主要有: ①执行计划出了问题,很难对其做调整。...③Oracle很多新特性不被RBO支持。 ④制定出差的执行计划的概率比较大。 ⑤忽略了SQL中表本身的统计信息情况。
[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 最后,优化器会把已经完成优化的优化计划重新转换成执行计划,这里和第一步相反,不过也是一个递归遍历转换的过程
而深度缓冲区和模板缓冲区这类不需要在后续的着色器阶段中被读取和处理的数据,正是RBO的绝佳应用场景。 由于RBO不能被直接读取,所以无法像操作纹理一样从 RBO 中直接获取(采样)数据。...功能差异:纹理可以被采样,可以在着色器中读取和操作;而 RBO 则只能用于渲染,无法直接读取。这使得 RBO通常用于那些只需要存储但不需要处理的缓冲数据。...所以RBO的应用场景相对局限。 3....相关接口 RBO的相关接口涉及到其创建、绑定、分配存储空间、附加到FBO等操作,下面是相关接口的详细说明: // 创建渲染缓冲对象 // n: 要创建的 RBO 数量 // renderbuffers...); // 删除渲染缓冲对象 // n: 要删除的 RBO 数量 // renderbuffers: 要删除的 RBO ID 数组 void glDeleteRenderbuffers(GLsizei
RBO缺陷 2.2.3 RBO执行过程 2.2.4 RBO特殊情况 2.2.5 强制CBO的情况 2.3 基于成本的优化器 2.3.1 CBO简介 2.3.2 集的势 2.3.3 可选择率 三、优化器优化模式...结果集适用于RBO和CBO。...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
RBO中包含了一套有着严格顺序的优化规则,同样一条SQL,无论读取的表中数据是怎么样的,最后生成的执行计划都是一样的。同时,在RBO中SQL写法的不同很有可能影响最终的执行计划,从而影响脚本性能。...从上述描述可知,CBO是优于RBO的,原因是RBO是一种只认规则,对数据不敏感的呆板的优化器,而在实际过程中,数据往往是有变化的,通过RBO生成的执行计划很有可能不是最优的。...事实上目前各大数据库和大数据计算引擎都倾向于使用CBO,例如从Oracle 10g开始,Oracle已经彻底放弃RBO,转而使用CBO;而Hive在0.14版本中也引入了CBO。...下面将介绍RBO和CBO两种优化器的执行过程。...RBO RBO的执行过程比较简单,主要包含两个步骤: 1)Transformation 遍历关系表达式,只要模式能够满足特定优化规则就进行转换。
上篇文章我们提到了Calcite,Calcite本身就支持两种优化方式分别是RBO和CBO。 RBO RBO(Rule-Based Optimizer) 基于规则的优化器。...所以说,虽然RBO是一个老司机,知道常见的套路,但是当路况不同时,也无法针对性的达到最佳的效果。 CBO CBO(Cost-Based Optimizer)基于代价的优化器。...从描述来看,CBO是优于RBO的,RBO只认规则,对数据不敏感,而在实际的过程中,数据的量级会严重影响同样SQL的性能。所以仅仅通过RBO生成的执行计划很有可能不是最优的。
熟悉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进步很大。
二、优化器优化方式 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的情况
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 来说还是有很大的性能提升。
在决定目标SQL的执行计划时,如果可能的执行路径不止一条,则RBO就会从该SQL多种可能的执行路径中选择一条等级最低的执行路径来作为其执行计划。...RBO的具体规则 下面我们就来看看RBO的具体规则,如表1所示。 ? 下面针对表1中所示的每一种规则的含义及其用法进行说明。 Single Row by ROWID:根据ROWID,返回一条记录。...RBO在实际工作中的应用 在一般的工作场景中,很少会涉及使用RBO的情况。随着Oracle自身技术的发展,CBO优化器成为首选。...需要注意的是,因为RBO技术出现比较早,很多新的技术不支持,所以在很多情况下即使手工指定使用RBO优化器,也可能会失效,Oracle仍然会使用CBO优化器。下面介绍一下失效的情况。...此时可以考虑使用RBO优化器,但即使是这种情况,也要严格限制特定范围,一般只在语句级使用RBO优化器。 本文摘编于《数据库高效优化:架构、规范与SQL技巧》。
这些附着点指向的缓冲区通常包含在某些对象里,我们把这些对象叫做附件,附件的类型有:纹理(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
RBO内置的等级1所对应的的执行路径就是"single row by rowid(通过rowid来访问单行数据)"。等级15所对应的的执行路径则是"full table scan(全表扫描)"。...等价改写目标SQL,以让RBO生效。...对于多表连接的,这种改变可以影响表连接的顺序,进而使用RBO情况下对目标SQL执行计划作调整。 若两条或两条以上的等级值相同的执行路径。...RBO会依据目标SQL中所涉及的相关对象在数据字典缓存中的缓存顺序和目标SQL中所涉及的各个对象在目标SQL文本中出现的先后顺序来综合的判断。...,RBO根据固定规则产生的执行计划就很可能不是当前情况下的最优执行计划了。
主流的查询优化器分类,一般仅分为两大类:RBO优化器和CBO优化器。目前,业界通用的数据库系统,其优化器也至少包括RBO和CBO优化器,结合两者进行计划树优化。...RBO RBO(Rule-based Optimizer),基于规则的优化器。顺序执行一组预设固定的优化规则进行计划树等价转换。...RBO的优化规则一般是业界沉淀的通用规则,通常假设转换后的计划树的查询性能往往更优于转换前的计划树。由于仅考虑顺序遍历优化规则,其执行效率十分高效。...但RBO也存在的一些问题,仅关注关系代数的变换,不会考虑具体的数据分布信息。 CBO CBO(Cost-based Optimizer),基于代价/成本(COST)的优化器。...市面上,很多数据库的优化器虽然实现细节不同,但整体遵循相同的架构方案:同时支持RBO和CBO优化,基于自顶向下框架实现的,以统一搜索模型为主的混合优化器模型。
查询优化器主要解决的是多个连接操作的复杂查询优化,负责生成、制定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。
查询优化器,是数据库l的一个核心模块,分为cbo和rbo两种。 其中,rbo是基于规则的优化器。(rbo在oracle早期版本中使用,现在也保留,不过默认为cbo。...MySQL没有rbo优化器) 这些规则是硬编码在数据库的代码中的。rbo会根据输入的sql语句可以匹配到的优先级最高的规则去作为执行计划。例如:在rbo中有这么一条规则:有索引的情况下,使用索引。...rbo最大的问题在于,通过固定规则来决定执行计划。并不会考虑sql中涉及的对象的数量和分布。有可能选出来的规则不是最优的执行计划。
一位经验丰富的数据库调优大师,既有老司机般的规则经验(RBO),又有AI般的智能决策能力(CBO)。 让我们一起揭秘这位幕后英雄是如何让你的SQL查询速度飞起来的!...Doris的查询优化器像一位经验丰富的数据库调优专家,它既继承了传统RBO的成熟经验,又拥有现代CBO的智能决策能力。...改写查询计划(RBO):在语法和语义分析之后,优化器会进行基于规则的优化(RBO)。这一步骤会通过一系列预定义的规则对查询计划进行改写,以确定性地优化执行速度。...这种基于规则的优化器(RBO)在简单场景下表现不错,却难以应对复杂多变的查询场景。 现代查询优化器更像一个智能导航系统。...双剑合璧的优化策略 Doris查询优化器采用RBO与CBO相结合的方案,实现优化策略的最佳平衡。
SQL 优化 基于规则优化(RBO) 基于规则的优化器(Rule-Based Optimizer,RBO):根据优化规则对关系表达式进行转换,这里的转换是说一个关系表达式经过优化规则后会变成另外一个关系表达式...RBO 中包含了一套有着严格顺序的优化规则,同样一条 SQL,无论读取的表中数据是怎么样的,最后生成的执行计划都是一样的。...同时,在 RBO 中 SQL 写法的不同很有可能影响最终的执行计划,从而影响执行计划的性能。...从上述描述可知,CBO 是优于 RBO 的,原因是 RBO 是一种只认规则,对数据不敏感的呆板的优化器,而在实际过程中,数据往往是有变化的,通过 RBO 生成的执行计划很有可能不是最优的。...Calcite优化器 Calcite提供了两类型的优化器,即上述所说的RBO优化器和CBO优化器,在Calcite中的具体实现类对应HepPlanner(RBO)和VolcanoPlanner(CBO
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的表现。
领取专属 10元无门槛券
手把手带您无忧上云