a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 84|回复: 1

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

[复制链接]
发表于 2012-8-4 13:54:49 | 显示全部楼层 |阅读模式
说到软解析(soft prase)和硬解析(hard prase),就不能不说一下Oracle对sql的措置过程。当你发出一条sql语句交付Oracle,在执行和获取结不美观前,Oracle对此sql将进行几个轨范的措置过程:: `; f. x4 l' _% ~0 X! J# L
  1、语法搜检(syntax check)
: c/ N1 E0 L: `( V! t6 ^3 H  搜检此sql的拼写是否语法。
. `4 K; t- ^  k0 ~  2、语义搜检(semantic check)
7 W5 O9 p  E5 J% m( D; p  诸如搜检sql语句中的访谒对象是否存在及该用户是否具备响应的权限。" V3 S7 j% z/ W2 Y; @7 g- a
  3、对sql语句进行解析(prase)
. `5 D! h- `! h- [; I" }' ~  操作内部算法对sql进行解析,生成解析树(parse tree)及执行打算(execution plan)。4 G* C" ^! O# q! \! N
  4、执行sql,返回结不美观(execute and return)) i* h! F4 Z- s; o6 g
  此鱿脯软、硬解析就发生在第三个过程里。3 N. [( I. J1 `
  Oracle操作内部的hash算法来取得该sql的hash值,然后在library cache里查找是否存在该hash值;! o4 r' X; @6 Q3 R9 E8 }( e
  假设存在,则将此sql与cache中的进行斗劲;" }5 b) a1 O* g3 {% Z3 g
  假设“不异”,就将操作已有的解析树与执行打算,而省略了优化器的相关工作。这也就是软解析的过程。7 s3 V. a3 B% O# b0 C7 Y
  诚然,如不美观膳缦沔的2个假设中任有一个不成立,那媚暌古化器都将进行建树解析树、生成执行打算的动作。这个过程就叫硬解析。2 H& k$ T4 u; H* n6 ?. M
  建树解析树、生成执行打算对于sql的执行来说是开销昂贵的动作,所以,理当死力避免硬解析,尽量使用软解析。+ O' }+ c) x' R& H
  这就是在良多项目中,倡导开发设计人员对功能不异的代码要全力连结代码的一致性,以及要在轨范中多使用绑定变量的原因。
/ Z% N. {/ u: _2 k  /****************************************************/$ C7 l5 ^. Z2 O/ D0 T) [( A
  巨匠都在耸ё仝Sql中使用了Bind Var(绑定变量)会提高不少机能,那他到底是若何提高机能的呢?( g- l. L  P4 v
  使用了Bind Var能提高机能主若是因为这样做可以尽量避免不需要的硬剖析(Hard Parse)而节约了时刻,同时节约了年夜量的CPU资本。& m+ K6 {4 |- {
  当一个Client提交一条Sql给Oracle后,Oracle 首先会对其进行解析(Parse),然后将解析结不美观提交给优化器(Optimiser)来进行优化而取得Oracle认为的最优的Query Plan,然后再按照这个最优的Plan来执行这个Sql语句(当然在这之中如不美观只需要软解析的话会少部门轨范)。
" y2 c9 F+ b4 z- P, B  可是,当Oracle接到 Client提交的Sql后会首先在共享池(Shared Pool)琅缦沔去查找是否有之前已经解析好的与刚接到的章矣闽Sql完全不异的Sql(注重这里说的是完全不异,既要求语句上的字符级此外完全不异,又要求涉及的对象也必需完全不异)。当发现有不异的往后解析器就不再对新的Sql在此解析而直接用之前解析好的结不美观了。这里就节约体味析时刻以及解析时辰耗损的CPU资本。尤其是在OLTP中运行着的年夜量的短小Sql,效不美观就会斗劲较着了。因为一条两条Sql的时刻可能不会有若干好多感受,可是当量年夜了往后就会有斗劲较着的感受了。7 i# _9 w1 [& A0 P
  膳缦沔说到了硬解析(Hard Parse),那这个Hard Parse到底是个啥呢?
* n8 {% Y) ~" c( C5 U  Parse首要分为三种:! r  X1 y; B  k. {+ U7 V; e  @
  1、Hard Parse (硬解析)2 _; W: \( q3 E6 l# Q. E, x
  2、Soft Parse (软解析)
& ^$ L1 Z% ~/ J' c# T  3、Soft Soft Parse(仿佛有些资料中并没有将这个算在此鱿俯
回复

使用道具 举报

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

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

  Hard Parse就是膳缦沔提到的对提交的Sql完全年夜头年夜头进行解析(当在Shared Pool中找不到时辰将会进行此操作),总共有一下5个执行轨范:
* E  ?+ X* O, `9 I  1:语法剖析
; z% C8 v6 I# B3 |7 o* T  2:权限与对象搜检" k$ S8 M4 L  x  A8 w( I+ R
  3:在共享池中搜检是否有完全不异的之前完全解析好的—如不美观存在,直接跳过4和5,运行Sql(此时算soft parse)* `* k, _$ i' @1 `
  4:选择执行打算  T# W9 _9 h) |! M( B1 }1 s
  5:发生执行打算0 b# m! D7 B7 u3 D' F' d
  Soft Parse就如不美观是在Shared Pool中找到了与之完全不异的Sql解析好的结不美观后会跳过Hard Parse中的后面的两个轨范。
; {! K" K8 |) `9 }  Soft Soft Parse现实上是当设置了session_cursor_cache这个参数之后,Cursor被直接Cache在当前Session的PGA中的,在解析的时辰只需要对其语法剖析、权限对象剖析之后就可以转到PGA中查找了,如不美观发现完全不异的Cursor,就可以直接去取结不美观了,也就就是实现了 Soft Soft Parse.: @' ?2 A' I' A; A3 @, ^
  不外在计较解析次数的时辰是只计较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:执行次数]+ X* P1 M# b9 ?! T- T
  /*****************************************************/& n& }  F' i. M. t) U3 ^
  quote from difference between soft parse and hard parse  - T0 I. t7 ^5 M& g
  -- Thanks for the question regarding "difference between soft parse and hard parse", version 8.1.7.24 G- O: X! V, T& Q) J
  originally submitted on 26-Jan-2002 19:17 Eastern US time, last updated 5-Aug-2004 13:07- h7 E, }7 H  E4 N1 k
  Hi Tom$ f0 }' f' \- i
  Can you explain briefly the difference between soft and hard parse?' n! U& f/ |, o4 m& l# A0 ?2 k) B8 A
  你能不能给我具体介绍一下软解析与硬解析的区别啊?. [- j5 `& v! V; `  s, _! `# k
   and we said……" V2 R% Y$ C" o* a) l0 p
  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:这是一个很长的诠释,是年夜我与几个同事一路合著的新书中提掏出来的。
9 b: |4 R" W3 m$ l& M3 B. c( O, ~  Parsing解析6 a- s+ o$ \$ j: Z2 U$ E* z
  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仍是数据界说说话),以对这条语句执行各类分歧的语法检测。2 e$ W1 V; r9 ?* N) ^$ ?
  The parsing process performs two main functions:解析过程首要有一下两个功能。
# t0 K8 e7 U* R$ [' e  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语句的所有轨则。/ j% A: v+ w2 O( Z
  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的值,以及近似的一系列问题。3 w9 p3 t- j; @( x6 B- V; L$ W
  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-5-16 02:39 , Processed in 0.215859 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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