1.sql解析的过程

  • oracle首先将SQL文本转化为ASCII字符,然后根据hash函数计算其对应的hash值(hash_value)。根据计算出的hash值到library cache中找到对应的bucket,然后比较bucket里是否存在该SQL语句。
  • 如果不存在,获得shared pool latch,然后在shared pool中的可用chunk链表(也就是bucket)上找到一个可用的chunk,然后释放shared pool latch。在获得了chunk以后,这块chunk就可以认为是进入了library cache。然后,进行硬解析过程。
  • 对SQL语句进行语法检查,看是否有语法错误。比如没有写from等。如果有,则退出解析过程。
  • 到数据字典里校验SQL语句涉及的对象和列是否都存在。如果不存在,则退出解析过程。
  • 将对象进行名称转换。比如将同名词翻译成实际的对象等。如果转换失败,则退出解析过程。
  • 检查游标里用户是否具有访问SQL语句里所引用的对象的权限。如果没有权限,则退出解析过程。
  • 通过优化器创建一个最优的执行计划。这一步是最消耗CPU资源的。
  • 将该游标所产生的执行计划、SQL文本等装载进library cache的若干个heap中。
  • 在硬解析的过程中,进程会一直持有library cach latch,直到硬解析结束。硬解析结束以后,会为该SQL产生两个游标,一个是父游标,另一个是子游标。父游标里主要包含两种信息:SQL文本以及优化 目标(optimizer goal)。父游标在第一次打开时被锁定,直到其他所有的session都关闭该游标后才被解锁。当父游标被锁定的时候是不能被交换出library cache的,只有在解锁以后才能被交换出library cache,这时该父游标对应的所有子游标也被交换出library cache。子游标包括游标所有的信息,比如具体的执行计划、绑定变量等。
  • 子游标随时可以被交换出library cache,当子游标被交换出library cache时,oracle可以利用父游标的信息重新构建出一个子游标来,这个过程叫reload。可以使用下面的方式来确定reload的比率: 
    SELECT 100*sum(reloads)/sum(pins) Reload_Ratio FROM v$librarycache; 
    一 个父游标可以对应多个子游标。子游标具体的个数可以从v$sqlarea的version_count字段体现出来。而每个具体的子游标则全都在 v$sql里体现。当具体的绑定变量的值与上次的绑定变量的值有较大差异(比如上次执行的绑定变量的值的长度是6位,而这次执行的绑定变量的值的长度是 200位)时或者当SQL语句完全相同,但是所引用的对象属于不同的schema时,都会创建一个新的子游标。
  • 如果在bucket中找到了该SQL语句,则说明该SQL语句以前运行过,于是进行软解析。软解析是相对于硬解析而言的,如果解析过程中,可以从硬解析的步骤中去掉一个或多个的话,这样的解析就是软解析。软解析分为以下三种类型。 
    1) 第一种是某个session发出的SQL语句与library cache里其他session发出的SQL语句一致。这时,该解析过程中可以去掉硬解析中的5和6这两步,但是仍然要进行硬解析过程中的2、3、4步骤:也就是表名和列名检查、名称转换和权限检查。 
    2) 第二种是某个session发出的SQL语句与library cache里该同一个session之前发出的SQL语句一致。这时,该解析过程中可以去掉硬解析中的2、3、5和6这四步,但是仍然要进行权限检查,因 为可能通过grant改变了该session用户的权限。 
    3) 第三种是当设置了初始化参数session_cached_cursors时,当某个session对相同的cursor进行第三次访问时,将在该 session的PGA里创建一个标记,并且该游标即使已经被关闭也不会从library cache中交换出去。这样,该session以后再执行相同的SQL语句时,将跳过硬解析的所有步骤。这种情况下,是最高效的解析方式,但是会消耗很大 的内存。

2.查看sql解析的过程、内部结构

3.sql解析过程统计

