实例进程结构

------
(1)系统监视器SMON
起初的任务是安装和打开数据库。SMON通过查找和验证数据库控制文件来安装数据库。此后它通过查找和验证所有数据文件和联机日志文件打开数据库。
一旦打开数据库并使数据库处于使用状态后,SMON就负责执行各种内部管理任务,如合并数据文件中的可用空间。
(2)进程监视器PMON
监视所有服务器进程,并检测会话中的任何问题,如果会话异常终止,PMON将销毁服务器进程,将其PGA内存返回给操作系统的空闲内存池,并回滚任何尚在进行的未完成的事务。
如果会话异常终止,那么活动的事物会发生什么事情呢?PMON后台进程将回滚活动事务。
(3)数据库写入器DBWn
会话通常并不将数据写入磁盘,会话将数据写入数据库缓冲区缓存中的缓冲区。由数据库写入器负责随后将缓存区写入磁盘。
DBWn将脏缓冲区从数据库缓冲区缓存写入数据文件。但也并非缓冲区一旦变脏了,就相应地写入此缓冲区。相反它会尽可能减少写入缓存区的数量
DBWn用于选择脏缓冲区来写入磁盘(将清理缓冲区)的算法是:只选择最近未使用的缓冲区。
DBWn根据极懒算法执行写入:尽可能少,再尽可能少。在以下4种情况下,DBWn将执行写操作:没有任何可用缓冲区,脏缓冲区过多,遇到三秒钟超时或遇到检查点。
唯一绝对需要检查点的时刻是:关闭了数据库,关闭了实例。检查点将所有脏缓冲区写入磁盘,这就实现了缓冲区缓存与数据文件的同步,实例与数据库的同步。
在通常的运行状态下,数据文件始终是过时的:他们缺少多个更改 (提交的更改或未提交的更改)这不会带来问题:因为缓存区缓存中的数据块副本是最新的,而会话使用的正是这些数据块。
强制设置检查点:alter system checkpoint;
局部检查点:局部检查点强制DBWn写入仅包含一个或多个数据文件(而不是整个数据库)的块的所有脏缓冲区:在数据文件或有表空间脱机时;在将表空间置于备份模式时;或在将表空间设置为只读时。
与完全检查点相比,这些检查点力度较小,每次在相关事件发生时自动执行。
总之,DBWn按极懒算法执行写入:尽可能少,再尽可能少。但出现检查点的情况例外:将所有脏缓冲区尽快写入磁盘。
(4)日志写入器LGWR
LGWR将日志缓冲区的内容写入到磁盘上的联机日志文件中,将日志缓冲区写入联机重做日志文件的过程通常称为“日志缓冲区转储”
为了保证不丢失任何工作,必须在最大程度减少延迟的情况下将这些变更向量写入磁盘。为此,LGWR将日志缓冲区的内容几乎实时地传输到联机重做日志文件中。当会话发出commit时。
LGWR会实时写入:在LGWR将缓冲区写入磁盘时,会话将挂起,只有此时才将事务记录为已经提交。
LGWR是oracle体系结构中最大的瓶颈之一。dml的速度不可能超过LGWR将变更向量写入磁盘的速度。在三种情况下,LGWR将转储日志缓冲区:会话发出commit,日志缓冲区占用率达1/3,数据库写入脏缓冲区。
第一种情况是提交时写入。为了处理commit,服务器进程在日志缓冲区插入提交记录。在LGWR将日志缓冲区转储到磁盘前,将挂起会话,只有此时写操作完成时,才能将提交完成的消息返回给会话,服务器进程才能继续工作。
这将确保事务永不丢失,已提交事务的每个变更向量都可以在磁盘上的重做日志上得到,并可以在此后应用于数据文件备份。因此,如果数据库被损坏,那么可以通过备份进行还原,而且可以重做自备份以来执行的所有工作。
第二种情况是日志缓冲区的占用率达到1/3,此时,LGWR会将日志缓冲区转储到磁盘。
第三种情况是DBWn需要将脏缓冲区从数据库缓冲区写入到数据文件中,在执行此操作前,它会通知LGWR将日志缓冲区转储到联机重做日志文件中。这样做可以确保:始终可以反转未提交的事务。
DBWn完全可能将未提交的事物写入数据文件,只要一定能够获得反转事务所需的撤销数据,就不成问题。在生成撤销数据时,也会生成变更向量。在更新数据文件前,这些已经在重做日志文件中,如有必要,可以重建回滚事务所需的撤销数据。
(5)检查点进程CKPT
崩溃后必须从重做日志提取与脏缓冲区(出现故障时,尚未由DBWn写入磁盘的缓冲区)对应的所有变更向量,并将其应用于数据块,这就是恢复过程。频繁的检查点确保:可以将脏缓冲区快速写入磁盘,从而最大程度
地减少崩溃发生后必须应用的重做量,最大程度地减少恢复数据库所用的时间,CKPT负责发出普通检查点的信号。
从8I开始,DBWn用增量检查点替换了完全检查点,增量检查点机制要求DBWn以固定速率写出脏缓冲区,因此,DBWn和LGWR之间始终有一个可以预见的差距。与早先的完全检查点机制相比,增量检查点有助于获得更平稳的性能,恢复时间也更易于难测。
CKPT不再必须发出完全检查点,但是,它必须跟踪重做流中增量检查点的位置,如有必要,将指示DBWn写出一些脏缓冲区,以便使检查点位置前移。当前检查点的位置,也称RBA(重做字节地址),是发生实例故障时重做流中必须由此开始的恢复位置。
CKPT使用当前检查点位置不断更新控制文件。
(6)可管理性监视器MMON
是数据库的很多自我监视和自我调整功能的支持进程。
此数据库实例收集有关活动和性能的大量统计数据。这些统计数据收集到SGA中,通过发出SQL查询,可以询问他们的当前值。
为了调整性能,也为了分析趋势和获得历史报告,有必要将这些统计数据保存到长期存储的地方。
MMON从SGA定期捕获统计数据,并将他们写入到数据字典中,在数据字典中,可以无限期地存储他们。

(7)NMNL是MMON的辅助进程。有时,MMON的预订活动显得不足。例如,MMON根据调度安排将SGA中收集的统计信息转储到数据库中:默认方式下时每小时一次。如果在MMON预订执行转储前,用于收集此信息的内存缓冲区变满,那么MMNL将担当起转储数据的职责。
(8)内存管理器MMAN.它支持内存分配的自动管理。9i可以伸缩PGA,服务器根据需要为会话分配内存,同时确保分配的PGA内存总量保持在一定限度之内。其中的SGA和组件(日志缓冲区除外)的大小可以在一定范围内重新设置。
10g版本实现了SGA大小重调的自动化,MMAN监视SGA内存结构的需要,并能根据需要重设其大小。11g版本管理能力更进一步,dba仅需为内存使用情况确定一个总体目标,MMAN将观察PGA和SGA内存的需要,并
根据需要将内存分配个会话和SGA结构,同时将内存分配总量保持在DBA设定的限制范围内。
(9)ARCn
(10)RECO
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章