【转】Oracle SQL的硬解析和软解析

说到软解析(soft prase )和硬解析( hard prase ),就不能不说一下 Oracle sql 的处理过程。当你发出一条 sql 语句交付 Oracle ,在执行和获取结果前, Oracle 对此 sql 将进行几个步骤的处理过程:

    1、语法检查( syntax check

    检查此sql 的拼写是否语法。

    2、语义检查( semantic check

    诸如检查sql 语句中的访问对象是否存在及该用户是否具备相应的权限。

    3、对 sql 语句进行解析( prase

    利用内部算法对sql 进行解析,生成解析树( parse tree )及执行计划( execution plan )。

    4、执行 sql ,返回结果( execute and return

    其中,软、硬解析就发生在第三个过程里。

    Oracle利用内部的 hash 算法来取得该 sql hash 值,然后在 library cache 里查找是否存在该 hash 值;

    假设存在,则将此sql cache 中的进行比较;

    假设 相同 ,就将利用已有的解析树与执行计划,而省略了优化器的相关工作。这也就是软解析的过程。

    诚然,如果上面的2 个假设中任有一个不成立,那么优化器都将进行创建解析树、生成执行计划的动作。这个过程就叫硬解析。

    创建解析树、生成执行计划对于sql 的执行来说是开销昂贵的动作,所以,应当极力避免硬解析,尽量使用软解析。

这就是在很多项目中,倡导开发设计人员对功能相同的代码要努力保持代码的一致性,以及要在程序中多使用绑定变量的原因。

 

 

    /****************************************************/

    大家都在说在Sql 中使用了 Bind Var (绑定变量)会提高不少性能,那他到底是如何提高性能的呢?

    使用了Bind Var 能提高性能主要是因为这样做可以尽量避免不必要的硬分析( Hard Parse )而节约了时间,同时节约了大量的 CPU 资源。

    当一个Client 提交一条 Sql Oracle 后, Oracle  首先会对其进行解析( Parse ),然后将解析结果提交给优化器( Optimiser )来进行优化而取得 Oracle 认为的最优的 Query Plan ,然后再按照这个最优的 Plan 来执行这个 Sql 语句(当然在这之中如果只需要软解析的话会少部分步骤)。

    但是,当Oracle 接到  Client 提交的 Sql 后会首先在共享池( Shared Pool )里面去查找是否有之前已经解析好的与刚接到的这一个 Sql 完全相同的 Sql (注意这里说的是完全相同,既要求语句上的字符级别的完全相同,又要求涉及的对象也必须完全相同)。当发现有相同的以后解析器就不再对新的 Sql 在此解析而直接用之前解析好的结果了。这里就节约了解析时间以及解析时候消耗的 CPU 资源。尤其是在 OLTP 中运行着的大量的短小 Sql ,效果就会比较明显了。因为一条两条 Sql 的时间可能不会有多少感觉,但是当量大了以后就会有比较明显的感觉了。

    上面说到了硬解析(Hard Parse ),那这个 Hard Parse 到底是个啥呢?

    Parse主要分为三种:

    1 Hard Parse  (硬解析)

    2 Soft Parse  (软解析)

    3 Soft Soft Parse (好像有些资料中并没有将这个算在其中)

    Hard Parse就是上面提到的对提交的 Sql 完全重新从头进行解析(当在 Shared Pool 中找不到时候将会进行此操作),总共有一下 5 个执行步骤:

    1:语法分析

    2:权限与对象检查

    3:在共享池中检查是否有完全相同的之前完全解析好的 如果存在,直接跳过 4 5 ,运行 Sql (此时算 soft parse

    4:选择执行计划

    5:产生执行计划

    Soft Parse就如果是在 Shared Pool 中找到了与之完全相同的 Sql 解析好的结果后会跳过 Hard Parse 中的后面的两个步骤。

    Soft Soft Parse实际上是当设置了 session_cursor_cache 这个参数之后, Cursor 被直接 Cache 在当前 Session PGA 中的,在解析的时候只需要对其语法分析、权限对象分析之后就可以转到 PGA 中查找了,如果发现完全相同的 Cursor ,就可以直接去取结果了,也就就是实现了  Soft Soft Parse.

本文转自:http://blog.csdn.net/tianlesoftware/archive/2009/10/29/4743971.aspx

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值