oracle 内存结构 share pool sql解析的过程相关推荐

  1. Oracle数据库基础入门《二》Oracle内存结构

    Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...

  2. Oracle内存结构:SGA PGA UGA

    oracle内存结构: SGA.PGA.UGA 内存结构是oracle数据库最重要的组成部分之一,在数据库中的操作或多或少都会依赖到内存,是影响数据库性能的重要因素Oracle数据库中包括3个基本的内 ...

  3. Oracle 内存结构

    Oracle内存结构 一.概述 每当数据库启动,系统全局区(SGA)被分配,并启动了Oracle后台进程. 系统全局区用于数据库用户共享数据库信的内存区域, 后台进程和内存缓冲区称为Oracle实例, ...

  4. oracle的基本内存结构有,oracle内存结构(一)

    Oracle 内存结构 与Oracle 实例关联的基本内存结构包括: 系统全局区(SGA):由所有服务器进程和后台进程共享 程序全局区(PGA):由每个服务器和后台进程专用,每个进程都有一个PGA. ...

  5. ORACLE内存结构简介

    ORACLE数据库作为世界上一款功能强大的数据库管理软件,功能体系特别庞大.我们有必要对它的每一部分学习了解,然后才从全局的角度进行有效把握.我们会着重从理论基础体系角度再逐步到实战应用.实际上,如果 ...

  6. oracle数据库 uga,Oracle内存结构

    当实例启动时,Oracle数据库会分配一块内存区域并启动后台进程.OLAP页池也存放在UGA中.这个池管理着OLAP的数据页,它们与数据块 14.Oracle内存结构 14-1 Oracle内存结构介 ...

  7. mysql中10049是什么错误_【学习笔记】Oracle数据库10049用于分析SQL解析笔记案例

    [学习笔记]Oracle数据库10049用于分析SQL解析笔记案例 时间:2016-11-05 13:54   来源:Oracle研究中心   作者:HTZ   点击: 次 天萃荷净 Oracle研究 ...

  8. Oracle内存结构详解(三)--管理Oracle Share Pool

    SGA中的共享池由库缓存(Library Cache).字典缓存(Dictionary Cache).用于并行执行消息的缓冲以及控制结构组成. Shared Pool的大小由参数SHARED_POOL ...

  9. oracle数据缓冲区作用,Oracle内存结构(02)--缓冲区

    用户提交一个新SQL语句时,Oracle会分析(parse)该句SQL(硬解析),这个过程将耗费相对较多的时间.分析完毕后,oracle会将该SQL的分析结果给保存在Library Cache中,当数 ...

最新文章

  1. 驱动设计的思想:面向对象/分层/分离
  2. 机器视觉 · 立体相机
  3. html图片爆炸效果,利用CSS3制作3D图片爆炸效果
  4. 基于CNN的性别、年龄识别及Demo实现
  5. ios添加设备真机测试,以及Undefined symbols for architecture x86_64:''错误
  6. .NET Framework 1.1安装出现1935错误的解决办法
  7. python算法详解豆瓣_豆瓣爬虫实践-python版
  8. devops是运维吗_您是DevOps的合适人选吗?
  9. ModelArts黑科技揭秘|弹性训练,让训练资源张弛有度
  10. 常用的MySQL命令大全
  11. 全网首发:JDK绘制文字:一、绘制流程
  12. 记录学习算法心得(时间复杂度和空间复杂度)
  13. 使用Chrome谷歌浏览器打开Axure原型图
  14. 永恒之蓝 利用(复现)
  15. uiautomator2输入中文的问题
  16. ​【​观察】云栖大会共话JDM模式 揭秘创新背后的价值和启示
  17. 青蛙的约会(POJ 1061 扩展欧几里德算法)
  18. swift中检测跳转苹果自带地图、高德地图、百度地图、腾讯地图
  19. 软件开发中项目经理有那些职责
  20. “标签化”思想在分布式系统中的应用

热门文章

  1. python 跳水板
  2. 面试 -- 多线程( 一) -- 基础
  3. linux安装jetty部署war包,jetty部署war包
  4. 求两个集合的差集代码_求求你了,不要再写循环求两个列表的交集,并集和差集了 | pythonic 小技巧...
  5. android 编辑框带拖动,Android带输入框的对话框
  6. VS2010和opencv2.4.9的配置
  7. 神经网络weight参数怎么初始化
  8. Ubuntu命令行下安装、卸载、管理软件包的方法
  9. JMS(Java消息服务)入门教程
  10. 大白话系列之C#委托与事件讲解大结局