a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 86|回复: 1

[综合] Oracle辅导:Oracle的硬解析和软解析

[复制链接]
发表于 2012-8-4 13:54:49 | 显示全部楼层 |阅读模式
说到软解析(soft prase)和硬解析(hard prase),就不能不说一下Oracle对sql的措置过程。当你发出一条sql语句交付Oracle,在执行和获取结不美观前,Oracle对此sql将进行几个轨范的措置过程:
+ x8 S  L( g7 k8 {6 h7 K( N" ]1 S/ ~  1、语法搜检(syntax check)
. ~& w4 \9 @( Y- v$ p  搜检此sql的拼写是否语法。
4 a6 V8 l4 A1 ^; g& @  2、语义搜检(semantic check)
, }! W9 e  b" n! M  诸如搜检sql语句中的访谒对象是否存在及该用户是否具备响应的权限。( k% ]9 n/ \7 _1 n
  3、对sql语句进行解析(prase): g4 y( b, L+ @" o( k
  操作内部算法对sql进行解析,生成解析树(parse tree)及执行打算(execution plan)。
: `0 [! ^3 a) D2 ^) z0 n  4、执行sql,返回结不美观(execute and return)
. }9 V8 j& d0 D' |6 h) X& T, ~8 b  此鱿脯软、硬解析就发生在第三个过程里。
1 g+ E: \5 E5 a" x1 I' [  Oracle操作内部的hash算法来取得该sql的hash值,然后在library cache里查找是否存在该hash值;1 S1 e$ C) P/ [/ N; Y
  假设存在,则将此sql与cache中的进行斗劲;
& t8 u& @* g9 E& C2 W" d  假设“不异”,就将操作已有的解析树与执行打算,而省略了优化器的相关工作。这也就是软解析的过程。1 [* B- x' ~+ S
  诚然,如不美观膳缦沔的2个假设中任有一个不成立,那媚暌古化器都将进行建树解析树、生成执行打算的动作。这个过程就叫硬解析。
8 f. C: t8 L; Y; M! F  建树解析树、生成执行打算对于sql的执行来说是开销昂贵的动作,所以,理当死力避免硬解析,尽量使用软解析。; V9 [6 a! I0 x
  这就是在良多项目中,倡导开发设计人员对功能不异的代码要全力连结代码的一致性,以及要在轨范中多使用绑定变量的原因。( q: Q$ c7 d* l; M* e7 {
  /****************************************************/) P, n$ @" G; W- v! G3 u2 o5 V9 D
  巨匠都在耸ё仝Sql中使用了Bind Var(绑定变量)会提高不少机能,那他到底是若何提高机能的呢?! t1 y1 W) R9 k1 W; |% w7 D
  使用了Bind Var能提高机能主若是因为这样做可以尽量避免不需要的硬剖析(Hard Parse)而节约了时刻,同时节约了年夜量的CPU资本。
' l# n5 D: L+ u& v+ E4 n; G  当一个Client提交一条Sql给Oracle后,Oracle 首先会对其进行解析(Parse),然后将解析结不美观提交给优化器(Optimiser)来进行优化而取得Oracle认为的最优的Query Plan,然后再按照这个最优的Plan来执行这个Sql语句(当然在这之中如不美观只需要软解析的话会少部门轨范)。
5 K% N) ?5 J; k' e7 c7 F  可是,当Oracle接到 Client提交的Sql后会首先在共享池(Shared Pool)琅缦沔去查找是否有之前已经解析好的与刚接到的章矣闽Sql完全不异的Sql(注重这里说的是完全不异,既要求语句上的字符级此外完全不异,又要求涉及的对象也必需完全不异)。当发现有不异的往后解析器就不再对新的Sql在此解析而直接用之前解析好的结不美观了。这里就节约体味析时刻以及解析时辰耗损的CPU资本。尤其是在OLTP中运行着的年夜量的短小Sql,效不美观就会斗劲较着了。因为一条两条Sql的时刻可能不会有若干好多感受,可是当量年夜了往后就会有斗劲较着的感受了。
% l6 Q# _+ [* }% I- n2 `  膳缦沔说到了硬解析(Hard Parse),那这个Hard Parse到底是个啥呢?/ P" j% X9 T$ h9 y
  Parse首要分为三种:
# K5 B5 J  ?% T7 F4 v0 M/ `2 o  1、Hard Parse (硬解析)
: B% P- I% y% \) |. ~( }$ K  2、Soft Parse (软解析)
% L! Q: ?' N& k# r0 I  3、Soft Soft Parse(仿佛有些资料中并没有将这个算在此鱿俯
回复

使用道具 举报

 楼主| 发表于 2012-8-4 13:54:50 | 显示全部楼层

Oracle辅导:Oracle的硬解析和软解析

  Hard Parse就是膳缦沔提到的对提交的Sql完全年夜头年夜头进行解析(当在Shared Pool中找不到时辰将会进行此操作),总共有一下5个执行轨范:
$ ^4 s; b+ R6 S7 p" r  1:语法剖析
. D# Y5 r. e4 y2 t  2:权限与对象搜检
' H8 u' c. U* s6 b8 m! ~6 D7 X  3:在共享池中搜检是否有完全不异的之前完全解析好的—如不美观存在,直接跳过4和5,运行Sql(此时算soft parse), ~. k1 ]% q, ]! X- r" A
  4:选择执行打算6 }" k2 g  G% C' g
  5:发生执行打算
