Heim >Datenbank >MySQL-Tutorial >Oracle 数据库体系结构解析

Oracle 数据库体系结构解析

WBOY
WBOYOriginal
2016-06-07 15:53:231145Durchsuche

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

本文永久更新链接地址

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:完全删除Oracle数据库的方法Nächster Artikel:SQL 中的正则函数