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 |
转载于:https://blog.51cto.com/guoyjoe/1429051