+ z9 l, @% R7 F6 ]  Soft Parse就如不美观是在Shared Pool中找到了与之完全不异的Sql解析好的结不美观后会跳过Hard Parse中的后面的两个轨范。3 a  b( h4 ]$ b, R# _4 a- |) a
  Soft Soft Parse现实上是当设置了session_cursor_cache这个参数之后,Cursor被直接Cache在当前Session的PGA中的,在解析的时辰只需要对其语法剖析、权限对象剖析之后就可以转到PGA中查找了,如不美观发现完全不异的Cursor,就可以直接去取结不美观了,也就就是实现了 Soft Soft Parse.
3 I2 u( Q; r6 M$ U$ L, S/ S  不外在计较解析次数的时辰是只计较Hard Parse和Soft Parse的(其实Soft Soft Parse仿佛也并不能算是做了Parse ):Soft Parse百分比计较:Round(100*(1-:hprs/:prse),2) [hprs:硬解析次数;prse:解析次数] Parse比率计较: Round(100*(1-prse/exec) ,2) [exec:执行次数]
/ Y0 H" e2 U' U% Z: ?  /*****************************************************/
$ v8 ~) j/ p. d' J( ^+ o  quote from difference between soft parse and hard parse  
2 i* ?$ W$ g$ }1 P8 ?) y9 _  -- Thanks for the question regarding "difference between soft parse and hard parse", version 8.1.7.2
' a, i) v" m" K1 ]8 j  originally submitted on 26-Jan-2002 19:17 Eastern US time, last updated 5-Aug-2004 13:07
/ ^4 C8 A3 R$ c7 {# U: e  Hi Tom0 Z" l; F2 _6 D
  Can you explain briefly the difference between soft and hard parse?* R6 x1 l8 \1 C' \9 F3 Q
  你能不能给我具体介绍一下软解析与硬解析的区别啊?- w' @5 F- y7 w7 i! \% I: N
   and we said……% U% }5 a9 M) s$ V
  Here is a long winded answer, it is extracted in part from a new book oming out soon "beginning Oracle programming" that I collaborated on:这是一个很长的诠释,是年夜我与几个同事一路合著的新书中提掏出来的。
+ f) C' v& j( z5 Q- P! a! w  Parsing解析
! T; v6 M0 a3 O6 R  This is the first step in the processing of any statement in Oracle. Parsing is the act of breaking the submitted statement down into its component parts ? determining what type of statement it is (query, DML, DDL) and performing various checks on it.这是Oracle措置所有语句的第一步,解析就是将用户提交的语句(按照必然的轨则)分成分歧的组件,来确定章条语句是什么类型的语句(query,发芽,DML,数据独霸说话,DDL仍是数据界说说话),以对这条语句执行各类分歧的语法检测。5 S- o8 _$ t/ d# p+ E1 j6 C
  The parsing process performs two main functions:解析过程首要有一下两个功能。) n& L4 \) r. e1 g5 L
  Syntax Check: is the statement a valid one? Does it make sense given the SQL grammar documented in the SQL Reference Manual. Does it follow all of the rules for SQL. 1. 语法搜检,这条语句是否合理? 它是否合适SQL语法文档的相关语法,是不是合适SQL语句的所有轨则。
& ^" K/ m) W) y  o Semantic Analysis: Going beyond the syntax ? is the statement valid in light of the objects in the database (do the tables and columns referenced exist)。 Do you have access to the objects ? are the proper privileges in place? Are there ambiguities in the statement ? for example if there are two tables T1 and T2 and both have a column X, the query ?select X from T1, T2 where ?? is ambiguous, we don?t know which table to get X from. And so on. 2.语义剖析: 已经措置完语法搜检了吗? 这条语句是否正确的引用了数据库中对象(是否语句中所有的表和字段都存在)。 是否有访谒这些对象的权限? 是不是对应的权限都有用(首要指role对应的权限吧,)? 好比是否有如下的两个表T1,T2,而这两个表有不异的字段名column X,而发芽语句 ? select X from T1,T2 where ??,(没有明晰指定列名),我们无法知道年夜哪个表去掏出字段X的值,以及近似的一系列问题。
6 r/ T$ z- B3 k% P: Z  So, you can think of parsing as basically a two step process, that of a syntax check to check the validity of the statement and that of a semantic check ? to ensure the statement can execute properly. The difference between the two types of checks are hard for you to see ? Oracle does not come back and say ?it failed the syntax check?, rather it returns the statement with a error code and message. So for example, this statement fails with a syntax error:是以,你可以认为解析根基上是由这两个轨范组成的: 搜检语句有用性的语法搜检和确保语句能够正常运行的语义搜检。这两种搜检的区别就是你所要说的硬解析了。Oracle不会出格的指出这条语句没有经由过程语法搜检,它给你返回这条语句对应的错误代码和错误信息。 好比: 下面这条语句没有经由过程语法搜检。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-18 23:06 , Processed in 0.295115 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表