ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SGA

SGA

原创 Linux操作系统 作者:dragon路 时间:2011-06-09 21:56:34 0 删除 编辑
要了解library cache 必须先了解SQL执行过程
 
SQL执行过程:
   一.探查执行历史
   二.分析语句
   三.HASH值匹配
   四.生成执行计划
 
                  五.执行语句
   六.排序获取返回行
 
  
一.探查执行历史 
  
 1.检查是否有打开的游标,如果有,直接通过游标连接到位于PGA的private_sql_area
  
 2.检查初始化参数SESSION_CACHED_CURSORS是否被设置
   
  如果设置,则同样可以通过游标指向到PGA的private_sql_area
  
 3.检查预编译程序中HOLD_CURSOR以及RELEASE_CURSOR的设置,默认都为NO
  
  如果设置,则同样可以通过游标指向到PGA的private_sql_area
  
  oracle会按上面的顺序逐次检查,当发现满足条件时,就直接执行SQL(转11步),这种解析就叫快解析或软软解析
 
二.分析语句
 如果上面的探查历史失败,就要走这步
  
 4.创建一个游标
  
 5.语法检查Syntax Check:
检查语法书写是否正确,是否符合SQL Reference Manual中给出的SQL语法。
 
 6.语义分析Semantic Analysis:
   
   查找数据字典,检查表、列是否正确,检查在对象上标记锁,如果和要放置的锁冲突则等待或报错.
   
   锁得目的就是使得在语句的语法分析过程中不改变这些对象的定义,
   
   验证为存取所涉及的模式对象所需的权限是否满足。
 三.HASH值匹配
  
 7.将语句转化成ASCII等效数字码,再通过HASH算法得到散列值。
  
 8.检查库缓存中是否存在同样hash值的语句。
  
   如果存在,要再次检查对象和权限的(若和以缓存的SQL对象权限等不匹配,会生成子游标).执行SQL(转11步),这种解析就叫软解析
 
四.生成执行计划
  如果上面的HASH值匹配失败,就要走这步,经历这步就叫硬解析
  
 9.由优化器(CBO)对SQL语句生成解析树,再对语句引用的表和列进行分析,得出若干种执行计划,从中选择一种最优的.
  
  这步是最消耗资源的.
  
 10.记录这条SQL,及其解析树,执行计划,父游标和子游标等信息记录到v$sql v$sqlarea
 
五.执行语句
 11.执行语句从DB buffer cache中获取数据
  
 12.若数据不在DB buffer cache中,就要先把所需数据文件中读入
   
   如果DB bufferc cache没有空间加载 就要通过LRU算法来清理
   
   数据是从 db_buffer_cache 获取已存在的数据 就叫逻辑读
   
   数据若不在db_buffer_cache,从磁盘加载 就叫物理读
 
六.排序获取返回行 如果语句有返回行给用户才有此步骤,返回的方式是分批分量的.
  13.如果语句包含order by或其他需要排序的语法(max minus等)
   
    要在sort_area_size里排序 它存在于PGA中(只在这里排序 就是内存排序)
  
  14.如果排序量很大 sort_area_size容不下就去临时表空间去做排序(就是磁盘排序)
 
  15.如果排序需要返回给用户,将排好的数据放入sort_area_retained_size 它存在于UGA中
   
    排序是批量返回的,比如100行,全部排好后,将前20就放入这个空间,被取走后
    再放入20...
select EXECUTIONS,ADDRESS,HASH_VALUE,SQL_TEXT from v$sql where lower(sql_text) like 'select * from emp%'; 
    set timing on;
在此可以测定绑定变量的优势。创建解析树、生成执行计划对于sql的执行来说是开销昂贵的动作
Oracle利用内部的hash
    算法来取得该sql的hash值,然后在library cache里查找是否存在该hash值
假设“相同”,就将利用已有的解析树与执行计划,而省略了
    优化器的相关工作。这也就是软解析的过程.
ORACLE在执行的时候只需要编译一次,随后执行9999次都是从共享池中共享的执行计划.

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

上一篇: oracle 官方文档
下一篇: oracle体系结构
请登录后发表评论 登录
全部评论

注册时间:2011-04-24

  • 博文量
    34
  • 访问量
    54407