ORACLE 提供了基于成本(CostBased)和基于规则(RuleBased)两种优化器,简称为CBO和RBO,用于确定查询操作的执行计划。
如何使用CBO,那么首先要理解这些概念 1、CBO的成本计算的依据 (1)统计信息:与SQL语句所引用的对象相关以及主机的CPU和IO (2)SQL语句本身 (3).环境:例如与优化器相关的参数设置
(1)ALL_ROWS (2)FIRST_ROWS_N
3、选择率和基数
4、聚簇因子
(1)视图合并(view merge) (2)谓词推进(Predicate Pushing) (3)子查询非嵌套化(Subquery Unnesting) (4)OR条件展开
6、绑定变量与直方图
7、收集统计信息
CostBased优化器本身也是个智能软件,肯定有陷缺,RBO(Rule-Based Optimizer)可以在某种程度上弥补CBO在性能上的缺陷。
1、有可能是以下原因 (1)统计信息不正确,这是关键所在
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
例如一个复杂的sql有几十张表相连,CBO就不一定能正确连接表的顺序了,这时需要用Hint固定顺序。。。
(1)修改sql本身,如用Hints提示等
(2)稳固计划
(3)使用sql概要(sqlprofile)
(4)改变统计信息
(5)设置优化器模式相关的参数
(6)使用基线(baseline)
**********本博客所有内容均为原创,如有转载请注明作者和出处!!!********** QQ: 252803295 Email: oracledba_cn@hotmail.com Blog: http://blog.csdn.net/guoyJoe ITPUB: http://www.itpub.net/space-uid-28460966.html OCM: http://education.oracle.com/education/otn/YGuo.HTM 答案在:http://blog.csdn.net/guoyjoe/article/details/8624392 Oracle@Paradise 总群:127149411 Oracle@Paradise No.1群:177089463(已满) Oracle@Paradise No.2群:121341761 Oracle@Paradise No.3群:140856036 |
优化器CBO知识点
最新推荐文章于 2024-04-23 02:27:27 发布