ITPub博客

首页 > 数据库 > Oracle > SQL的执行

SQL的执行

原创 Oracle 作者:jlttt 时间:2008-07-26 15:46:57 0 删除 编辑

白老师就是那么牛,再转。

最近有网友问我SQL的执行有哪些步骤。实际上SQL执行是一个十分复杂的事情。这里仅介绍SQL提交到SQL引擎后的几个重要的阶段。一个SQL的执行分为分析(PARSE),执行(EXECUTE)和FETCH三个大的阶段。

SQL执行的第一步是对语法进行分析,首先根据SQL语句,计算出SQL的HASHVALUE,然后根据HASHVALUE查找LIBRARY CACHE,是否存在这个SQL,如果存在,那么说明语法是经过检查的,不需要进行语法检查。如果不存在,那么要在LIBRARY CACHE中分配内存,这时候会涉及到SHARED POOL,LIBRARY CACHE闩锁。

第二步是进行语意的检查和SQL Transformation,对于子查询、视图等,需要通过这个阶段,转化为JOIN等

第三步是生成执行树,如果是RBO直接根据规则生成,如果是CBO,则根据优化规则,统计数据等,进行独立对象访问成本计算、连接顺序成本计算等,最终生成执行树(这部分可以通过10053事件获得详细的信息)

到此,PARSE阶段就完成了,下面进行EXECUTE阶段

EXECUTE阶段对绑定变量分配空间,然后绑定数值。并且驱动执行分析阶段生成的执行计划。在这个阶段并没有对DATA BLOCK进行访问,真正对DATA BLOCK的访问要在下一个阶段进行。

FETCH阶段会访问DATA BLOCK,并且返回需要的行。

在实际SQL的执行中,这三个阶段是相融合的,并且有些步骤可能前置或者后置。比如对于绑定变量的值如果对于执行计划生成有影响,那么变量绑定会前置到分析阶段。

如果要深入研究SQL的执行,可以通过以下一些事件来获得详细的信息:

ROW SOURCE相关:

"row source debug event (R*)"
"dump row source tree (QBADRV)"
PREDICATE相关:
"dump predicates in optimiser (kko)"
CBO相关:

SQL TRACE:

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9533994/viewspace-1007887/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-06-28

  • 博文量
    75
  • 访问量
    686126