Oracle SQL语句解析过程

Oracle SQL语句解析过程

目录

Oracle SQL语句解析过程

1 软硬解析

2 SQL解析过程


1 软硬解析

SQL语句在到达Oracle实例后,需要先进行解析,分析出最优的执行计划后,再按照执行计划,开始执行SQL。根据能否复用执行计划,解析过程可以分析以下两大类:

  • 硬解析过程:当一用户第一次提交一条SQL语句时,Oracle会将这SQL进行Hard parse,过程有点像程序编译,会检查SQL语法、表及其他对象的权限等信息。这过程会花比较长的时间,因为它要分析SQL语句的语法与语义。然后获得最优化后的执行计划(sql plan),并在内存中分配一定的空间保存该语句以及对应的执行计划等信息。
  • 软解析过程:当用户第二次请求或更多次请求时,Oracle会自动找到先前的语句与执行计划,不会进行Hard parse,而是直接进行Soft parse,即把语句对应的执行计划调出,然后执行,从而减少数据库的分析时间。

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

对于大量的、频繁访问的SQL语句,尽量采用Bind变量方式,走Soft parse,减少Hard parse,降低CPU和内存资源消耗。

2 SQL解析过程

ORACLE SQL语句的具体处理过程,大致如下:

  1. SQL语句经过HASH运算,得到一个HASH值;
  2. 在Shared Pool 的 Library Cache 中查找是否有相同的HASH值,如果存在,则无需硬解析,直接进行软解析;
  3. 如果Shared Pool不存在此HASH值,则进行语法检查,查看是否有语法错误 ;
  4. 如果没有语法错误,就进行语义检查,检查该SQL引用的对象是否存在,该用户是否具有访问该对象的权限;
  5. 如果没有语义错误,对该SQL进行解析,生成解析树和执行计划;
  6. 生成ORACLE能运行的二进制代码,运行该代码,并返回结果给用户 ;

  图1 - Oracle SQL解析过程:

Oracle SQL语句解析过程_第1张图片

 

下面是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. 开始执行。

 

你可能感兴趣的:(数据库)