是一个数据库管理系统,它提供了一种全面、开放、集成的方法来管理信息。算法
Oracle服务器由Oracle数据库和Oracle实例组成。sql
oracle数据库软件和Oracle数据库软件能够分开存储。oracle数据库软件通常存放在oralce服务器的本地硬盘上,而Oracle数据库实例所对应的文件(.ctl、.log、.dbf)通常存放在存储服务器上。数据库
一个经常使用的冗余结构以下图所示:缓存
体系结构图服务器
存储服务器网络
一个Oracle数据库能够对应多个数据库实例。对于数据库实例a、b,和数据库db1,若是有1万个用户链接数据库db1,则其中5千个用户链接到实例a,5千个用户链接到实例b(RAC技术)。数据结构
与Oracle相关联的内存结构包括:oracle
系统全局区(SGA):由全部服务器进程后台进程共享日志
程序全局区(PGA): 专用于每个服务器进程或后台进程,每个进程使用一个PGA。server
SGA是包含了数据库实例控制信息和数据的内存区。
其中,咱们须要着重关心的是共享池(Share Pool)和数据库缓冲区高速缓存(Database buffer cache)。
共享池:缓存可在各个用户之间共享的各个结构;(SQL语句以及对应的执行计划)
Streams 池:由Oracle Streams使用;
大型池:这是一个可选的区域,可为某些大型进程(如Oeacle的备份和恢复操做、I/O服务器进程)提供大量内存分配;
Java池:用于Java虚拟机(JVM)中特定会话的全部Java代码和数据;
数据库缓冲区高速缓存:缓存从数据库检索的数据块
重作日志缓冲区:高速缓存重作信息(用于实例恢复),直到能够将其写入磁盘中存储的物理重作日志
对于每个用户进程,oracle服务器都会创建一个与之对应的服务器进程。也就是说当前若是有100个用户与oracle服务器进行链接,那么,oracle将创建100个服务器进程来处理用户链接。
控制文件:记录了各文件存放的位置以及当前的运行状态;
数据文件:存放数据;
重作日志文件:对数据文件全部的修改记录;
系统监视器: 出现故障后,在启动实例时执行崩溃恢复任务,对共享池中存在的内存碎片进行整理。
进程监视器: 用户进程失败时,执行进程清理任务;对sql process进行整理。
数据库写进程:将数据库缓冲区高速缓存中修改后的的数据块写入数据文件;
日志写进程:
触发条件:
归档进程: 发生日志切换时将重作日志文件复制到归档存储器
检查点: 经过更新全部数据文件的和控制文件指出新的检查点
Oracle数据库服务器由Oracle数据库和Oracle实例组成,Oracle实例由系统全局区SGA的内存结构和后台进程组成。这些后台进程能够处理运行实例时所涉及到的大量后台任务。
客户端输入SQL语句
SQL语句经过网络到达数据库实例
server process接收SQL语句
3.1 判断SQL在Shared Pool中是否存在缓存
a. 若是有,则在shared pool中找到对应的sql语句以及对应的执行计划,而后再去执行
b. 执行3.1
3.1 SQL解析成执行计划,而后才能执行
解析流程:
a. 判断SQL语法是否存在问题
b. 判断SQL对应的表、视图是否存在
c. 判断用户是否有对应表、视图的权限
d. 判断如何执行(挑出最优的执行计划做为执行计划,最费时间,耗费CPU,I/O资源)
e. 选择最优执行方案生成执行计划
3.1 执行SQL
SQL Process根据SQL语句对应的执行计划,执行SQL,读取高速缓存,若是缓存中存在数据,则将缓存中的数据返回给用户,不然读取dbf中的数据并将数据存入缓存,而后将数据返回给用户。
逻辑读:从内存中读取数据
物理读:从物理磁盘中读取数据
缓存命中率: 命中率低必定有问题,命中率高不必定没问题。
比起缓存命中率,咱们更关心每秒物理读。
sql process 将表读到内存中,而后再对表进行修改。Oracle数据库对dbf文件的修改都会强日志。
数据库写进程(DBWn)负责将修改后的数据写入数据文件dbf。
日志写进程(LGWR)将日志写入日志文件。
(单一职责原则)
软解析: 从高速缓存中获取执行计划
硬解析:对SQL process接收到的SQL进行解析,判断sql语法,查询的表是否存在,是否有权限,判断如何执行(挑出最优的执行计划做为执行计划,最费时间,耗费CPU,I/O资源);
SQL Process执行sql后,会将数据放入高速缓存,再由DBRn和LGER分别写入数据文件dbf和日志文件log。所以,对于用户来讲,数据库响应快慢由SQL Process直接影响。哪怕DBRn和LOWR两个进程再繁忙,用户也是感觉不到的。
算法 :使用最近最少使用算法管理缓冲区
高速缓冲区状态