千家信息网

如何进行Oracle数据库硬解析、软解析、软软解析联系与区别的分析

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,如何进行Oracle数据库硬解析、软解析、软软解析联系与区别的分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Oracle数据库硬
千家信息网最后更新 2024年11月23日如何进行Oracle数据库硬解析、软解析、软软解析联系与区别的分析

如何进行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');

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;

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;

4. 软软解析

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

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;

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

字段解释:

  • PARSE_CALLS 解析的次数

  • LOADS 硬解析的次数

  • EXECUTIONS 执行的次数

关于如何进行Oracle数据库硬解析、软解析、软软解析联系与区别的分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

游标 语句 缓存 数据 过程 数据库 目标 分析 从头 权限 次数 语义 语法 检查 生成 个子 信息 问题 联系 相同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华为软件开发及试题库及答案 金山区品牌软件开发定做价格 软件开发代号4位数的规律 数据库数字数据类型有哪些 网络安全大赛的简写 西安理工大学网络技术就业前景 广州腾科网络技术有限公司实训 网络安全编程试卷 上海进口网络技术服务行业标准 内部数据库查询系统源码 软件开发同事被辞退 微序互联网络科技 忻州市金融日网络安全宣传 北京互动百科网络技术股 中信事件服务器 网络安全法 什么时间 落地页和服务器怎么搭建 上海市大学生网络安全竞赛 数码小站资源服务器调整 软件开发前期职位 安徽专业服务器租用云主机 学习数据库应用技术需要什么 计算机网络技术的解释 长沙网络安全现状 部队网络安全宣传周活动情况报告 电子签名服务器属于 调制解调器下载软件开发 苏州戴尔服务器零售价格 iis7服务器管理工具有什么用 中国网络安全中心是什么性质
0