这篇文章是参考加甲骨论老相老师视频所做的学习笔记:
http://www.jiagulun.com/thread-2675-1-1.html

Sql 执行的流程分成3部分:
解析部分(Parse): Server process将sql语句在Shared pool(共享池)里解析为执行计划
执行部分(Execute): Server process根据执行计划在DB buffer cache和数据文件里提取数据.
获取数据部分(Fetch): 获得数据并返回给用户.

所以可以看出解析部分是在SGA里面 Share pool里完成的.
可以从V$sgainfo 视图查看shared pool 的当前大小信息

Share pool里面分成许多个部分, 我们可以大概看成3个主要部分:(实际上还有Result cache等部分)
分别是Free 空间, Library Cache(库缓存)RowCache(字典缓存)
如图:
Shared pool

而整个Shared pool的作用是用来缓存用户的sql 语句和 和对应执行计划的.

当一条sql语句, 从user client传到Server Process(PGA)里时, Server Process会拿着sql去Share pool里面.
Server process首先会判断sql语句的语法是否正确, sql语句涉及的对象是否有权限.

如果上面两步没问题了,那么会到Share pool 里的 Library Cache寻找有无相同的sql语句和对应的缓存计划.

所以Server Process在share pool里头3个动作是:
1. 判断语法合法性
2. 判断涉及对象权限
3. 到Library Cache里寻找缓存的sql和对应执行计划.

好了由第3步得知Share pool缓存的sql语句和执行计划实在是缓存在share pool里的Libaray Cache里面的.

下面简单介绍下Library cache和 Rowcache
Library cache : 在share pool里用来缓存用户执行过的sql语句和对应执行计划.
                        
在Oracle 10g 里可以用select * from v$sgastat where pool = 'shared pool' and name ='library cache'来查看当前library cache的大小:
(11g不适用...)

住: 数据库负载越重free memory越小.

Rowcache : 数据字典缓存, 作用就是存放数据字典的数据啦.
                    为什么要存放数据字典呢, 因为上面的第2步:判断涉及对象权限  和 硬解析中要访问大量的表/索引..对象 而这些信息都是存放在数据字典中的.

好了现在说明下什么是软解析:
当Server process在Library cache里找到现成的执行计划时,就直接可以利用这个执行计划去执行sql语句了. 我们就叫个得到执行计划的过程叫软解析所以软解析只包含上述3步动作.

硬解析:

当sql语句是第一次运行或者其他原因, Library cache里面没有对应的执行计划,只能由Server process自己去解析成执行计划, 就是硬解析了.

硬解析也是在library cache里完成的.
因为1个sql语句有多种执行方案. 解析过程中必须访问大量的数据库对象信息才能得到1个最佳的执行方案成为执行计划,所以Oracle才会吧数据字典缓存Rowcache 放到shared pool 与librarycache配合.

所以硬解析包含4步: 上述3步再加上解析成执行计划的这一步, 而第4步是相当耗费资源的,  所以通常我们会遇到第一次执行查询数据很慢, 然后第2 第3次就很快了, 这里就有软解析的功劳(当然也有 DB buffer cache的作用).

所以我们希望shared pool 里的软解析越多越好.

可以查看v$sgastat查看硬解析和软解析次数

如上图
 Parse time cpu:   数据库启动以来解析花费的cpu时间
 parse time elapsed: 解析总时间
 parse count(total) : 解析总次数
 parse count(hard): 硬解析次数
 parse count(failures) : 解析失败的次数
 parse count(describe) : Total number of parse calls on a describe cursor, 这种解析耗费资源介于硬解析与软解析之间 11g独有

用total次数减去上面3中解析的次数就是软解析次数了.

