• [ORACLE] SQL执行过程 软解析(soft prase)硬解析(hard prase)以及 软软解析(Soft Soft Parse)


    软解析(soft prase)和硬解析(hard prase)以及 Soft Soft Parse

    每个sql会产生两个share cursor   父游标(parent  cursor)和子游标(child cursor) ,缓存在库缓存区的对象都是以一种叫库缓存对象句柄(library cache object handle)的结构存存储在库缓存中,oracle就是通过访问相关的库缓存对象句柄来访问对应的库缓存对象的,上面的每一个红圈里的方块就是一个库缓存对象句柄
    名词 解释:
      hash buckets :    整个库缓存可以看作是由一组hash bucket 所组成,每一个hash bucket对应一个不同的hash值。对于单个的hash bucket ,他里面存储的就是哈希值相同的所有库缓存对象句柄。
       parent  cursor :  存储的是sql的文本,
       child cursor :      存储的是 可以被重用的解析树和执行计划。
     
    软解析:   根据这条sql文本计算出相应的hash 值,并且根据hash值去找对应的hash bucket ,   然后在匹配到的hash bucket 中去查找匹配的parent cursor ,然后再遍历属于这个parent cursor的所有child cursor ,找到匹配的child cursor ,如果能顺利的找到,这就可以直接调用解析树和执行计划
     
    硬解析:  如果没有找到匹配的父游标,或者找到了父游标,没有找到对应的子游标,那么oracle就会重新开始解析该目标sql, 并且就会在后面重新生成一个新的父游标和子游标或者是只生成子游标(找到了父游标)
     
    同一个sql对应的hash值是一样的,并且同一个sql也可能对应多个不同的解析树和执行计划。正是因为这样可以减少hash bucket 中的库缓存对象句柄链表的长度,并且不同的sql对应的hash 值也可能相同,这样就可以公用一个hash bucket ,减少了hash bucket 的数量,正式由于这个原因才设计成了父游标和子游标并存的结构
     
    session cursor:  用于在当前session中的解析和执行sql,与session是一一对应的,不同的session是不能共享的,有生命周期,使用过程中肯定至少经历 open ,parse ,bind,execute,fetch 的一个或多个阶段。并且用过的session cursor 不一定缓存在对应的session pga中,oracle 依据session cursor 来将目标sql所涉及到的数据从buffer cache 中读到PGA,然后再排序,表连接等。
     
    Soft Soft Parse:   oracle 在解析和执行目标sql时,会首先在当前session中的PGA中查看是否缓存有匹配的session cursor ,如果有直接用,这样就是软软解析,和软解析相比,省掉了open一个新的session cursor所需的时间和资源,同时也省掉了close一个现有的session cursor所需的时间和资源.
    soft soft parse 的前提:  session_cached_cursors >0

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

     

     

  • 相关阅读:
    Codeforces 934 B.A Prosperous Lot
    Codeforces 934 A.Compatible Pair
    UVA 12898
    Codeforces Round #376 (Div. 2) C. Socks bfs
    Codeforces Round #377 (Div. 2) C. Sanatorium 水题
    Codeforces Round #377 (Div. 2) D. Exams 二分
    Codeforces Beta Round #91 (Div. 1 Only) E. Lucky Array 分块
    hdu 5154 Harry and Magical Computer 拓扑排序
    Codeforces Round #272 (Div. 2) C. Dreamoon and Sums 数学
    Codeforces Round #288 (Div. 2) C. Anya and Ghosts 模拟
  • 原文地址:https://www.cnblogs.com/tingxin/p/12780409.html
Copyright © 2020-2023  润新知