Oracle的硬解析、软解析和软软解析

文章讨论了Oracle数据库中SQL查询的解析过程,包括硬解析的详细步骤,如语法检查、对象存在性验证、权限检查和优化器创建执行计划。软解析和软软解析则是为了提高效率,避免重复的解析工作。软解析利用librarycache,而软软解析则将游标信息存储在session的PGA中,减少资源消耗。这些解析机制对处理大量数据和性能优化有重要影响。
摘要由CSDN通过智能技术生成

背景

当一张表的数据量很大,sql硬解析会导致首次查询超时。因为Oracle首次sql都会生成解析计划。
某些程序中,首次查询时,oracle都走的硬解析,导致查询超时,但是第二次请求(间隔极短),
因为已经生成了对应的解析计划,所以第二次或之后的查询速度会极快,基本不会出现查询超时情况。

解释

在 Oracle 中,“执行一条新的SQL”,必然是硬解析。
每条 SQL 语句在执行之前都需要经过解析(Parse),根据解析的过程可以分为 3 种类型:硬解析(Hard Parse)、
软解析(Soft Parse)和软软解析(Soft Soft Parse),软软解析也叫快速解析(Fast Parse)。

DDL 语句每次执行都需要进行硬解析;
DML 语句和 SELECT 语句会根据情况选择是进行硬解析,还是进行软解析或者进行软软解析。

1、硬解析

硬解析一般包括下面几个过程:

1)对SQL语句进行语法检查,看是否有语法错误。比如select from where 等的拼写错误,如果存在语法错误,则推出解析过程;

2)通过数据字典(row cache),检查SQL语句中涉及的对象和列是否存在。如果不存在,则推出解析过程。

3)检查SQL语句的用户是否对涉及到的对象是否有权限。如果没有则推出解析;

4)通过优化器创建一个最优的执行计划。这个过程会根据数据字典中的对象的统计信息,来计算多个执行计划的
花费时间,从而得到一个最优的执行计划。这一步涉及到大量的数据运算,从而会消耗大量的CPU资源;
(library cache最主要的目的就是通过软解析来减少这个步骤);

5)将该游标所产生的执行计划,SQL文本等装载进library cache中的heap中。

2、软解析

所谓软解析,就是因为相同文本的SQL语句存在于library cache中,
所以本次SQL语句的解析就可以去掉硬解析中的一个或多个步骤。从而节省大量的资源的耗费。

3、软软解析

所谓的软软解析,就是不解析。
当设置了session_cached_cursors参数时,当某个session第三次执行相同的SQL语句时,则会把该SQL语句的
游标信息转移到该session的PGA中。这样,当该session在执行该SQL语句时,会直接从PGA中取出执行计划,
从而跳过硬解析的所有步骤。

区别

判断硬解析和软解析的依据在于 sga 中的 share cursor 的缓存情况;
判断软解析和软软解析的依据在于 pga 中的 session cursor 是否可以重用;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值