当前位置:文档之家› Oracle体系结构简要介绍

Oracle体系结构简要介绍

Oracle体系结构简要介绍1.o racle数据库软件介绍oracle数据库包括:oracle数据库和oracle实例两个东西。

Oracle实例指的是:oracle 启动后占用的内存和后台进程的总称;oracle数据库是实例和数据文件的总称。

数据库关闭后数据库实例就不存在了,数据库文件一直存在。

Oracle是由oracle软件和oracle数据库组成,oracle数据库主要指的是三类文件,分别是控制文件(*.ctl)、日志文件(*.log)、数据文件(*.dbf)。

2.o racle中内存结构介绍oracle数据库启动起来后有两大内存结构,一是SGA(系统全局区),二是PGA,其中SGA 是用来共享的,PGA是用来给进程使用的。

2.1SGA介绍Sga是就是oracle系统的全局区,在linux和nuix中用ipcs -m命令来查看占用的共享内存。

Sga包括:共享池(shared pool)、stream池(stream pool)、大型池(large pool)、java 池、数据库缓冲区高速缓存(buffer cache)、重做日志缓冲区(log buffer)。

其中主要的缓冲区包括:共享池(shared_pool)、数据库高速缓存区(db_cache)、重做日志缓冲区(log_buffer),最容易出问题的也是这三个。

在plsql中可以通过show parameters sga 或者show sga 来查看sga的参数配置。

2.1.1共享池(shard pool)共享池(shard pool)主要用来缓存SQL语句以及所对应的SQL执行计划。

参数是shared_pool_size。

SQL语句的执行计划存放在shard pool中,下次去执行的时候先到shard pool中去找,这样大大减少资源的消耗。

SQL语句的解析以及执行计划的缓存、shard pool的访问,都是有server process 来做的。

2.1.2数据库缓冲区高速缓存(buffer cache)数据库缓冲区高速缓存(buffer cache)主要用来缓存DBF的数据,这些数据通过SQL语句的执行计划得来的。

参数是db_cache_size 。

数据库缓存区高速缓存对应的是数据库写进程(DBWN),数据库写进程(DBWN)对应的是数据文件和控制文件。

2.1.3重做日志缓冲区(log buffer)重做日志缓冲区(log buffer)主要用来存放日志的。

参数是log_buffer。

重做日志缓冲区对应的是日志写进程(LGWR),日志写进程(LGWR)对应的数据文件是重做日志文件,也就是日志文件。

2.1.4stream 池(stream pool)stream 池(stream pool)是由oracle的stream来使用的。

参数是streams_pool_size。

2.1.5大型池(large pool)大型池(large pool)用于为某些大型的进程提供大量的内存分配,如数据备份等。

参数是:lorge_pool_size2.1.6java 池(java pool)java 池(java pool)用于java虚拟机中特定会话的所有java代码和数据,参数是:java_pool_size。

2.1.7修改SGA参数的语法:在10g和11g这2个版本中,空间的大小一般都是oracle自动划分出来的,也可以手动设置,它们都是动态的,所以更改后不会立即生效,需要重启,使用命令:alter system set sga_max_size=xxxM scope=spfile;和alter system set sga_target = xxxM scope=spfile;sga_max_size必须大于等于sga_target,并且在设置sga的值大小时候是根据总内存大小的60%的70%-80%,pga的大小是根据总内存大小的60%的20-30%。

2.2PGA介绍Pga是用来个进程使用的,在oracle10g中不仅前台进程分配了PGA空间,后台进程也分配了PGA空间。

它是私有全局区,主要用来存放每个进程来了后单独存放内存区域。

2.3oracle 实例介绍把oracle启动起来后分配的内存和进程统称为oracle实例,也就是说oracle启动起来后就会产生一个实例,当oracle数据库关闭后数据库实例就会消失了。

一个数据库可以对应多个实例,如oracle,一般是双数,如2、4、6、8,8台机器用的很少。

3. oracle中进程介绍oracle中有六大进程,分别是:检查点进程(CKPT)、系统监视器(SMON)、进程监视器(PMON)、数据库写进程(DBWN)、日志写进程(LGWR)、归档进程(ARCN)。

Oracle中进程共分为三类,分别是用户进程、服务进程、后台进程。

其中后天进程伴随实例的启动而启动,他们主要是维护数据库的稳定,相当于一个企业中的管理者及内部服务人员,他们并不直接给用户提供服务。

3.1 数据库写进程(DBWN)Database write(DBWN)数据库写进程,它的作用是把SGA中被修改的数据同步到磁盘文件中,保证Buffer cache 中有足够的空闲数据块的数量。

用来处理数据库缓冲区的数据写到硬盘。

触发条件是:1.检查点;2.一个服务进程在设定的时间内没有找到空闲块;3、每隔三秒钟自动唤醒一次。

