Oracles Hard-Parsing, Soft-Parsing und Soft-Parsing

Hintergrund

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

erklären

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

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

1. Harte Analyse

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

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

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

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

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

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

2. Weiche Analyse

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

3. Weiche Analyse

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

der Unterschied

判断硬解析和软解析的依据在于 sga 中的 share cursor 的缓存情况;
判断软解析和软软解析的依据在于 pga 中的 session cursor 是否可以重用;

Guess you like

Origin blog.csdn.net/Little_Arya/article/details/131502506