关于硬解析和软解析



游标解析过程
(1)包含VPD约束条件--如果使用了虚拟私有数据库,并且被解析的SQL语句中引用的某张表激活了它的话,安全策略生成的约束条件就会被添加到WHERE语句中。
(2)语法语义以及访问权限检查
(3)保存父游标--不存在共享的父游标,将在库缓存中分配一些内存,将父游标保存进去
(4)逻辑优化--通过优化手段生成等价意义的SQL语句,同时可选择的执行计划数量与搜索空间都会增长
(5)物理优化--回城生与每个逻辑优化产生的SQL语句相关的执行计划,同时根据统计信息,计算执行计划所用的开销并选择最优的执行计划
(6)保存子游标--分配内存,将共享子游标存储进去,最后将子游标和父游标进行关联




当只执行前两个步骤时,成为软解析,否则为硬解析,其中关键的第五步非常耗资源:第一个原因是逻辑优化和物理优化非常依赖CPU的操作;第二个原因是需要分配
父游标和子游标到库缓存中,由于库缓存是所有会话共享的,因此库缓存的内存分配必须串行执行。
在实际操作中,为了分配父游标和子游标,需要取得共享池的锁。


例:
SELECT * FROM t WHERE n=1234;
select * from t where n=1234;
SELECT  * FROM t WHERE n=1234;
这三条语句不会共享父游标,因为大小写和空格不一致的关系。


例:
ALTER SESSION SET optimizer_mode=all rows;
select * from t;


ALTER SESSION SET optimizer_mode=first_rows_10;
select * from t;


这两条语句的子游标也不会被共享,因为执行环境发生了变化。值得注意的时,它们仍然使用同一个执行计划。

所以与父游标相关的SQL文本,与子游标相关的时执行计划和执行环境。而硬解析通常是由不可共享的父游标导致,而在不使用绑定变量以及动态SQL语句时硬解析就无法避免。



参考资料:ORACLE性能诊断艺术

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值