设置:DB_WRITER_PROCESSES用来定义DBWn进程数量。

(commit命令只是把记录修改写入日志文件,不是把修改后的数据写入数据文件,下面还会提到。

)从buffer cache中将数据写入DBF的时候,是由DBWN进程来完成的。

3.2 日志写进程(LGWR)Log write(LGWR)日志写进程,它的作用是把log buffer中的日志内容写入联机的日志文件中,释放log用户的buffer空间。

触发条件是:1.用户发出commit命令。

(在oracle中称为快速提交机制(fast commit):把redo log buffer中的记录写入日志文件,写入一条已提交的记录);2.三秒钟定时唤醒;3.log buffer 超过1/3,或者日志数据量超过1M;4.DBWR进程触发:DBWR试图将脏数据写入磁盘先检查它的相关rode记录是否写入联机日志文件,如果没有就通知LGWR进程,在oracle中称为提交写机制(write ahead):redo记录先于数据记录被写入磁盘。

将rode log buffer中的日志写入到redo log日志文件里去,是由LGWR来完成的。

3.3 检查点进程(CKPT)Checkpoint(CKPT)检查点进程,它的作用是维护数据库的一致性状态,检查点时刻检查数据文件盒SGA中的内容一致,这不是一个单独的进程,要和前面两个进程一起工作,DBWR写入脏数据,同事触发LGWR进程。

用于将数据库当前的状态写在控制文件和数据文件的头部。

CKPT更新控制文件中检查点的记录。

触发条:日志切换(log switch)会触发检查点。

3.4 进程监视器(PMON)Process monitor (PMON)维护用户进程或者进程监视器,它的作用是1、发现用户进程异常终止,并进行清理。

释放占用资源。

(清理异常终止用户使用的锁)。

2、向监听程序动态注册实例。

触发条件是:定时被唤醒,其他进程也会主动唤醒它。

3.5 系统监视器(SMON)System monitor(SMON)实例维护或者系统监视器,它的作用是1、负责实例恢复,前滚(Roll Forward)恢复到实例关闭时刻的状态,使用最后一次检查点后的日志进行重做。

这时包括提交和未提交的事务。

打开数据库进行回滚(roll back),回滚未提交的事务。

(oracle承诺commit之后的数据不会丢失,现在我们可以大致的了解oracle 是如何实现这个承诺的,以及在数据安全性和数据库性能之间的平衡选择);2、负责清理临时段,已释放空间。

触发条件是:定期被唤醒或者被其他事务主动唤醒。

3.6 归档进程(ARCN)Archive (ARCN)归档操作或归档进程,它的作用是发生日志切换时把写满的联机日志文件拷贝到归档目录中。

触发条件是:日志切换时被LGWR唤醒。

4.o racle中三大文件介绍oracle中的三大文件分别是:数据库文件(*.dbf)、控制文件(*.ctl)和日志文件(*.log)。

数据文件。

4.1 数据文件(dbf)数据文件中存放的是用户提交后的相关数据,都是commit提交后实实在在的数据。

4.2 控制文件(ctl)控制文件中存放了一个数据库的物理结构信息(包括数据库有多少个数据文件,分别存放在哪里等信息),数据库当前运行的状态信息等。

4.3 日志文件(log)日志文件中存放的是oracle用户对数据库所做的所有的操作,全部会以日志的方式记录到数据文件中,也就是说日志文件里面记录着数据文件的每一个数据库所有变化的过程。

5.用户进程介绍(server process)当用户访问数据库的时候就会创建一个server process,并且为server process 创建一个PGA内存。

Server process 是实例的一个进程。

从DBF中将数据读取到buffer cache中这个过程是由server process来完成的。

DBWN和LGWR都是后台进程,server process 是前台进程,也就是说server process只是负责将数据从DBF中读取出来存放在内存中进行修改,将内存(buffer cache)中的数据写回DBF不是server process来完成的,而是由有DBRN来完成的。

Server process是直接为用户服务的,用户把SQL语句给了server process,然后server process做了以下几件事情:第一、对SQL语句进行解析,将SQL语句变为执行计划;第二、然后去执行解析好的执行计划;第三、获取相关数据,将数据存放在buffer cache中;第四、将获取到存放在buffer cache 中,最后将buffer cache中的数据返回给用户。

SQL语句对标的修改都是在内存里面修改的,通过server process来完成,所有的日志都是server process产生的。

将修改完成的数据从内存(buffer cache)写入到数据文件DBF中是由DBWn来完成的,DBWN进程负责将server process修改的数据写回磁盘,DBWN是后台进程,server process 是前台进程。

Server process 只负责读取数据,server process是直接给用户提供服务的,要是server process慢的话用户就会感觉数据库比较慢,所以我们希望server process做最有意义的事情,后台进程能做的事情尽量给后台进程来完成,不要给server process来完成。

相关主题