一、客户端通过监听连接到数据库,数据库开启一个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. 使用github创建博客

    本文主要介绍以下几个内容: 1.使用githbu创建自己的博客 2.将博客域名映射到自己的域名 3.如果写博客   一.使用github创建自己的博客 具体可参考https://pages.githu ...

  2. HTML5 canvas 绘制五星红旗

    这个例子并不是自己写的,在网上找的案列,仿照写的,,,自己真的公布董这些算法,看完这个例子还是有一点模糊,,, 如果谁看的比较明白,指点一下,,,多谢!!!! <!doctype html> ...

  3. linux常用命令(5)rmdir命令

    rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的.(注意,rm - r dir命令可代替rmdir,但是有很大危险性.)删除某目录时也必须具有对父目录的写权限.1.命令格 ...

  4. 摇滚吧HTML5!有声前端交互!(Hello, Jsonic!)

    软件工程师们摆弄1和0编写他们的乌托邦,音乐人门把玩12平均律上的音符构筑他们的伊甸园.最近,我偶然看了<蓝色骨头>这部电影,片中的男主角是位黑客,同时又兼具音乐创作的才华.在现实生活中, ...

  5. poj 3277 Mountains

    http://poj.org/problem?id=3227 #include <cstdio> #include <cstring> #include <cmath&g ...

  6. sqoop组件运行出错问题解决--com.mysql.jdbc.Driver

    sqoop list-tables --connect jdbc:mysql://192.168.11.94:3306/huochetoudalian --username xxx -password ...

  7. /usr/lib64/python2.6/site-packages/pycurl.so: undefined symbol: CRYPTO_set_locking_callback

    [root@frontend01 yum.repos.d]# cd /etc/yum.repos.d;wget http://rpms.adiscon.com/v8-stable/rsyslog.re ...

  8. class$1,class$2,class$innerclass中的$的含义

    class文件名中的$的含义如下:   $后面的类是$前面的类的内部类 内部类有以下两种情况: 1.普通的组合类形式,即在一个类内部定义一个普通的类  public class Outer { cla ...

  9. leetcode-Consecutive numbers

    Write a SQL query to find all numbers that appear at least three times consecutively. +----+-----+ | ...

  10. 记一次pending请求问题查找过程

    情景再现 近期发现网站访问变慢,经常会出现请求无法响应的问题,一个请求长时间没有返回,导致页面出现504(Gateway Timeout),我们使用的nodejs+ngnix(反向代理). 猜测原因 ...