• 转:Oracle中SQL语句执行过程中


    OracleSQL语句执行过程中,Oracle内部解析原理如下:

    1、当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法、表名、字段名等相关信息(如下图),这过程会花比较长的时间,因为它要分析语句的语法与语义。然后获得最优化后的执行计划(sql plan),并在内存中分配一定的空间保存该语句与对应的执行计划等信息。

    2、当用户第二次请求或多次请求时,Oracle会自动找到先前的语句与执行计划,而不会进行Hard parse,而是直接进行Soft parse(把语句对应的执行计划调出,然后执行),从而减少数据库的分析时间。

    注意的是:Oracle中只能完全相同的语句,包大小写、空格、换行都要求一样时,才会重复使用以前的分析结果与执行计划。

    分析过程如下图:

    clip_image001

    对于大量的、频繁访问的SQL语句,如果不采用Bind 变量的方式,哪Oracle会花费大量的Shared latchCPU在做Hard parse处理,所以,要尽量提高语句的重用率,减少语句的分析时间,通过了解Oracle SQL语句的分析过程可以明白Oracle的内部处理逻辑,并在设计与实现上避免。

    在用JDBC或其它持久化数据(Hibernate,JDO)操作时,尽量用占位符(?)

      

    ORACLE sql 的处理过程大致如下:
    1.
    运用HASH算法,得到一个HASH值,这个值可以通过V$SQLAREA.HASH_VALUE 查看
    2.
    shared pool 中的 library cache 中查找是否有相同的HASH值,如果存在,则无需硬解析,进行软解析
    3.
    如果shared pool不存在此HASH值,则进行语法检查,查看是否有语法错误
    4.
    如果没有语法错误,就进行语义检查,检查该SQL引用的对象是否存在,该用户是否具有访问该对象的权限
    5.
    如果没有语义错误,对该SQL进行解析,生成解析树,执行计划
    6.
    生成ORACLE能运行的二进制代码,运行该代码并且返回结果给用户
    硬解析和软解析都在第5步进行
    硬解析通常是昂贵的操作,大约占整个SQL执行的70%左右的时间,硬解析会生成执行树,执行计划,等等。
    当再次执行同一条SQL语句的时候,由于发现library cache中有相同的HASH值,这个时候不会硬解析,而会软解析,
    那么软解析究竟是干了什么呢?其实软解析就是跳过了生成解析树,生成执行计划这个耗时又耗CPU的操作,直接利用生成的执行计划运行
    SQL语句。
    下面摘抄eygle深入解析ORACLE 中关于SQL执行过程的描述
      1.
    首先获得library cache latch,根据SQLHASH_VALUElibrary cache中查找是否存在此HASH_VALUE,如果找到这个HASH_VALUE,称之为软解析,Server获得改SQL执行计划转向第4步,如果找不到共享代码就进行硬解析。
      2.
    释放library pool cache,获得shared pool latch,查找并锁定自由空间(bucket 中查找chunk)。如果找不到,报ORA-04031错误
      3.
    释放shared pool latch,重新获得library cache latch,SQL执行计划放入library cache中。
      4.
    释放library cache latch,保持null模式的library cache pin/lock.
      5.
    开始执行。
    Library cache latch
    可以理解为硬/软解析的时候发生的,因为解析的时候会搜索library cache,所以会产生library cache latch
    Library cache pin
    是在执行的阶段发生的。

  • 相关阅读:
    Java JMX 监管
    Spring Boot REST(一)核心接口
    JSR 规范目录
    【平衡树】宠物收养所 HNOI 2004
    【树型DP】叶子的颜色 OUROJ 1698
    【匈牙利匹配】无题II HDU2236
    【贪心】Communication System POJ 1018
    【贪心】Moving Tables POJ 1083
    Calling Extraterrestrial Intelligence Again POJ 1411
    【贪心】Allowance POJ 3040
  • 原文地址:https://www.cnblogs.com/shuihaya/p/3195080.html
Copyright © 2020-2023  润新知