`
zhuyufufu
  • 浏览: 135023 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

RBO CBO 优化器 Oracle性能调优

阅读更多
部分内容引自 Oracle优化器的优化方式和优化模式-性能调优
http://www.cnblogs.com/sopost/archive/2010/12/21/2190066.html

书 <<收获,不止Oracle>> 作者梁敬彬。

    以前做过生产运行环境慢的问题定位与调优,记忆中影响最大的部分在Oracle数据库。
    Oracle的种种问题会导致应用产生性能问题:
    数据库服务器操作系统的版本问题(32位或者64位等),
    oracle的版本问题(32位或者64位、10g、11g等),
    数据表的关键列索引没建,
    表空间不足了,
    数据库服务器IP地址冲突了,
    数据库表设计不合理,
    DBA没有建好rac等等。

    这篇文章介绍一下Oracle优化器方面的知识,可能只与上面所列条目的索引建立有关系。

    索引的概念应用广泛:图书馆图书编目、编码,电视节目列表,文件系统的树形结构编目,全文搜索与搜索引擎也通过建立索引提高检索效率等等。
    Oracle索引就是对数据库表中一列或多列的值进行排序的一种结构。
    Oracle索引有三种类型: B-Tree索引,位图索引,函数索引。
    通常应用较多的是B-Tree索引。
   
    按照常人的理解,当只需要检索数据表中少量数据时,应用索引是可以提高速度的(比如修改某一条记录,查询某几条记录);但是当要检索大量数据时(比如从100万记录中查询出30万条),索引应该不起什么作用。

    对应现实阅读书籍的例子来理解就容易了:当只要查看书籍中某个理论的内容时翻看一下目录,找到具体页数,然后去阅读,非常方便;但是当一本书的很多内容都有吸引力时,我最可能会从头到尾阅读一遍。
   
    当然现实生活中阅读书籍的模式并不只是这两种,如:我对书籍中很多概念都有兴趣,我可能会翻看目录来一一检索查看。

    Oracle数据库也有同样的问题:虽然索引号称比较快,但是索引实际的检索效率可能不如别的检索方式。那么Oracle是如何处理这种种情况的呢?
    Oracle优化器就是用来权衡检索效率的。
   
    Oracle优化器(Optimizer)主要工作是分析语句的执行计划。

    Oracle优化器有两种优化方式: RBO(Rule-Based Optimization) 基于规则的优化, CBO(Cost-Based Optimization)基于代价的优化。
    当采用RBO方式时:优化器在分析SQL语句时遵循Oracle内部预定的一些规则,如where 字句中某条件列有索引则走索引等。
    当采用CBO方式时:优化器在分析SQL语句参照的是表及索引的统计信息。

    Oracle优化器的模式有四种:Rule, Choose, First Rows, All Rows。
    Rule既是走RBO方式。
    Choose是指当一个表或索引有统计信息则走CBO方式,反之并且表不是特别小且有索引则走RBO方式。Choose模式是Oracle的默认优化器模式。
    First Rows与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。
    All Rows:也就是我们所说的Cost方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。没有统计信息则走基于规则的方式。


    优化器模式的设定:
    A、Instance级别
     我们可以通过在init.ora文件中设定OPTIMIZER_MODE=RULE、OPTIMIZER_MODE=CHOOSE、OPTIMIZER_MODE=FIRST_ROWS、OPTIMIZER_MODE=ALL_ROWS去选用3所提的四种方式,如果你没设定OPTIMIZER_MODE参数则默认用的是Choose这种方式。


    B、Sessions级别
     通过SQL> ALTER SESSION SET OPTIMIZER_MODE=?;来设定。


    C、语句级别
      可能需要用到Hint。


   本文要说明的核心思想是: Oracle并不认为SQL语句走索引就是最优的,这和现实生活中阅读书籍有异曲同工之妙。

   但是话又说回来:对于普通的应用,表的索引添加是必须的。因为如果表没有索引,Oracle优化器就陷入巧妇难为无米之炊的境地。
分享到:
评论

相关推荐

    ORACLE CBO RBO 优化

    ORACLE CBO RBO 优化

    Oracle的RBO和CBO详细介绍和优化模式设置方法

    Oracle的优化器有两种优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO),在Oracle8及以后的版本,Oracle强列推荐用CBO的方式 RBO方式:...

    CBO,RBO在ORACLE中的应用

    CBO,RBO在ORACLE中的应用

    让Oracle跑得更快 Oracle 10g性能分析与优化思路.part2.rar

    4.1 rbo基于规则的优化器 66 4.2 cbo基于成本的优化器 69 第5章 执行计划 85 5.1 cardinality (基数) 85 5.2 sql的执行计划 94 第6章 hint 109 6.1 和优化器相关的hint 115 6.1.1 all_rows和first_rows(cbo) 115 ...

    性能优化之-Oracle性能优化.ppt

    ORACLE的优化器共有3种: a. RULE (基于规则rbo) b. COST (基于成本cbo) c. CHOOSE (选择性)  设置缺省的优化器,可以通过对init.ora文件中 OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS...

    让Oracle跑得更快 Oracle 10g性能分析与优化思路.part1.rar

    4.1 rbo基于规则的优化器 66 4.2 cbo基于成本的优化器 69 第5章 执行计划 85 5.1 cardinality (基数) 85 5.2 sql的执行计划 94 第6章 hint 109 6.1 和优化器相关的hint 115 6.1.1 all_rows和first_rows(cbo) 115 ...

    Oracle_SQL优化

    Oracle_SQL优化 Oracle的优化器有两种方式,一种是基于规则的优化方式(RBO),另外一种是基于代价的优化方式(CBO),Oracle推荐在oracle8以后的版本强烈推荐使用CBO的方式。

    ORACLE9i_优化设计与系统调整

    §14.1 Oracle优化器 170 §14.2 SQL处理体系结构 171 §14.2.1 解析程序 171 §14.2.2 优化程序 172 §14.2.3 行源程序产生器 172 §14.2.4 SQL执行 172 §14.3 EXPLAIN PLAN 172 §14.4 选择优化器路径及目标 172 ...

    Oracle优化器 Cardinality基数与Selectivity选择性

    依据所选择执行计划时所用的判断原则,oracle数据库里的优化器又分为RBO和CBO两种。 一、基于规则的优化器。《RBO: Rule-Based Optimization》  Oracle会在代码里事先为各种类型的执行路径定一个等级,一共15个等级...

    oracle数据库执行计划

    oracle数据库执行计划文档,描述了cbo,rbo等优化方式,以及数据库执行计划的稳定性

    ORACLE数据库DBA面试集锦

     在optimizer_mode=choose时,如果表有统计信息(分区表外),优化器将选择CBO,否则选RBO。RBO遵循简单的分级方法学,使用15种级别要点,当接收到查询,优化器将评估使用到的要点数目, 然后选择最佳级别(最少的数量)的...

    ORACLE数据库中SQL优化解析

    本文介绍了SQL的执行过程,ORACLE优化器的基本原理,优化器的选择和应用,以及如何建立 和管理索引来提高程序的执行效率。并以实际工作经验介绍了优化工具以及提出对SQL优化的体会。

    RBO文件加密_V1.0.0

    RBO文件加密_V1.0.0

    华脉ORACLE高效SQL规则

    1. 基于规则的优化器-- Rule Based (Heuristic) Optimization(简称RBO) 2. 基于代价的优化器 -- Cost Based Optimization(简称CBO) 3. 判断当前数据库使用何种优化器—CHOOSE 4. 如何设定选用哪种优化模式  访问...

    RBO文件加密工具

    1.设置最大文件长度,2.生成密钥,3.加密(明文-&gt;密文),4.解密(密文-&gt;明文)

    高级SQL优化教程.pdf

    高级SQL优化教程 pdf 文档,分五部分: 第一部分:细说RBO和CBO 第二部分:理解RBO 第三部分:SQL调整背景知识 。。。。。。

    高级SQL优化(二)

    Oracle10g起,在基于CBO的优化器模式下Oralce会进行自动优化,但在基于RBO(基于规则)的优化器模式下,依然保持此规则。1.索引对不等号和NOT的限制RBO模式下,执行计划如下:1.索引对不等号和NOT的限制RBO模式下,...

Global site tag (gtag.js) - Google Analytics