- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
软解析、硬解析、软软解析区别
先来张大图:结合上图来说明一下解析的各个步骤涉及的锁。?软解析、硬解析、软软解析区别的简单说明:为了将用户写的sql文本转化为oracle认识的且可执行的语句,这个过程就叫做解析过程。解析分为硬解析和软解析,SQL语句第一次解析时必须进行硬解析一句话说明硬解析与软解析的区别是:硬解析=?需要生成执行计划 软解析=不需要生成执行计划在Oracle中存在两种类型的SQL语句,一类为DDL语句,不共享使用,也就是每次执行都需要进行硬解析。还有一类就是DML语句,会进行硬解析或软解析。硬解析变成软解析:?绑定变量软解析变成软软解析:?设置session_cached_cursors,详见?图中涉及的各结构简单介绍:涉及的各结构的简单介绍: 详见:父游标:保存HASH值,SQL文本--相同SQL语句,就只有一个父游标父游标里主要包含两种信息:sql文本以及优化目标。父游标在第一次打开时被锁定,直到其他所有的session都关闭该游标后才被解锁。当父游标被锁定的时候是不能被交换出librarycache的,只有在解锁以后才能被交换出library cache。父游标被交换出内存时父游标对应的所有子游标也被交换出library cache。子游标:一个父游标下会有多个子游标,各个子游标的执行计划不一样--多版本.一个父下必有一个子游标,可以有多个子游标。子游标包括游标所有的信息,比如具体的执行计划、绑定变量等。子游标随时可以被交换处library cache,当子游标被交换出library cache时,oracle可以利用父游标的信息重新构建出一个子游标出来,这个过程叫做reload(重载)。父HANDLE,里面有父游标堆0的地址。。父游标堆0:有指向一个或多个子游标的HANDLE够句柄地址子游标的HANDLE:有子游标堆0地址子游标堆0:有SQL语句依赖关系,并指向子游标的堆6子游标堆6:存有SQL语句的执行计划SQL?语句在Library cache?执行的第一次检查过程:1.通过语法语义权限等检查的SQL语句进入Library cache?2.将SQL文本转化为ASCII值(大小写ASCII不同)并进行hash函数的运算?4.得到一个HASH值对应到hash bucket的号码?################?以上检查通过后,进入以下解析过程软软解析:--通过设置session_cached_cursors参数实现-?SQL执行=3次(可以不是一个会话执行的SQL),堆6的DS-堆描述符地址被放入UGA(属于PGA)--LOCK变为1-?NULL?标记语句为缓存并保证内存不被释放(堆6释放堆0才能释放)。?也就是SQL执行3次,被缓存。第四次,就是软软解析了。?--优化目标:命中率90%以上。?会话发起SQL,会首先在User Global Area中查找CURSOR信息。?此时,在父游标handle,子游标handle和子游标堆6上使用NULL 1。?软解析:1.获得library cacheLatch?? ---如未获得将产生:Latch:library cache?2.获得library cache lock,检索bucket上的父游标handle,得到所指向的父游标堆0-LCO的内存地址。?3.获得library cache pin,读取父游标堆0-LCO,得到子游标handle地址。?4.获得library cache lock,检索子游标handle,得到所指向的子游标堆0-子LCO的内存地址。?5.获得library cache pin,读取子游标堆0-子LCO从而得到子游标堆6地址。?6.读取子游标堆6,得到SQL执行计划。?###找到child lco后,增加parsecount(total)统计值。?SQL开始执行:此时以共享模式获得library cache lock和library cache pin,并执行SQL。?FETCH阶段:执行完成进入FETCH阶段,SQLCURSOR将library cache lock转换为null模式,释放library cache pin。?###############################################################?在尝试软解析时:?--如果未检索到相同的父游标LCO或子游标LCO时,发生硬解析。?--如果子游标堆6上不能加共享library cachepin或者child lco中信息不完整,需要重建执行计划--记录为硬解析。硬解析:如果未检索到相同的父游标LCO或子游标LCO时,发生硬解析。进程会一直持有library cache latch,直到硬解析结束为止。?1.获取shared pool latch,从fre
文档评论(0)