热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle数据库体系结构解析

Oracle数据库服务器大致分为两个主要部分既1.Oracleinstance(数据库实例上半部分)2.database(数据库下半部分)。

Oracle数据库服务器大致分为两个主要部分 既1.Oracle instance (数据库实例 上半部分)2.database (数据库 下半部分)。

Oracle 数据库体系结构图 如下图所示,

Oracle 数据库体系结构解析

纵观上图可知,Oracle数据库服务器大致分为两个主要部分 既1.Oracle instance (数据库实例 上半部分)2.database (数据库 下半部分)。

用户不能直接连接到数据库,而是用户先发出一个用户进程, 用户进程和Oracle服务器发出的服务器进程交互,然后服务器进程再和实例交互,最后实例和底层数据库交互,从而实现用户和数据库的交互。具体过程看下图:

Oracle 数据库体系结构解析

下面详述体系结构中各个组成部分的具体功能和特点

1.首先先有的整体的认识:

oracle 服务器=实例+数据库

实例=SGA(实例内存)+后台进程

内存=SGA+PGA

SGA=database buffer cache (数据库高速缓存区缓存)+share pool +redo log buffer

2.实例内存SGA结构:前三个是必选的,其余是可选的。

1)database buffer cache(数据库高速缓存区缓存) :是用来存放执行SQL的工作区域 (1)存储从数据文件中获得的数据块的镜像(2)当获取和更新数据的时候能够大幅度提高性能,因为数据库块的镜像会保存一段时间,等下次再执行有关这个块的操作时,可直接在缓存区操作(3)能够动态调整大小,也可以对其进行自动管理。

2)Redo log buffer (在线日志缓冲区): ()记录所有数据库的块的改变,主要用于恢复,大小由log_buffer 决定, 在对数据库块进行操作之前,会把所做的所有操作记录这里。

3)share pool (共享池):包括library cache (库高速缓冲区)和database dictionary cache(数据字典缓存) ,前者主要存储最近使用的SQL和pl/sql 语句的信息(存一次 多次使用,防止硬解析,) 后者主要存储最近使用的定义,如表、索引、列、用户权限、和其他数据库对象。

4)Large pool : 是系统全局区的一个可选的部分,是共享服务器的会话内存,以减轻在共享池中的负担,可动态的改变大小,也可以自动管理。

5)Java pool: java 命令的分析,可动态的改变大小,也可以自动管理

6)Stream pool : 流相关的数据在流池中,提高缓存效果。

3.接下来介绍实例后台进程:

1) pmon (进程检测进程) :当会话异常终止时 清除失败的进程 包括 回滚事务、释放锁、动态注册监听器,

2) Smon (系统检测进程):实例恢复(前滚所有重做日志中的改变、回滚没有提交的事务),释放临时表空间。

3) DBWn(数据写进程): 将数据库高速缓存区缓存中的脏块,刷新到磁盘数据文件中, 写的条件:1,发生检查点2,脏缓存到达极限值(1/4)、没有可用的缓存区时。

4) LGWR(日志写进程)将redo log buffer 中的redo 刷新到磁盘日志文件中, 写的条件:1,commit 的时候,,2.达到1/3满时,3.大小达到1M时,4.每搁三秒 5.在DBWR进程写数据之前。

5) CKPT (检查点进程) : 给dbwn 信号,使它开始写脏块。更新数据文件头和控制文件,(就是把scn号更新为最新的)3秒一次。 常说的一致性 要保证三个scn 号一致,包括数据文件头的scn号,control files 记录数据文件头的scn号,control files 记录的总的scn号。检查点进程 触发的越快,DBWR 写的就越快,这样内存中的缓存区脏块就越少,进而恢复实例所用的时间就会越少,但是频繁的I/O导致性能下降,所以性能和速度是矛盾的;

6) ARCn (归档进程):将联机重做日志文件归档到(也可以理解为复制)归档日志文件 ,如果开启了归档模式 重做日志文件 一般分为两个组,这两组是循环复写的,一个组用来记录对数据库的修改,另一组进行归档。但是如果记录修改的那组已经写满,这样本来该再去写另一组,但是另一组还没有完成归档,这就会出问题,数据库夯住了。

本文永久更新链接地址

推荐阅读
author-avatar
言_信者
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有