ORACLE之SQL语句内部解析过程【weber出品】
一、客户端通过监听连接到数据库,数据库开启一个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出品】的更多相关文章
- ORACLE数据库SQL语句的执行过程
SQL语句在数据库中处理过程是怎样的呢?执行顺序呢?在回答这个问题前,我们先来回顾一下:在ORACLE数据库系统架构下,SQL语句由用户进程产生,然后传到相对应的服务端进程,之后由服务器进程执行该SQ ...
- 转:Oracle中SQL语句执行过程中
Oracle中SQL语句执行过程中,Oracle内部解析原理如下: 1.当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法.表名.字 ...
- oracle 常用sql语句
oracle 常用sql语句 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_sizefrom d ...
- Oracle和SQL语句的优化策略(基础篇)
转载自: http://blog.csdn.net/houpengfei111/article/details/9245337 http://blog.csdn.net/uniqed/article/ ...
- oracle常用SQL语句(汇总版)
Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...
- oracle中sql语句的优化
oracle中sql语句的优化 一.执行顺序及优化细则 1.表名顺序优化 (1) 基础表放下面,当两表进行关联时数据量少的表的表名放右边表或视图: Student_info (30000条数据)D ...
- Access、SQLServer、Oracle常见SQL语句应用区别
Access.SQLServer.Oracle常见SQL语句应用区别 关劲松 PMP 如果要兼容Access.SQL Server.Oracle三个数据库版本:我们在编写SQL语句的过程中,尽量使用一 ...
- oracle 中SQL 语句开发语法 SELECT INTO含义
oracle 中SQL 语句开发语法 SELECT INTO含义 在ORACLE中SELECT INTO是如何使用的,什么意思?和SQL SERVER的不一样? 和sqlserver的不一样sql ...
- oracle 共享SQL语句
为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer poo ...
随机推荐
- SelectObject
CPen* SelectObject( CPen* pPen ); CBrush* SelectObject( CBrush* pBrush ); virtual CFont* SelectObjec ...
- 【Jquery EasyUI + Servlet】DataGrid,url请求带中文出现乱码的解决方案
demo.jsp: <% String name = "乱码"; %> $(function(){ $('#dg').datagrid({ url: 'DemoServ ...
- PHP安全设置(转载)
大家都知道PHP已经是当前最流行的Web应用编程语言了.但是也与其他脚本语言一样,PHP也有几个很危险的安全漏洞.所以在这篇教学文章中,我们将大致看看几个实用的技巧来让你避免一些常见的PHP安全问题. ...
- 03 - 替换vtkDataObject中的GetProducerPort()方法 VTK 6.0 迁移
VTK6 引入了许多不兼容的变.其中之一是删除vtkDataObject中所有有关管道的方法.其中的一个方法就是GetProducerPort(). 一般,先前使用这个方法如下例子: vtkPolyD ...
- 安卓4.2原生rom状态栏显示运营商
前言:要调整状态栏布局,需反编译systemui.apk.单卡机修改status_bar.xml和signal_cluster_view.xml,双卡机修改gemini_status_bar.xml和 ...
- 转:Yelp开发团队发布内部网站设计指南
原文来自于:http://www.infoq.com/cn/news/2014/02/yelp-style-guide 近日,Yelp开发团队在博客发布消息:Yelp公开了内部网站设计指南.这份文档此 ...
- 转:Raspberry Pi(树莓派)试用小记
近期入手一树莓派卡片机,体验了一下它的强大,写篇报告,推广一下哈! 机器截图: 基础参数: CPU:700 MHz, ARM11 内存:512M(还有一种是256M的) 支持GPU加速(高清视频无压力 ...
- 方便john破解linux密码批处理
Title:方便john破解linux密码批处理 -- 2011-11-23 17:31 自定义文件HASH名和字典名批处理(单一文件): @echo offcolor 0asetlocal enab ...
- 检测IIS应用程序池对象 回收
function RecycleYourAppPool([string] $poolName){ Import-Module WebAdministration #获取所有Application Po ...
- log4jdbc
log4jdbc http://www.blogjava.net/badqiu/archive/2010/08/20/329464.html http://blog.csdn.net/sfdev/ar ...