通过sql执行的过程了解体系结构



ORACLE体系结构是描述了数据库的工作原理,工作过程,数据库的组成 和数据库的内外组织和管理机制,内存的分配与管理,进程的分工协作以及各个组件的功能和联系等。
数据库的存储结构
1物理存储结构: 表现为操作系统中一系列文件用于描述数据库外部的存储,即在操作系统层面中如何组织和管理数据
2逻辑存储结构是对物理存储结构的逻辑组织与管理 用于描述数据库内部存储和管理方式即在数据库管理系统的层面


Oracle在执行SQL语句时,普遍存在以下几个步骤:
解析---绑定---执行---获取
prase---bind---execute---fetch
在执行和获取结果前,数据库系统对此sql将进行几个步骤的处理过程: 
1、解析  

1)语法分析,分析SQL语句的语法是否符合规范,衡量语句中各表达式的意义会在sharepool中的data dictionary cache中 

2)检查是否存在语义错误和权限。语义分析,检查语句中设计的所有数据库对象是否存在,且用户有相应的权限。会在sharepool中的data dictionary cache中 

软解析: 检查共享池中是否有之前解析相同的SQL语句后所存储的SQL文本、解析树和执行计划。如果能从共享池的缓存库(   library cache )中找到之前解析过生成的执行计划,则SQL语句则不需要再次解析,便可以直接由库缓存得到之前所产生的执行计划,从而直接跳到绑定或执行 阶段,这种解析称作软解析。
硬解析: 如果在共享池的库缓存   library cache 中找不到对应的执行计划,则必须继续解析SQL、生成执行计划, 执行的新计划存在 library cache中 这个过程就叫硬解析,消耗大量的CPU时间和系统资源。硬解析过多会有效降低系统性能。
2绑定变量

不使用绑定变量的SQL语句,Oracle无法将它们视为相同的,如以下两句语句:

select * from emp where empno=1234

select * from emp where empno=5678

因为自由变量的不同,Oracle认为以上是2句不同的语句,则当第一条被硬解析后,第二条SQL执行时仍无法避免硬解析。实际在以上不使用绑定变 量的情况中,只要自由变量有所改变则需要一次硬解析。这是强烈建议使用绑定变量的主要原因,使用绑定变量的语句变量的实际值仅在SQL执行的最后阶段被代 入。如以下语句:

select * from emp where empno=:x

该语句使用绑定值:x替代自由变量,在应用中语句可能以预编译或普通编译的方式存在,仅在执行阶段代入变量值,多次执行仅需要一次硬解析,较不使用绑定变量情况性能大大提升。

同时过多的硬解析还会引发共享池碎片过多的问题。因为每当需要硬解析一个SQL或者PLSQL语句时,都需要从shared pool中分配一块连续的空闲空间来存放解析结果。Oracle首先扫描shared pool查找空闲内存,如果没有发现大小正好合适的空闲chunk,就查找更大的chunk,如果找到比请求的大小更大的空闲chunk,则将它分裂,多 余部分继续放到空闲列表中。因为过多的硬解析加剧了内存段分配的需求,这样就产生了碎片问题。系统经过长时间运行后,就会产生大量小的内存碎片。当请求分 配一个较大的内存块时,尽管shared pool总空闲空间还很大,但是没有一个单独的连续空闲块能满足需要。这时,就可能产生 ORA-4031错误。 

3 执行

此阶段按照执行计划执行SQL,产生执行结果。不同类型的SQL语句,执行过程也不同。

SELECT查询

检查所需的数据块是否已经在缓冲区缓存(database buffer cache)中,如果已经在缓冲区缓存(database buffer cache中,直接读取器内容即可。这种读取方式称为逻辑读取。如果所需数据不在缓冲区缓存(database buffer cache中,则服务器进程需要先扫描数据块,读取相应数据块到缓冲区缓存(database buffer cache,这种读取方式称为物理读。和逻辑读相比较,它更加耗费CPU和IO资源。

修改操作(INSERT、UPDATE、DELETE)

Step 1:检查所需的数据库是否已经被读取到缓冲区缓存 (database buffer cache 中。 如果已经存在缓冲区缓存则执行Step3
Step 2:若所需的数据库并不在缓冲区缓存 (database buffer cache 中,则服务器将数据块从数据文件读取到缓冲区缓存存中 (database buffer cache
step 3 :在缓冲区存储中修改数据行的内容,使其变成脏块,重写redo log file
step 4 :把脏块写入数据文件

4获取

提取只有SELECT查询语句才有的步骤。获取查询的记录行,必要的时候对查询结果排序。



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

转载于:http://blog.itpub.net/30166976/viewspace-1481845/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值