optimizer_mode优化器模式
查询优化器最主要的工作就是接受输入的SQL以及各种环境参数、配置参数,生成合适的SQL执行计划(Execution Plan)。
Query Optimizer一共经历了两个历史阶段:
- RBO: Rule-Based Optimization 基于规则的优化器
- CBO: Cost-Based Optimization 基于代价的优化器
关于RBO与CBO,一个形象的比喻:大数据时代到来以前,做生意或许凭借多年累计 下来的经验规则(RBO)就能够很好的做出决策,跟随市场变化。但是大数据时代,如果做生意还是靠以前凭经验做决策,而不是靠大数据、数据分析、数据挖掘做决策,那么就有可能做出错误的决策。这也就是越来越多的公司对BI、数据挖掘越来越重视的缘故
一、RBO优化器
RBO(Rule Based Optimizer,基于规则的优化器)就是在优化器里面嵌入15种规则,它根据ORACLE指定的优先顺序规则,对指定的表进行执行计划的选择。执行SQL语句符合哪种规则,就按照规则定制出相应的SQL执行计划。比如在规则中,索引的优先级大于全表扫描;RBO是根据可用的访问路径以及访问路径等级来选择执行计划,在RBO中,SQL的写法往往会影响执行计划,它要求开发人 员非常了解RBO的各项细则,菜鸟写出来的SQL脚本性能可能非常差。由于它他是一种过时呆板的优化器,Oracle官方已不再支持RBO服务。
15种规则及ranking:
- RBO Path 1: Single Row by Rowid
- RBO Path 2: Single Row by Cluster Join
- RBO Path 3: Single Row by Hash Cluster Key with Unique or Primary Key
- RBO Path 4: Single Row by Unique or Primary Key
- RBO Path 5: Clustered Join
- RBO Path 6: Hash Cluster Key
- RBO Path 7: Indexed Cluster Key
- RBO Path 8: Composite Index
- RBO Path 9: Single-Column Indexes
- RBO Path 10: Bounded Range Search on Indexed Columns
- RBO Path 11: Unbounded Range Search on Indexed Columns
- RBO Path 12: Sort Merge Join
- RBO Path 13: MAX or MIN of Indexed Column
- RBO Path 14: ORDER BY on Indexed Column
- RBO Path 15: Full Table Scan
二、CBO优化器
CBO查询优化器由查询转换器(Query Transform)、代价估算器(Estimator)和计划生成器(Plan Generator)组成。
2.1 FIRST_ROWS(n)
需要注意的是排序使用的X必须创建有索引,否则CBO会忽略FIRST_ROWS(n)而使用ALL_ROWS.
2.2 ALL_ROWS
三、CHOOSE——两个时代的过渡
CHOOSE是介于自动选择切换RBO和CBO。如果SQL涉及的数据表中有一个有统计量,那么该SQL就是用CBO优化器。否则就是用RBO。动态采样技术是在CBO优化器前提下的技术方案。
SCOTT@PDBORCL> alter session set optimizer_mode=choose;会话已更改。SCOTT@PDBORCL> set autotrace traceonly; SCOTT@PDBORCL> exec dbms_stats.delete_table_stats('scott','emp',cascade_columns => true,cascade_indexes => true);PL/SQL 过程已成功完成。SCOTT@PDBORCL> select ename from emp ;已选择 14 行。执行计划 ---------------------------------------------------------- Plan hash value: 3956160932---------------------------------- | Id | Operation | Name | ---------------------------------- | 0 | SELECT STATEMENT | | | 1 | TABLE ACCESS FULL| EMP | ----------------------------------Note ------ rule based optimizer used (consider using cbo)统计信息 ----------------------------------------------------------1 recursive calls0 db block gets8 consistent gets0 physical reads0 redo size732 bytes sent via SQL*Net to client544 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)14 rows processedSCOTT@PDBORCL> exec dbms_stats.gather_table_stats (ownname => 'scott',tabname => 'emp');PL/SQL 过程已成功完成。SCOTT@PDBORCL> select ename from emp;已选择 14 行。执行计划 ---------------------------------------------------------- Plan hash value: 3956160932-------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 14 | 84 | 3 (0)| 00:00:01 | | 1 | TABLE ACCESS FULL| EMP | 14 | 84 | 3 (0)| 00:00:01 | --------------------------------------------------------------------------统计信息 ----------------------------------------------------------1 recursive calls0 db block gets8 consistent gets0 physical reads0 redo size732 bytes sent via SQL*Net to client544 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)14 rows processedSCOTT@PDBORCL>
View Code
四、optimizer_mode的查看与修改
通过优化器参数optimizer_mode,我们可以控制Oracle优化器生成不同模式下的执行计划。
4.1查看optimizer_mode
parameter optimizer_mode
SCOTT@PDBORCL> show parameter optimizer_modeNAME TYPE VALUE ------------------------------------ ----------- ------------------------------ optimizer_mode string ALL_ROWSSCOTT@PDBORCL> select name, value from v$parameter where name='optimizer_mode';NAME VALUE -------------------------------------------------------------------------------- --------------------------------------- optimizer_mode ALL_ROWSSCOTT@PDBORCL>
4.2修改optimizer_mode
ORACLE 10g 优化器可以从系统级别、会话级别、语句级别三种方式修改优化器模式,非常方便灵活。 其中optimizer_mode可以选择的值有: first_rows_n,all_rows. 其中first_rows_n又有first_rows_1000, first_rows_100, first_rows_10, first_rows_1
系统级别
可以通过下面语句修改optimizer_mode
alter system set optimizer_mode=all_rows scope=both;
会话级别
会话级别修改优化器模式,只对当前会话有效,其它会话依然使用系统优化器模式。
alter session set optimizer_mode=first_rows_100;
语句级别
语句级别通过使用提示hints来实现。
select /*+ rule */ * from emp;
参考:
ORACLE优化器RBO与CBO介绍总结
浅谈optimizer_mode优化器模式
optimizer_mode优化器模式相关推荐
- oracle执行计划的rows不对,Oracle执行计划——all_rows和first_rows(n)优化器模式
Oracle执行计划--all_rows和first_rows(n)优化器模式 0. 环境创建 [sql] SQL> create usertest identified by test 2 d ...
- oracle 优化器 失效,oracle 优化器 不走索引原因
SQL优化器简介 基于规则的优化器 .总是使用索引 .总是从驱动表开始(from子句最右边的表) .只有在不可避免的情况下,才使用全表扫描 .任何索引都可以 基于成本的优化器 .需要表.索引的统计资料 ...
- PLSQL_性能优化系列04_Oracle Optimizer优化器
2014-09-25 Created By BaoXinjian 一.摘要 1. Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的 ...
- Oracle 优化器
什么是优化器 优化器是Oracle中的一个核心模块,它的作用是为用户输入的SQL选择一个它计算出来的最高效的执行计划.SQL语句在Oracle中的执行过程如下图所示: 基于规则优化器RBO 基于规则的 ...
- Oracle_sql优化基础——优化器总结
优化器的基础: 1.Oracle里的优化器: 优化器是Oracle数据库中内置的一个核心子系统,优化器的目的就是按照一定的判断原则来得到它认为目标sql在当前情形下最高效的执行路径,也就是说是为了得到 ...
- 使用优化器提示(Optimizer Hints)
优化器提示(Optimizer Hints)可以用在SQL语句中改变执行计划. 理解优化器提示 提示让你作出决定,这决定一般由优化器来作出.作为一个应用的设计者,你知道一些优化器不知道的关于你的数据的 ...
- 将oracle优化器改为CBO,【DB.Oracle】Oracle 优化器 (RBO, CBO)
Oracle优化器 Oracle数据库中的优化器又叫查询优化器(Query Optimizer).它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划.Oracle的优化器有两种,基于规则 ...
- ORACLE优化器RBO与CBO介绍总结
RBO和CBO的基本概念 Oracle数据库中的优化器又叫查询优化器(Query Optimizer).它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划.Oracle的优化器有两种,基 ...
- mysql cbo rbo_Oracle优化器(RBO与CBO)
Oracle的优化器有两种,基于规则的优化器(RBO)和基于代价的优化器(CBO). 在8i之前,Oracle使用的是RBO(Rule Based Optimizer,基于规则的优化器),他的执行非常 ...
最新文章
- php pdo blob,PHP / PDO / MySQL:插入MEDIUMBLOB存储坏数据
- 【转】Asp.net页面的生命周期
- boost::math::catmull_rom用法的测试程序
- 忘记密码漏洞案例分析
- css3魔方3乘3每层旋转_在玩魔方中学数学,原来魔方与矩阵还有这样的关系
- table 多行 宽度不一致_“table”除了桌子,你还知道一些别的意思吗?
- 程序员应该如何提问?
- datax 定时执行多个job_DataX在有赞大数据平台的实践
- 【荐】万能清除浮动样式
- Java垃圾回收GC概览
- 设计模式之美:Builder(生成器)
- 软件系统怎么做版本管理?
- python3实现扫码获取微信openid功能
- 【传感器大赏】酒精传感器
- HP光影精灵3 TPN-Q193显卡驱动安装不上,鲁大师检测不到显卡
- LLumar龙膜官宣品牌代言人——虚拟偶像「昤珑」
- keras tensorboard的使用
- 2021.1.25-2021.1.31
- 预告 | 从单点工具到平台,默安科技研发安全一体化管理平台即将发布
- Arduino-ESP8266检测温湿度上传阿里云