一、客户端通过监听连接到数据库,数据库开启一个server process进程来接收客户端传过来的sql。

  1.这条sql语句从来都没有被执行过。(硬解析)
  2.这条sql语句被执行过。(软解析)

二、我们来看一条SQL语句内部解析到底经历了什么?

sql硬解析解析的步骤

1.语法检测:检测sql语句有没有语法错误,是否符合sql规范
2.语义检测:检测sql语句涉及的对象是否存在。
3.检查共享池中是否存在相同的已经执行过的sql语句。
4.通过数据字典的统计信息,来计算最优执行计划。

5.拿到执行计划后就要去buffer cache中找数据,如果数据不在buffer cache中缓存着,那么就到数据库中将数据读进来。将数据保存到buffer cache 中,而执行计划也会被保存到library cache中去。

6.拿到数据后就要对数据进行操作后返回给用户,至此,在执行的这条sql要了哪些数据,改变了什么内容这些痕迹都会被保存到redo log buffer 中去,然后被归档到归档文件中。

7.这样硬解析的过程到此结束。

sql软解析解析的步骤

1.语法检测:检测sql语句有没有语法错误,是否符合sql规范
2.语义检测:检测sql语句涉及的对象是否存在。
3.检查共享池中是否存在相同的已经执行过的sql语句。如果有,则直接使用执行计划。

4.拿到执行计划后就要去buffer cache中找数据,如果数据不在buffer cache中缓存着,那么就到数据库中将数据读进来。将数据保存到buffer cache 中,而执行计划也会被保存到library cache中去。

5.拿到数据后就要对数据进行操作后返回给用户,至此,在执行的这条sql要了哪些数据,改变了什么内容这些痕迹都会被保存到redo log buffer 中去,然后被归档到归档文件中。

6.这样硬解析的过程到此结束。

三、检查共享池中是否存在相同的已经执行过的sql语句的方法:

  1.将sql文本转换成ASCII值,再将ASCII值通过hash函数转换成hash值,根据计算出来的hash到library cache中的chain链上去找到对于的bucket.比较bucket是否存在这条sql语句。至于library cache 的内部是使用链的数据结构的形式来管理内存的,library cache里面有很多的chain链,每个链上又挂着很多的bucket。bucket里面存放的是sql语句文本,执行计划等。

ORACLE之SQL语句内部解析过程【weber出品】的更多相关文章

  1. ORACLE数据库SQL语句的执行过程

    SQL语句在数据库中处理过程是怎样的呢?执行顺序呢?在回答这个问题前,我们先来回顾一下:在ORACLE数据库系统架构下,SQL语句由用户进程产生,然后传到相对应的服务端进程,之后由服务器进程执行该SQ ...

  2. 转:Oracle中SQL语句执行过程中

    Oracle中SQL语句执行过程中,Oracle内部解析原理如下: 1.当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法.表名.字 ...

  3. oracle 常用sql语句

    oracle 常用sql语句 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_sizefrom d ...

  4. Oracle和SQL语句的优化策略(基础篇)

    转载自: http://blog.csdn.net/houpengfei111/article/details/9245337 http://blog.csdn.net/uniqed/article/ ...

  5. oracle常用SQL语句(汇总版)

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...

  6. oracle中sql语句的优化

    oracle中sql语句的优化 一.执行顺序及优化细则 1.表名顺序优化 (1) 基础表放下面,当两表进行关联时数据量少的表的表名放右边表或视图: Student_info   (30000条数据)D ...

  7. Access、SQLServer、Oracle常见SQL语句应用区别

    Access.SQLServer.Oracle常见SQL语句应用区别 关劲松 PMP 如果要兼容Access.SQL Server.Oracle三个数据库版本:我们在编写SQL语句的过程中,尽量使用一 ...

  8. oracle 中SQL 语句开发语法 SELECT INTO含义

    oracle 中SQL 语句开发语法 SELECT INTO含义 在ORACLE中SELECT INTO是如何使用的,什么意思?和SQL SERVER的不一样?   和sqlserver的不一样sql ...

  9. oracle 共享SQL语句

    为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer poo ...

随机推荐

  1. Struts2 文件下载

    使用Struts2做一个简单的文件下载. 首先,导包,写配置文件就不说了. 进入主题. 文件下载操作类:FileDownload.java import java.io.InputStream; im ...

  2. HTML5 canvas图像绘制方法与像素操作属性和方法

    图像绘制方法 drawImage()        向画布上绘制图像.画布或视频 像素操作属性和方法 width                                返回 ImageData ...

  3. 移动端web页面使用position:fixed问题总结

    近期完成了一个新的项目(搜狐直播),其中又涉及到了 fixed(固定位置定位)的问题,在之前的文章<移动Web产品前端开发口诀——“快”>中已经阐述过我对 iScroll 的态度,所以在这 ...

  4. php单词里的大写字母

    $flag = preg_match("/[A-Z]/","abcDddd",$matches,PREG_OFFSET_CAPTURE);if($flag){ ...

  5. ionic中修改图标的问题

    有两种修改图标的方法,一种是手动配置,另外一种是使用命令 1.手动配置 把图标icon.png复制到resources\android\icon目录下 修改根目录的config.xml文件 <p ...

  6. Android中layout_weight的属性理解

    https://www.zybuluo.com/zzudhj/note/102067 在Android开发过程中,在编写布局文件经常会用layout_weight属性:从字面意思上看权重.比值.按比例 ...

  7. ural 1874 Football Goal

    #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> u ...

  8. C++11之后,对源代码增加了UTF8和UCS4的支持(Windows内部使用Unicode,因为nt内核用的是ucs2,那是89年,utf8到了92年才发明出来)

    在C++编程中, 我们常打交道的无非是编辑器和编译器, 对编辑器起来说,我们常遇到就是乱码问题, 比如中文注释显示或是保存不了等, 解决办法就是把你的文件保存成Unicode(UTF8). 对于编译器 ...

  9. iOS开发手记 - iOS9.3 Xcode7打包ipa文件在其他越狱机器上运行的方法和一些问题

    现在Xcode7可以用一个appleid就可以往手机上部署测试app,不再需要$99,这也是方便.但是要把app发给别人的手机上运行还是不行,除非别人的手机在你身边可以直接通过Xcode安装 关于怎么 ...

  10. Codeforces Round #316 (Div. 2) D、E

    Problem D: 题意:给定一棵n个点树,每个点有一个字母,有m个询问,每次询问某个节点x的子树中所有深度为k的点能否组成一个回文串 分析:一堆点能组成回文串当且仅当数量为奇数的字母不多于1个,显 ...