Oracle sql解析类型, 软解析和硬解析浅析相关推荐

  1. sql like 绑定变量_码硬解析的改进方法之二使用绑定变量

    绑定变量要求变量名称,数据类型以及长度是一致,否则无法使用软解析 绑定变量(bind variable)是指在DML语句中使用一个占位符,即使用冒号后面紧跟变量名的形式,如下 select * fro ...

  2. Oracle关于date类型的查询方式及效率浅析

    背景:数仓ETL环节通过sqoop抽取某个Oracle业务表时,突然在某天提示sqoop导出错误,重试仍然失败.经过查询源库发现当前增量抽取sql耗时特别久,涉及oracle数据库date类型比较时的 ...

  3. 【Oracle】硬解析、软解析和软软解析

    [Oracle]硬解析.软解析和软软解析 前言   在 Oracle 中,每条 SQL 语句在执行之前都需要经过解析(Parse),根据解析的过程可以分为 3 种类型:硬解析(Hard Parse). ...

  4. 详解ORACLE数据库硬解析、软解析、软软解析

    概述 TOM大叔的调优书中说过一句话,大概意思就是:如果有人让我写本怎样让ORACLE性能最慢的书的话我会将取消绑定变量(bind variable)做为书的第一章和最后一章,可见绑定变量的重要性.而 ...

  5. 彻底弄懂oracle硬解析、软解析、软软解析

    硬解析和软解析有相同的一步,而软软解析与硬解析.软解析完全不一样.先来说下理论上的东西,然后来做个实验. 硬解析过程: 1.语法.语义及权限检查: 2.查询转换(通过应用各种不同的转换技巧,会生成语义 ...

  6. PLSQL_解析过程及硬解析和软解析的区别(案例)

    2014-08-11 Created By BaoXinjian 一.摘要 Oracle硬解析和软解析是我们经常遇到的问题,所以需要考虑何时产生软解析何时产生硬解析,如何判断 1. SQL的执行过程 ...

  7. Oracle查看硬解析

    ORACLE硬解析分析 前言 ORACLE的硬解析和软解析 AWR报告中的硬解析 通过ORACLE视图判断硬解析 关于version count 前言 工作中ORACLE使用的越多,发现对ORACLE ...

  8. 梆定变量的长度不一致也可能会造成硬解析

    当第一次使用梆定变量为字符串类型,并且小于32bytes时,oracle捕获这个梆定变量,并改写该梆定变量的字符串长度为32Bytes.如果第二次再使用该sql和梆定变量,如果梆定变量长度超过32字节 ...

  9. oracle SQL语句硬编码带来的问题以及解决办法

    好久没有写博客(吹nb)了,最近在工作中遇到了一些SQL硬编码的问题(系统部提出的要求,要求开发优化sql),下面具体说说. 1.硬解析即整个SQL语句的执行需要完完全全的解析,生成执行计划. 硬解析 ...

最新文章

  1. pycharm 怎么对代码进行性能分析,消耗时间time (Run -- Profile 'xxxx')
  2. Python基础知识细节点总结,零基础一分钟也能掌握
  3. 从浏览器地址栏输入url到显示页面的步骤
  4. porting linux
  5. 仿真程序驱动视景问题
  6. 叮当:一个开源的树莓派中文智能音箱项目
  7. 论坛指定portal.php,去除Discuz论坛域名后面的/forum.php或portal.php
  8. 雷达技术在汽车安全方面的应用
  9. uniapp + vue3微信小程序开发(6)地图展示
  10. java jlist 添加滚动条_JList滚动条问题
  11. 随手笔记(九)———类型装换技巧
  12. 光流传感器 定位精度_光流定位原理是什么??【转】
  13. 【语音识别】动态时间规整算法(RTW)语音识别系统【含GUI Matlab源码 341期】
  14. 系统优化与lvs详解配置、haproxy
  15. 用四位数码管和DS3231时钟模块做车载电子时钟
  16. 小伙整容成雷锋后亮相,网友:快做好事去吧
  17. 江西耐高温水稻技术 国稻种·中国水稻节:赣鄱沃野成就画卷
  18. QT笔记——QSetting 之 Ini文件的简单封装
  19. 阿里巴巴计划分拆中国万网赴美上市
  20. 实战Elasticsearch6的join类型

热门文章

  1. Kubernetes构建过程分析
  2. 密码技术--证书及go语言生成自签证书
  3. 【Python小程序】这竟是2月14号情人节表白神器、成功率100%?(进来康康)
  4. optee3.16.0 qemu_v8的环境搭建篇(ubuntu20.10)
  5. [HOW TO]-ubuntu20.10环境上安装workpress
  6. /GS 编译选项,_security_cookie,软件强制DEP
  7. 使用WebStor快速检查你组织网络中的所有网站相关安全技术
  8. Windows驱动开发学习笔记(一)—— 环境配置第一个驱动程序
  9. MySQL CHAR、VARCHAR、TEXT、ENUM、SET(字符串类型)
  10. 1.4 获取字符串长度(length())