读书笔记-《基于Oracle的SQL优化》-第一章-2

原创 2013年12月01日 23:02:47
CBO优化器的基本概念:
可传递性:
1、简单谓词传递
t1.c1=t2.c1 and t1.c1=10,Oracle会自动将t2.c1=10的条件添加。

2、连接谓词传递
t1.c1=t2.c1 and t2.c1=t3.c1,Oracle会自动将t1.c1=t3.c1的条件添加。

3、外连接谓词传递
t1.c1=t2.c1(+) and t1.c1=10,Oracle会自动将t2.c1(+)=10的条件添加。


CBO的局限性:
1、CBO会默认目标SQL语句where条件中出现的各个列之间是独立的,没有关联关系。

2、CBO会假设所有的目标SQL都是单独执行的,并且互不干扰。
不考虑SQL执行已经缓存到Buffer Cache,下次执行不需要访问物理IO到磁盘读索引叶子块、数据块等,高估用索引的成本。

3、CBO对直方图统计信息有诸多限制。
      Oracle 12c之前,Frequency类型的直方图对应的Bucket数量不能超过254,如果目标列的distinct值的数量超过254,Oracle就会使用Height Balanced类型的直方图。对于Height Balanced类型的直方图,因为Oracle不会记录所有的nopopular value的值,所以CBO选错执行计划的概率会比Frequency类型的情形高。
      如果针对文本类型的字段收集直方图统计信息,则Oracle只会将该文本类型字段的文本值头32个字节取出来(实际只取头15个字节),并将其转换成一个浮点数,然后将这个浮点数作为上述文本型字段的直方图统计信息存储于数据字典中。对于那些超过32个字节的文本型字段,只要对应记录的文本值的头32个字节相同,Oracle收集直方图统计信息时,就会认为这些记录文本值相同,但实际是不同的。进而选择错误的执行计划。

4、CBO在解析多表关联的目标SQL时,可能会漏选正确的执行计划。
SQL各表之间可能的连接顺序总数是n!,10个表连接三百多万,15个表连接一百多亿。
CBO至多只会考虑其中根据_OPTIMIZER_MAX_PERMUTATIONS计算出来的有限种可能。
只要目标SQL正确的执行计划不在上述有限可能之中,则CBO一定会漏选正确的执行计划。
SELECT i.ksppinm name, CV.ksppstvl VALUE, CV.ksppstdf isdefault, 
DECODE (BITAND (CV.ksppstvf, 7), 1, 'MODIFIED', 4, 'SYSTEM_MOD', 'FALSE') ismodified,
DECODE (BITAND (CV.ksppstvf, 2), 2, 'TRUE', 'FALSE') isadjusted FROM sys.x$ksppi i, sys.x$ksppcv CV
WHERE i.inst_id = USERENV ('Instance') AND CV.inst_id = USERENV ('Instance') AND i.indx = CV.indx
AND i.ksppinm LIKE '%_optimizer_max_%'
AND i.ksppinm LIKE '/_%' ESCAPE '/'  ORDER BY   REPLACE (i.ksppinm, '_', '');

NAME
---------------                                                           
_optimizer_max_permutations                 
                                                
DESCRIPTION
---------------
optimizer maximum join permutations per query block

VALUE         ISDEFAULT ISMODIFIED ISADJ
--------------- ---------      ----------        -----
2000            TRUE         FALSE           FALSE
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

db2中获取某个表/索引占用空间的大小

db2中获取某个表/索引占用空间的大小    在数据库运维中,经常会遇到需要统计db2表大小的问题。在db2中提供了3种方法已供我们选择。分别为db2pd -tcbstats、admin_get_ta...
  • t0nsha
  • t0nsha
  • 2016年01月24日 12:34
  • 3984

ORACLE中RECORD、VARRAY、TABLE的使用详解

ORACLE中RECORD、VARRAY、TABLE的使用详解

读书笔记-《基于Oracle的SQL优化》-第一章-1

开始学习崔老师的《基于Oracle的SQL优化》,七百多页,虽然可能会比较痛苦,但想必是一个痛并快乐的过程,尽情享受了。。。 第一章:Oracle里的优化器 优化器是Oracle数...
  • bisal
  • bisal
  • 2013年11月23日 15:44
  • 2333

精通Oracle SQL(第二版)读书笔记 - 第一章 SQL核心

精通Oracle SQL(第二版)读书笔记第一章 SQL核心数据库接口 1.数据库接口: Oracle数据库的本地接口界面是OCI,OCI 将由 Oracle内核传递而来的查询语句发送到数据...

《基于ORACLE SQL优化》读书笔记

注:为读《基于ORACLE SQL优化笔记》 对比RBO 与CBO 在数据选择性不佳的情况下,对执行路径的选择。 select * from emp where mgr = 7902; 1.  ...

《基于ORACLE SQL优化》读书笔记-可传递性

注:为读《基于ORACLESQL优化笔记》      可传递性, 除了原书的例子,感觉跟SQL 重写是一个意思吧。ORACLE对EXIST 与IN 的转换,嵌套查询与子查询的转换,还有视图里的谓词...

《基于ORACLE SQL优化》读书笔记-使用SPM稳定执行计划

SQL PROFILE:相对被动 SPM:主动,保证只有被验证过的执行计划才会被启用。只有DBA_SQL_PLAN_BASELINES中ENABLED和ACCEPTED值均为YES的SQLPLAN ...

《基于ORACLE SQL优化》读书笔记-游标

show parameter open_cursors; --单个session可并存sessioncursor数   select count(*) from v$open_cursor whe...

Oracle性能优化读书笔记(1)-SQL执行计划分析工具

学习主要的SQL执行计划分析工具,参考罗敏的品味Oracle性能优化
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:读书笔记-《基于Oracle的SQL优化》-第一章-2
举报原因:
原因补充:

(最多只允许输入30个字)