ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQL的处理流程-基础

SQL的处理流程-基础

原创 Linux操作系统 作者:gengzhizhen 时间:2009-04-24 21:13:40 0 删除 编辑

做为一个补充的部分,我们来介绍一下SQL的处理过程。

Buffer Cache的作用是显而易见的,但对于Shared Pool,要想清楚的理解它的作用,我们有必要了解Oracle里面SQL的处理过程。

这里我们简单介绍SQL的处理流程,很多细节是我们今天不能完全涉及的,深入的了解SQL实际上performance tuning的课程的目标之一。
1. Open cursor(游标)
首先,处理SQL的第一步就是要打开一个游标,而最后一步则是关闭游标,实际上整个SQL的处理过程就是游标的生命周期。了解PL/SQL的同事应该对PL/SQL里的游标有一些印象,在PL/SQL里面我们通过手工定义游标,打开游标,fetch游标,关闭游标这一系列工作来控制一个结果集,实际上这里的游标是一个explicit cursor,而对于任何一个SQLOracle在处理之前都需要打开一个implicit cursor
2. Parse statement
这个整个SQL处理过程中最复杂的一部分,实际上我们的Shared pool的作用就是系统可以让这个Parse阶段尽快完成。如果我们可以在Shared pool里找到想要Parse的语句,那么这个Parse就是一个soft parse,否则就是一个hard parse
一个hard parse需要做的事情包括:
检查SQL的语法和语义是否有问题
检查数据字典看看SQL所涉及的表或其他对象是否是有效的
在所有SQL涉及到的对象上加一个parsing lock,保证这些对象的定义不会在parse的期间改变
确保执行语句的用户有足够的权限查看或修改SQL中涉及的表上的内容
确认一个执行SQL的最佳方案,也就是确定execution plan
Parse的结果和execution plan放到Shared pool里,期望以后当同一条SQL再次执行的时候,可以不需要做hard parse,只需要做soft parse就可以了。
3. Bind variable
如果在SQL中指定了绑定变量,在这个阶段给SQL附上绑定变量的值
4. 如果SQL需要进行并行处理,在这里把整个SQL分割成多个并行的部分
5. Execution
Oracle按照execution plan指定的方式执行SQL,这应该是整个SQL处理过程中耗费时间最长的阶段。对于deleteupdate操作,执行的时候要获取相关数据的行级锁。
6. Fetch
对于Select,这一步是获得select的结果并发送给用户。
7. 关闭游标

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

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

注册时间:2009-02-09

  • 博文量
    119
  • 访问量
    205100