Oracle11高性能开发--(4)CBO和解释计划

本文深入解析Oracle数据库中的两种优化器:基于规则的优化器(RBO)与基于代价的优化器(CBO)。介绍两者的工作原理及Oracle版本演进中地位的变化,并详细阐述了CBO系统性能统计与数据统计的方法,包括统计信息的收集与查询。此外,还提供了查询解释计划的方式及其字段说明。

CBO

RBO

Rule-Based Optimization 基于规则的优化器,
根据数据库结构(表结构、索引等进行自动优化)。
Oracle10起弃用。

CBO

Cost-Based Optimization 基于代价的优化器,
根据数据库统计信息(系统性能信息、数据信息)进行代价估算,自动选择优化方案。
Oracle8引入,Oracle10替代RBO。

CBO系统性能统计
  • 无负载时统计负载下系统性能
dbms_stats.gather_system_stats(gathering_mode => 'noworkload');
  • 统计1小时的负载下系统性能
dbms_stats.gather_system_stats(gathering_mode => 'interval',interval => 60);
  • 查询统计结果
select * from sys.aux_stats$
CBO数据统计
  • 设置开启分区表增量优化
dbms_stats.set_table_prefs('ROOT','C_DETAIL','INCREMENTAL','TRUE');
  • 统计用户下所有表、分区(不含子分区)、索引
dbms_stats.gather_schema_stats(ownname => 'ROOT',cascade => true);
  • 统计表数据信息
dbms_stats.gather_table_stats(ownname => 'ROOT',tabname => 'C_DETAIL',method_opt=> 'for all indexed columns');
  • 查询Oracle自动收集任务
select * from dba_autotask_task t where t.CLIENT_NAME='auto optimizer stats collection'
  • 查询表统计信息
select * from user_tab_statistics a where a.TABLE_NAME = 'C_MATSER'
  • 查询表字段统计信息
select * from user_tab_col_statistics a where a.TABLE_NAME = 'C_DETAIL'
  • 查询表字段直方图
select * from user_tab_histograms a where a.TABLE_NAME = 'C_DETAIL'
  • 查询索引统计信息
select * from user_ind_statistics a where a.TABLE_NAME = 'C_DETAIL'

解释计划

  • 含义:Oracle准备如何执行语句的说明
  • 使用方式
    • 开发工具如PL/SQL Developer的F5功能
    • 使用SQL查询
    • 首先Explan plan for SQL;
    • 然后查询解释计划select * from table(dbms_xplan.display);
  • 解释计划字段说明
字段说明
DESCRIPTION操作描述
OPERATION当前步骤的操作,值包括DELETE STATEMENT,INSERT STATEMENT,SELECT STATEMENT,UPDATE STATEMENT
OPTIONS处理方式
OBJECT_OWNER表或索引的用户名
OBJECT_NAME表或索引的名称
OPTIMIZER使用的优化器
ID执行计划的步骤编号.
PARENT_ID父步骤编号
DEPTH解释计划步骤的深度
TIME预期本步骤执行的时间
COST成本,由CPU_COST和IO_COST计算得出,无单位,可作为优化的参考值。
CPU_COSTCPU 成本.
IO_COSTI/O成本.值与操作访问的数据块数量成正比.
CARDINALITY本操作的访问数据行大小
BYTES本操作的访问数据字节大小
PARTITION_START查询的开始分区:N表明开始查找的分区编号.KEY 表面开始分区在运行时确定.
PARTITION_STOP结束分区编号:N表明结束查找的分区编号.KEY 表明结束分区在运行时确定.
ACCESS_PREDICATES访问谓词
FILTER_PREDICATES过滤数据行的谓词.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值