成品免费网站源码,规范网站建设的通知,成都微信开发小程序,wordpress admin headOracle中SQL语句执行过程中,Oracle内部解析原理如下: 1、当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法、表名、字段名等相关信息#xff08;如下图#xff09;#xff0c;这过程会花比较长的时间#xff0c;因为它要分… Oracle中SQL语句执行过程中,Oracle内部解析原理如下: 1、当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法、表名、字段名等相关信息如下图这过程会花比较长的时间因为它要分析语句的语法与语义。然后获得最优化后的执行计划sql plan并在内存中分配一定的空间保存该语句与对应的执行计划等信息。 2、当用户第二次请求或多次请求时Oracle会自动找到先前的语句与执行计划而不会进行Hard parse,而是直接进行Soft parse把语句对应的执行计划调出然后执行,从而减少数据库的分析时间。 注意的是Oracle中只能完全相同的语句包大小写、空格、换行都要求一样时才会重复使用以前的分析结果与执行计划。 分析过程如下图 对于大量的、频繁访问的SQL语句如果不采用Bind 变量的方式哪Oracle会花费大量的Shared latch与CPU在做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,根据SQL的HASH_VALUE在library 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 是在执行的阶段发生的。