Oracle体系结构简要介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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_size
2.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、负责清理临时段,已释放空间。
触发条件是:定期被唤醒或者被其他事务主动唤醒。