ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 《oracle性能诊断艺术》学习笔记1(第2章)

《oracle性能诊断艺术》学习笔记1(第2章)

原创 Linux操作系统 作者:qinhaichun 时间:2010-07-20 22:42:39 0 删除 编辑
2.3 解析(游标或者SQL)的过程包含6个步骤。
1)包含VPD的约束条件,如果系统中使用了虚拟私有数据库(VPD,以前也成为行级安全控制,row-level security),并且被解析的SQL语句中引用的某张表激活了它的话,安全策略生成的约束条件就会被添加到where子句中。(安全策略的知识需要复 习,已经忘光了)。
2)语法、语义以及访问权限检查。
3)将父游标保存到缓存。
4)逻辑优化。
5)物理优化。
6)将自由表保存到库缓存。

软解析指包含步骤1和步骤2,硬解析则包含所有的步骤。

2.3.1 共享游标
共享游标包含父游标和子游标。
共享父游标的条件有2个:
1)SQL 语句的文本完全一致。
2)执行环境相同。包括优化参数optimizer_mode,绑定变量定义的类型和大小(大小所在的区间范围)。

2.3.2  绑定变量

2.3.2.1 优点
共享游标,减少硬解析
绑定变量分级,前面说到执行环境的变化比如绑定变量定义的类型大小不同会导致,生成不同的游标,为了使游标的数量不至于太多,产生了这个功能。此功能将变量的长度分为4个级别,0-32字节,33-128字节,129-2000字节,>2000字节,这四个等级。不用说,同一个绑定变量的变化,最多能生成4个游标。

2.3.2.2 缺点
啊?原来绑定变量也有缺点。缺点就是,相对于字面量而言,会减弱查询优化器的功能。

比如:
select count(*) from t where id > 10;
select count(*) from t where id > 99999;
根据id值10,99999和表的统计信息,查询优化器可能会选择全表扫描或者索引扫描。

使用了绑定变量,优化器会忽略他们的具体值,从而生成相同的执行计划。为了解决这个问题,oracle9i引入了绑定变量窥测(bind variable peeking)的功能。

绑定变量窥测的优点,就是窥测绑定变量的值,把它们当做字面量来使用。这样的好处,就是能获得最优查询路径,比如是选择全表扫描还是索引扫描。

绑定变量窥测的缺点,哎,凡事都有缺点啊,还是马克思够聪明啊,人家早就说了,世界是矛盾的,矛盾是对立统一的嘛。绑定变量窥测的缺点就是,生成的执行计划,依赖第一次生成执行计划时所提供的值。举例来说,就是如果第一次是全表扫描,以后永远都是全表扫描了。

那么如何避免这个缺点呢?再掏点银子出来,升级到oracle11g就行了。oracle11g引用一个新功能,扩展的游标共享。这个功能就是,根据绑定变量的值,可以为相同的sql语句,生成不同子游标,及不同的执行计划。汗,这个功能原来是oracle11g才有的,我以前想当然的以为,自oracle引入了cbo之后就有了呢。


绑定变量的结论

1 什么时候使用绑定变量?
1)sql语句处理少量数据,比如OLTP系统。
2)sql语句处理大量数据。

2 什么时候不使用绑定变量?
批量任务处理,报表生成,运用OLAP工具的数据仓库。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9741215/viewspace-668547/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-07-20

  • 博文量
    1
  • 访问量
    1615