一般来说,数据库处理SQL都会经过三个过程:解析(parse)、执行(exec)、返回结果(fetch)

1.解析

当用户发起一个SQL语句时,Oracle通过Server Process 接收SQL语句到达oracle实例,并在Shared pool 中的 Library Cache 查找是否存在该语句对应执行计划的缓存。

如果不存在则将该SQL进行硬解析(Hard parse),生成最优化的执行计划(plan),并将该执行计划等信息载入Library Cache。

如果存在则不经过硬解析,而是直接进行软解析(Soft parse),从而减少数据库的分析时间。

2.执行

server process首先在buffer cache中查找是否存在该执行计划所对应的数据块,如果存在,就直接进行DML操作(逻辑IO),否则应从数据文件中将数据块读取到buffer cache中,再进行DML操作(物理IO)。

3.返回结果

对于SELECT语句需要返回结果,首先看是否需要排序,如果需要则排序后返回给用户。

对于其他DML语句(insert/delete/update),则无需返回结果。当buffer cache中的数据块被修改时,server process将自动记录buffer的改变过程到SGA中的redo log buffer,最终分别由DBWR和LGWR进程负责将buffer cache中的脏数据块和redo log buffer中的日志写到磁盘中的data file和redo log file。

解析类型:硬解析、软解析、软软解析

对SQL的解析都需要频繁地访问数据字典

硬解析:

判断SQL语句是否存在语法、语义的问题

判断SQL语句所涉及的对象(表、视图)是否存在

判断执行SQL语句的用户对涉及的对象是否有权限

选择最优的执行方案,生成执行计划

其中生成执行计划最消耗系统资源(CPU、I/O、Memory),尤其是CPU和I/O资源

软解析:只判断SQL语句的语法、语义、对象权限,而不生成执行计划

软软解析:不解析SQL> select name,value from v$sysstat where name like 'parse%' ;

NAME VALUE

------------------------------ ----------

parse time cpu 1339

parse time elapsed 17374

parse count (total) 23639

parse count (hard) 3060

parse count (failures) 149

parse count (describe) 9

命中率:

命中率在Oracle数据库的多个地方都会被提起

例如当一个进程需要访问数据时,首先确定数据是否存在Buffer Cache中,如果存在(称为高速缓存命中),则直接读取数据(逻辑IO/内存读);如果不存在(称为高速缓存未命中),则需要在Buffer Cache中寻找足够的空间将磁盘上需要的数据块复制到Buffer Cache中(物理IO/硬盘读)。

命中率=逻辑IO/(逻辑IO+物理IO)*100%

注:如果命中率低肯定有问题,但命中率高不一定没问题(逻辑IO远高于物理IO,但物理IO仍旧很高的情况下)

可以通过操作系统命令vmstat、iostat查看当前系统的IO情况[oracle@ora11g ~]$ vmstat 1 5

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------

r b swpd free buff cache si so bi bo in cs us sy id wa st

1 0 0 374572 25260 788168 0 0 262 34 239 253 1 4 80 16 0

2 0 0 374556 25268 788172 0 0 0 36 909 1341 0 1 99 0 0

0 0 0 374556 25268 788172 0 0 0 0 876 1248 0 1 99 0 0

0 0 0 374556 25268 788172 0 0 16 80 974 1495 0 1 99 0 0

0 0 0 374556 25276 788164 0 0 0 48 966 1428 0 1 99 0 0

[oracle@ora11g ~]$ iostat 1 5

Linux 2.6.18-308.el5 (ora11g.example.com) 07/17/2013

avg-cpu: %user %nice %system %iowait %steal %idle

1.00 0.00 3.85 15.19 0.00 79.96

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

sda 33.72 1551.26 202.49 1052263 137352

sda1 0.10 2.58 0.01 1749 4

sda2 22.27 1256.66 141.92 852432 96271

sda3 0.07 2.37 0.00 1610 0

sda4 0.01 0.02 0.00 11 0

sda5 2.17 58.06 4.54 39382 3080

sda6 2.40 60.32 15.53 40920 10532

sda7 2.85 77.55 16.47 52605 11173

sda8 3.01 76.16 8.77 51663 5949

