起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > 编程语言 > 【数据库培训】Oracle数据库硬解析和软解析是什么

【数据库培训】Oracle数据库硬解析和软解析是什么

时间:2019-10-18 10:43:05来源:编程网 作者:IT培训网 已有: 名学员访问该课程

  快捷搜索:Oracle数据库数据库培训

前言:一个sql 语句,进入到数据库后,server process 会拿着sql语句到shared pool中的library cache 里边去找,看sql语句以前是否有执行过。也就是在library cache 里面看有没有这条sql语句以及sql语句所对应的执行计划。

详解Oracle数据库硬解析、软解析、软软解析联系与区别!

Oracle数据库硬解析和软解析有相同的一步,而软软解析与硬解析、软解析完全不一样。

一、sql解析

这里我们先简单sql语句执行步骤:

语法检查(syntax check)

语义检查(symantic check): 对象是否存在,是否有权限。

sql解析(parse): 利用内部算法对sql进行解析,生成解析树及执行计划。

执行sql,返回结果(execute and return)

首先了解一下sql解析时用到的内存结构——shared pool。

shared pool是一块内存池,里边又被分成了很多小的区块,每个块有他们的作用:

free (空闲)

library cache (库缓存,缓存sql语句以及sql所对应的执行计划)

row cache (字典缓存——库里有多少表,多少用户,多少个列,列的名字,列的数据类型,每个表多大等等都属于数据库自身信息。)

一个sql 语句,进入到数据库后,server process 会拿着sql语句到shared pool中的library cache 里边去找,看sql语句以前是否有执行过。也就是在library cache 里面看有没有这条sql语句以及sql语句所对应的执行计划。(此过程是通过对传递进来的SQL语句使用HASH函数运算得出HASH值,与共享池中现有语句的HASH值进行比较看是否一一对应。现有数据库中SQL语句的HASH值我们可以通过访问vsql、vsql、vsqlarea、v$sqltext等数据字典中的HASH_VALUE列查询得出。)

二、涉及解析的概念

1. 硬解析

硬解析(Hard Parse)是指Oracle在执行目标SQL时,在库缓存(Library Cache)中找不到可以重用的解析树和执行计划,而不得不从头开始解析目标SQL并生成相应的父游标(Parent Cursor)和子游标(Child Cursor)的过程。

硬解析实际上有两种类型:一种是在库缓存中找不到匹配的父游标(Parent Cursor),此时Oracle会从头开始解析目标SQL,新生成一个父游标和一个子游标,并把它们挂在对应的HashBucket中;另外一种是找到了匹配的父游标但未找到匹配的子游标,此时Oracle也会从头开始解析该目标SQL,新生成一个子游标,并把这个子游标挂在对应的父游标下。

硬解析过程:

语法、语义及权限检查;

查询转换(通过应用各种不同的转换技巧,会生成语义上等同的新的SQL语句,如count(1)会转为count(*));

根据统计信息生成执行计划(找出成本最低的路径,这一步比较耗时);

将游标信息(执行计划)保存到库缓存。

2. 软解析

软解析(Soft Parse)是指Oracle在执行目标SQL时,在Library Cache中找到了匹配的父游标(Parent Cursor)和子游标(Child Cursor),并将存储在子游标中的解析树和执行计划直接拿过来重用而无须从头开始解析的过程。

软解析过程:

语法、语义及权限检查;

将整条SQL hash后从库缓存中执行计划。

软解析对比硬解析省了三个步骤。

3. 软软解析

软软解析(Soft Soft Parse)是指若参数SESSION_CACHED_CURSORS的值大于0,并且该会话游标所对应的目标SQL解析和执行的次数超过3次,则此时该会话游标会被直接缓存在当前会话的PGA中的。若该SQL再次执行的时候,则只需要对其进行语法分析、权限对象分析之后就可以直接从当前会话的PGA中将之前缓存的匹配会话游标直接拿过来用就可以了,这就是软软解析。

软软解析过程:

要完全理解软软解析先要理解游标的概念,当执行SQL时,首先要打开游标,执行完成后,要关闭游标,游标可以理解为SQL语句的一个句柄。

在执行软软解析之前,首先要进行软解析,MOS上说执行3次的SQL语句会把游标缓存到PGA,这个游标一直开着,当再有相同的SQL执行时,则跳过解析的所有过程直接去取执行计划。

三、实验:

1. 环境准备:

drop table test purge; alter system flush shared_pool; create table test as select * from dba_objects where 1<>1; exec dbms_stats.gather_table_stats(ownname => 'sys',tabname => 'test');

【数据库培训】Oracle数据库硬解析和软解析是什么_www.epx365.cn

2. 硬解析

select * from test where object_id=20; select * from test where object_id=30; select * from test where object_id=40; select * from test where object_id=50;

【数据库培训】Oracle数据库硬解析和软解析是什么_www.epx365.cn

3. 软解析

var oid number; exec :oid:=20; select * from test where object_id=:oid; exec :oid:=30; select * from test where object_id=:oid; exec :oid:=40; select * from test where object_id=:oid; exec :oid:=50; select * from test where object_id=:oid;

【数据库培训】Oracle数据库硬解析和软解析是什么_www.epx365.cn

4. 软软解析

begin for i in 1..4 loop execute immediate 'select * from test where object_id=:i' using i; end loop; end; /

【数据库培训】Oracle数据库硬解析和软解析是什么_www.epx365.cn

5. 统计

select sql_text,s.PARSE_CALLS,loads,executions from v$sql s where sql_text like 'select * from test where object_id%' order by 1,2,3,4;

【数据库培训】Oracle数据库硬解析和软解析是什么_www.epx365.cn

可以看到软解析与软软解析相比,软软解析只是解析一次。

字段解释:

PARSE_CALLS 解析的次数

LOADS 硬解析的次数

EXECUTIONS 执行的次数

文章出自:http://qh.itpxw.cn/peixun/software/201956917.html

文章标题:【数据库培训】Oracle数据库硬解析和软解析是什么



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

(责任编辑:罗老师)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
罗老师 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:我爱学历网 联 系 人:罗老师 联系电话: 联系手机: 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件: 网站域名: 注册时间:2015-03-15 13:03 最后登录:2026-06-25 09:06
推荐内容