Oracle优化器CBO的知识点

ORACLE 提供了基于成本(CostBased)和基于规则(RuleBased)两种优化器,简称为CBO和RBO,用于确定查询操作的执行计划。

一、如何使用CostBased优化器优化查询操作?

如何使用CBO,那么首先要理解这些概念

1、CBO的成本计算的依据

(1)统计信息:与SQL语句所引用的对象相关以及主机的CPU和IO

(2)SQL语句本身

(3).环境:例如与优化器相关的参数设置

2、优化器目标:optimizer_mode

(1)ALL_ROWS

(2)FIRST_ROWS_N

3、选择率和基数

4、聚簇因子

5、查询转换

(1)视图合并(view merge)

(2)谓词推进(Predicate Pushing)

(3)子查询非嵌套化(Subquery Unnesting)

(4)OR条件展开

6、绑定变量与直方图

7、收集统计信息

二、为什么CostBased优化器的执行计划不是最好的?

CostBased优化器本身也是个智能软件,肯定有陷缺,RBO(Rule-Based Optimizer)可以在某种程度上弥补CBO在性能上的缺陷。

三、为什么CostBased的查询有时候性能很好,有时候却突然的变慢呢?

1、有可能是以下原因

(1)统计信息不正确,这是关键所在

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

(2)与优化器相关的参数设置的不太合理,如下参数

optimizer_features_enable

optimizer_index_caching

optimizer_index_cost_adj

optimizer_mode

db_{keep_|recycle_|nk_}cache_size

db_block_size

db_file_multiblock_read_count

hash_area_size

memory_target

parallel_threads_per_cpu

pga_aggregate_target

sort_area_size

sga_target

(3)sql语句的编写

例如一个复杂的sql有几十张表相连,CBO就不一定能正确连接表的顺序了,这时需要用Hint固定顺序。。。

2、用以下方法改变执行计划

(1)修改sql本身,如用Hints提示等

(2)稳固计划

(3)使用sql概要(sqlprofile)

(4)改变统计信息

(5)设置优化器模式相关的参数

(6)使用基线(baseline)

时间: 2024-08-02 01:03:45

Oracle优化器CBO的知识点的相关文章

ORACLE优化器RBO与CBO介绍总结

RBO和CBO的基本概念   Oracle数据库中的优化器又叫查询优化器(Query Optimizer).它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划.Oracle的优化器有两种,基于规则的优化器(RBO)与基于代价的优化器(CBO)          RBO: Rule-Based Optimization 基于规则的优化器          CBO: Cost-Based Optimization 基于代价的优化器 RBO 自ORACLE 6以来被采用,一直沿用至ORA

Oracle中的优化器--CBO和RBO

Oracle中的优化器--CBO和RBO Oracle数据库中的优化器又叫查询优化器(Query Optimizer).它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划.Oracle的优化器有两种,基于规则的优化器(RBO)与基于代价的优化器(CBO)          RBO: Rule-Based Optimization 基于规则的优化器          CBO: Cost-Based Optimization 基于代价的优化器 RBO自ORACLE 6以来被采用,一直沿

ORACLE优化器

oracle|优化 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你当然也在SQL句级或是会话(session)级对其进行覆盖. 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行analyze 命令

如何选择Oracle优化器

1. 选用适合的Oracle优化器 Oracle的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性). 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS .你当然也在SQL句级或是会话(session)级对其进行覆盖. 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行an

如何选择Oracle优化器使你事半功倍

  1. 选用适合的Oracle优化器 Oracle的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性). 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS .你当然也在SQL句级或是会话(session)级对其进行覆盖. 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行

【DBAplus】深入Oracle优化器:一条诡异执行计划的解决之道

深入Oracle优化器:一条诡异执行计划的解决之道 DBAplus社群 | 2016-05-05 19:51 CBO计算成本并选择最佳执行计划的至关重要输入物就是表和索引的统计信息,过旧或错误的统计信息则可能导致一个性能极差的执行计划被错误地选中.本文将以一个案例展示诡异的统计信息如何影响执行计划的生成. 1案例介绍 这是一个简单的sql,近两个月来对于告警明细表(分区)做月度汇总查询时,总是出现了异常缓慢的情况. 测试SQL: 字段NEALARM_TIME是固定条件,字段RELATED_EMS

Oracle优化器的optimizer_mode参数

optimizer_mode参数   optimizer_mode是oracle 11g的一个优化器参数,在某些时候可以影响优化器的行为,是个不可忽视的细节参数. SQL> show parameter optimizer; optimizer_capture_sql_plan_baselines boolean FALSE optimizer_dynamic_sampling integer 2optimizer_features_enable string 11.2.0.4 optimize

【云和恩墨大讲堂】从执行计划洞察ORACLE优化器的“小聪明”

作者简介黄浩  惠普 十年一剑,十年磨砺.3年通信行业,写就近3万条SQL:5年制造行业,遨游在ETL的浪潮:2年性能优化,厚积薄发自成一家 主题介绍: Oracle执行计划的另类解读:调皮的执行计划 | 诚实的执行计划 | 朴实的执行计划 说到执行计划,oracle的拥趸们自然而然会兴奋起来.在ORACLE的世界里,执行计划有着其特殊的地位,如果我们将SQL性能优化看成一个生物,那某种程度上,执行计划就是DNA.在某搜索网站中,"oracle 执行计划"关键字的搜索结果与"

Oracle优化器:星型转换(Star Query Transformation )

 Oracle优化器:星型转换(Star Query Transformation )  Star query是一个事实表(fact table)和一些维度表(dimension)的join.每个维度表都跟事实表通过主外键join,且每个维度表之间不join. 星型模式设计的好处: 1) 提供了直接.直观的业务实体与终端用户schema设计的映射. 2) 对典型的star query提供了高性能的优化. 3) 通过大量的商业智能工具的广泛支持,可能会期望甚至要求数据仓库架构包含维度表. 星型模式