一、Oracle数据库的体系结构

Oracle 体系结构简要如下图

6555a7f4c8b94b26942f290488580584

EM(Enterprise Manager)是Oracle实际的基于Java的管理工具,可通过浏览器访问数据库的管理界面,SQL PLUS可以访问数据库的数据信息。

二、SQL语句执行过程

1、一些背景知识

(1)ORACLE数据库启动的时候,Oracle首先在内存中划出一段空间启动一堆进程,进程以及该内存区域统称为Oracle实例

(2)Oracle实例关联的基本内存结构包括:

(3)系统全局区(SGA)由所有服务器进程和后台进程共享,对于所有进程来说,内存空间共享,实际工作中会有一定区域的分配

(4)程序全局区(PGA)专用于某一个服务进程或者后台进程,每一个进程使用一个PGA,Oracle新版本,存在一个很大空间的PGA空间,每启动一个进程,会将一定PGA空间分给对应的进程,重点是前台进程和PGA的关系

(5)Oracle数据库三种文件组成

  • .ctl文件 控制文件

  • .log文件 日志文件

  • .dbf 数据文件

2、相关知识

523e7f190e8d45168d14c8f92232ea45

Server process是实例的进程,主要在SQL处理时执行部分功能

SQL语句的执行过程

(1)客户端输入SQL语句

(2)SQL语句经过网络到达数据库实例

(3)Server process拿到SQL语句之后进行解析,首先应该是去shared pool查找是否存在对应的语句以及执行计划,如果没有找到,server process自己解析进行下一步去执行解析,解析步骤如下:

  • SQL process判断语句语法是否正确

  • 访问的表是否具有访问权限

  • SQL语句涉及的表以及视图数据库有没有

  • SQL语句应该如何执行->寻找最优的执行方法,然后生成执行计划

(4)server process根据SQL语句的执行计划去DBF取出数据,放到buffer cache,然后返给用户,在此之前是server process首先寻找的是buffer cache,如果存在则直接在buffer cache取出数据。

三、SQL语句解析类型——硬解析和软解析

1、硬解析和软解析

Oracle数据信息全部存储在数据字典中,Oracle的解析有两种,软解析以及硬解析

(1)硬解析 hard parse 没有缓存进入硬解析

  • 硬解析内容:语法错误,对象存不存在,用户是否有操作权限

  • 硬解析在n种执行方案中找出最优的执行方案最消耗资源以及损耗时间

(2)软解析 soft parse 有缓存

  • SQL语句语法

  • SQL所对应一些对象的权限满不满足

软硬解析的区别在于,软解析不必挑选最优方案

均要频繁访问数据字典信息(对象权限信息),所以oracle将数据字典信息放置到 share pool中跟library cache放置在一块

2、shared pool功能

shared pool 缓存SQL语句以及SQL语句的执行计划

  • parse 解析

  • excel 执行

  • fetch 取回数据

3、shared pool组成

shared pool是一块内存池,内部被分成比较小的区块,

  • free部分 空闲部分

  • library cache 库缓存,保存的是SQL语句以及SQL语句的执行计划

  • row cache 缓存数据字典信息

4、SQL语句

(1)查看各个内存块的大小

  • library cache

  • select * from v$sgastat a where a.Name='library cache

  • free memory

  • select * from v$sgastat a where a.pool='shared pool'and a.name='free memory';

  • row cache

  • select * from v$sgastat a where a.Name='row cache';

(2)SQL

select name,value from v$sysstat where name like 'parse%';

a1e5ff9e43d14a5abbbe4b45085f0697

整理不易,喜欢的朋友点个赞呗!!!

欢迎工作一到五年的Java工程师朋友们加入 Java架构度寒冬:962992162

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!