sda9 0.80 17.03 15.25 11554 10343

avg-cpu: %user %nice %system %iowait %steal %idle

0.00 0.00 0.55 0.00 0.00 99.45

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

sda 5.00 32.00 128.00 32 128

sda1 0.00 0.00 0.00 0 0

sda2 0.00 0.00 0.00 0 0

sda3 0.00 0.00 0.00 0 0

sda4 0.00 0.00 0.00 0 0

sda5 0.00 0.00 0.00 0 0

sda6 1.00 0.00 32.00 0 32

sda7 2.00 32.00 32.00 32 32

sda8 1.00 0.00 32.00 0 32

sda9 1.00 0.00 32.00 0 32

avg-cpu: %user %nice %system %iowait %steal %idle

0.26 0.00 0.77 0.26 0.00 98.71

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

sda 2.00 0.00 104.00 0 104

sda1 0.00 0.00 0.00 0 0

sda2 2.00 0.00 104.00 0 104

sda3 0.00 0.00 0.00 0 0

sda4 0.00 0.00 0.00 0 0

sda5 0.00 0.00 0.00 0 0

sda6 0.00 0.00 0.00 0 0

sda7 0.00 0.00 0.00 0 0

sda8 0.00 0.00 0.00 0 0

sda9 0.00 0.00 0.00 0 0

avg-cpu: %user %nice %system %iowait %steal %idle

0.26 0.00 0.26 0.00 0.00 99.48

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

sda 4.00 0.00 32.00 0 32

sda1 0.00 0.00 0.00 0 0

sda2 0.00 0.00 0.00 0 0

sda3 0.00 0.00 0.00 0 0

sda4 0.00 0.00 0.00 0 0

sda5 1.00 0.00 8.00 0 8

sda6 1.00 0.00 8.00 0 8

sda7 1.00 0.00 8.00 0 8

sda8 0.00 0.00 0.00 0 0

sda9 1.00 0.00 8.00 0 8

avg-cpu: %user %nice %system %iowait %steal %idle

0.00 0.00 0.78 0.00 0.00 99.22

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

sda 13.00 160.00 208.00 160 208

sda1 0.00 0.00 0.00 0 0

sda2 4.00 0.00 80.00 0 80

sda3 0.00 0.00 0.00 0 0

sda4 0.00 0.00 0.00 0 0

sda5 0.00 0.00 0.00 0 0

sda6 1.00 0.00 32.00 0 32

sda7 3.00 64.00 32.00 64 32

sda8 4.00 96.00 32.00 96 32

sda9 1.00 0.00 32.00 0 32

也可以通过v$buffer_pool_statistics视图查看命中率的情况SQL> SELECT NAME, PHYSICAL_READS, DB_BLOCK_GETS, CONSISTENT_GETS,(1-(PHYSICAL_READS/(DB_BLOCK_GETS+CONSISTENT_GETS)))*100 "Hit Ratio" FROM V$BUFFER_POOL_STATISTICS WHERE NAME='DEFAULT';

NAME PHYSICAL_READS DB_BLOCK_GETS CONSISTENT_GETS Hit Ratio

-------------------- -------------- ------------- --------------- ----------

DEFAULT 12786 14986 158305 92.6216595

oracle数据库sql的执行过程,Oracle体系结构之SQL语句的执行过程相关推荐

  1. 创建oracle 数据库表空间,角色,用户的sql语句

    创建oracle 数据库表空间,角色,用户的sql语句 1.创建角色 CREATE ROLE "QIUDINGROLE" NOT IDENTIFIED; GRANT "C ...

  2. exp导oracle数据库,使用exp/imp 在oracle数据库间导数据

    最近工作需要将oracle数据库的表数据导出到另一个oracle数据库表,找到了oracle 自带的命令行,并记录下导数据过程. 导数据过程分以下几步: 假设源数据库为A,目标数据库为B 1.在B上通 ...

  3. 删除oracle数据库的三种方法,oracle数据库的删除方法详解

    oracle数据库的删除方法详解 1.图形界面删除 练习之前记得创建快照 执行命令之前要保证数据库属于open状态 SQL> alter database open; [oracle@local ...

  4. Oracle数据库的乘号是什么,(Oracle数据库设计实验指导书yk.doc

    (Oracle数据库设计实验指导书yk Oracle数据库设计实验指导书 <Oracle 数据库设计>课程实验 一.本实验课在培养实验能力中的地位及作用 Oracle 数据库设计是软件工程 ...

  5. linux数据库实例开机启动,Oracle数据库之Linux下实现Oracle数据库单实例开机自启动设置...

    本文主要向大家介绍了Oracle数据库之Linux下实现Oracle数据库单实例开机自启动设置,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 步骤思路: 1:查看ORACLE_ ...

  6. oracle数据库 cmd,cmd命令操作Oracle数据库

    //注意cmd命令执行的密码字符不能过于复杂 不能带有特殊符号 以免执行不通过 譬如有!@#¥%--&*之类的  所以在Oracle数据库设置密码是不要太复杂 /String Database ...

  7. oracle删除表的一个字段的数据库,学会Oracle数据库删除表字段和Oracle数据库表增加字段方法...

    Oracle数据库添加字段的语法:alter table tablename add (column datatype [default  value][null/not null],-.); Ora ...

  8. Oracle数据库的并行查询,解决Oracle数据库并行查询出错的方法

    当我们在使用Oracle数据库的时候会发现Oracle数据库并行查询出错这一问题,那么你知道如何解决Oracle数据库并行查询出错吗?下面就是解决Oracle数据库并行查询出错的方法介绍. Oracl ...

  9. oracle数据库异常---SP2-1503: 无法初始化 Oracle 调用界面 SP2-1503: 无法初始化 Oracle 问题的解决办法

    oracle数据库异常---SP2-1503: 无法初始化 Oracle 调用界面 SP2-1503: 无法初始化 Oracle 问题的解决办法 win7 下   cmd  运行   sqlplus  ...

  10. Oracle数据库中的方案,学习Oracle数据库_理解Oracle数据库中的方案

    理解数据库.表空间.数据文件之间的关系. 每个表空间由一个或多个数据文件组成.数据文件用于在物理上存储表空间中所有逻辑结构的数据.表空间中数据文件的大小之和就是表空间的存储容量(图中系统表空间存储容量 ...

最新文章

  1. YOLOV4知识点分析(一)
  2. Easy ui 多表头 数据结构
  3. bug带来的兄弟感情
  4. 应用服务攻击工具clusterd
  5. 51Nod 1013 3的幂的和 快速幂 | 乘法逆元 | 递归求和公式
  6. pythondockerapi_docker-py 用Python调用Docker接口的方法
  7. java md2_java中加密的实现方法(MD5,MD2,SHA)
  8. 笔试面试收获(持续更新中)
  9. java 配置写成表达式_Java的正则表达式之小结
  10. AI医疗智能问答算法赛,超二十万大奖等你来拿
  11. Qt4.7中 默认的构造函数
  12. 【推荐实践】阿里文娱面向用户增长的信息流分发机制
  13. python和java反射_python实现反射功能
  14. jQuery构造函数init参数分析(三)
  15. Unity资源替换工具,旧模型替换新模型,替换GUID,替换meta文件,文件丢失等问题
  16. python二元函数图像在线绘制_用python绘制二元函数
  17. sql 字段逗号分割
  18. 解决 git 文件夹不显示绿色图标和红色图标的问题
  19. 聊一聊SpringBoot中酷炫的Banner
  20. oracle修改用户system密码忘记,Oracle System密码忘记 密码修改、删除账号锁定lock (转) - mano...

热门文章

  1. 阿里《Java开发手册》最新嵩山版发布!
  2. VB中KeyCode常数用法 VB 按键
  3. C语言,你真的弄懂了么?
  4. Linux Shell编程之输入输出重定向
  5. CDH6报错解决全记录
  6. node.js入门小案例
  7. EntityFramework进阶——继承
  8. 备案php代码,备案查询API PHP代码
  9. linux用户的配置文件保存在哪里,使用配置文件(.settings、.config)存储应用程序配置...
  10. php对扑克牌进行排序,C#代码实现扑克牌排序的几种方式