关于Oracle实例的进程结构和内存结构

来源:岁月联盟 编辑:zhuzhu 时间:2006-12-29

结构

是操作中的一种机制,它可执行一系列的操作步。在有些操作中使用作业(JOB)或任务(TASK)的术语。一个通常有它自己的专用存储区。ORACLE的体系结构设计使性能最大。

ORACLE实例有两种类型:单实例和多实例。

单ORACLE(又称单用ORACLE)是一种数据库,一个执行全部ORACLE代码。由于ORACLE部分和客户应用程序不能分别以执行,所以ORACLE的代码和用户的数据库应用是单个执行。

在单环境下的ORACLE 实例,仅允许一个用户可存取。例如在MS-DOS上运行ORACLE 。

多ORACLE实例(又称多用户ORACLE)使用多个来执行ORACLE的不同部分 ,对于每一个连接的用户都有一个。

在多中,分为两类:用户和ORACLE。当一用户运行一应用程序,如PRO*C程序或一个ORACLE工具(如SQL*PLUS),为用户运行的应用建立一个用户。ORACLE又分为两类:服务器和后台。服务器用于

处理连接到该实例的用户的请求。当应用和ORACELE是在同一台机器上运行,而不再通过网络,一般将用户和它相应的服务器组合成单个的,可降低开销。然而,当应用和ORACLE运行在不同的机器上时,用户经过一个分离服务器与ORACLE通信。它可执行下列任务:

对应用所发出的SQL语句进行语法分析和执行。

从磁盘(数据文件)中读入必要的数据块到SGA的共享数据库缓冲区(该块不在缓冲区时)。

将结果返回给应用程序处理。

为了使性能最好和协调多个用户,在多中使用一些附加,称为后台。在许多操作中,后台是在实例启动时自动地建立。一个ORACLE实例可以有许多后台,但它们不是一直存在。后台的名字为:

DBWR 数据库写入程序;

LGWR 日志写入程序;

CKPT 检查点;

SMON 监控;

PMON 监控;

ARCH 归档;

RECO 恢复;

LCKn 封锁;

Dnnn 调度;

Snnn 服务器。

每个后台与ORACLE数据库的不同部分交互。

下面对后台的功能作简单介绍:

DBWR:该执行将缓冲区写入数据文件,是负责缓冲存储区管理的一个ORACLE后台。当缓冲区中的一缓冲区被修改,它被标志为“弄脏”,DBWR的主要任务是将“弄脏”的缓冲区写入磁盘,使缓冲区保持“干净”。由于缓冲存储区的缓冲区填入数据库或被用户弄脏,未用的缓冲区的数目减少。当未用的缓冲区下降到很少,以致用户要从磁盘读入块到内存存储区时无法找到未用的缓冲区时,DBWR将管理缓冲存储区,使用户总可得到未用的缓冲区。

ORACLE采用LRU(LEAST RECENTLY USED)算法(最近最少使用算法)保持内存中的数据块是最近使用的,使I/O最小。在下列情况预示DBWR 要将弄脏的缓冲区写入磁盘:

当一个服务器将一缓冲区移入“弄脏”表,该弄脏表达到临界长度时,该服务将通知DBWR进行写。该临界长度是为参数DB-BLOCK-WRITE-BATCH的值的一半。

当一个服务器在LRU表中查找DB-BLOCK-MAX-SCAN-CNT缓冲区时,没有查到未用的缓冲区,它停止查找并通知DBWR进行写。出现超时(每次3秒),DBWR 将通知本身。当出现检查点时,LGWR将通知DBWR.在前两种情况下,DBWR将弄脏表中的块写入磁盘,每次可写的块数由初始化参数DB-BLOCK-WRITE-BATCH所指定。如果弄脏表中没有该参数指定块数的缓冲区,DBWR从LUR表中查找另外一个弄脏缓冲区。

如果DBWR在三秒内未活动,则出现超时。在这种情况下DBWR对LRU表查找指定数目的缓冲区,将所找到任何弄脏缓冲区写入磁盘。每当出现超时,DBWR查找一个新的缓冲区组。每次由DBWR查找的缓冲区的数目是为寝化参数DB-BLOCK-WRITE-BATCH的值的二倍。如果数据库空运转,DBWR最终将全部缓冲区存储区写入磁盘。

在出现检查点时,LGWR指定一修改缓冲区表必须写入到磁盘。DBWR将指定的缓冲区写入磁盘。

在有些平台上,一个实例可有多个DBWR。在这样的实例中,一些块可写入一磁盘,另一些块可写入其它磁盘。参数DB-WRITERS控制DBWR个数。

LGWR:该将日志缓冲区写入磁盘上的一个日志文件,它是负责管理日志缓冲区的一个ORACLE后台。LGWR将自上次写入磁盘以来的全部日志项输出,LGWR输出:

当用户提交一事务时写入一个提交记录。

每三秒将日志缓冲区输出。

当日志缓冲区的1/3已满时将日志缓冲区输出。

当DBWR将修改缓冲区写入磁盘时则将日志缓冲区输出。

LGWR同步地写入到活动的镜象在线日志文件组。如果组中一个文件被删除或不可用,LGWR 可继续地写入该组的其它文件。

日志缓冲区是一个循环缓冲区。当LGWR将日志缓冲区的日志项写入日志文件后,服务器可将新的日志项写入到该日志缓冲区。LGWR 通常写得很快,可确保日志缓冲区总有空间可写入新的日志项。

注意:有时候当需要更多的日志缓冲区时,LWGR在一个事务提交前就将日志项写出,而这些日志项仅当在以后事务提交后才永久化。

ORACLE使用快速提交机制,当用户发出COMMIT语句时,一个COMMIT记录立即放入日志缓冲区,但相应的数据缓冲区改变是被延迟,直到在更有效时才将它们写入数据文件。当一事务提交时,被赋给一个修改号(SCN),它同事务日志项一

起记录在日志中。由于SCN记录在日志中,以致在并行服务器选项配置情况下,恢复操作可以同步。

CKPT:该在检查点出现时,对全部数据文件的标题进行修改,指示该检查点。在通常的情况下,该任务由LGWR执行。然而,如果检查点明显地降低性能时,可使CKPT运行,将原来由LGWR执行的检查点的工作分离出来,由CKPT实现。对于许多应用情况,CKPT是不必要的。只有当数据库有许多数据文件,LGWR在检查点时明显地降低性能才使CKPT运行。CKPT不将块写入磁盘,该工作是由DBWR完成的。

初始化参数CHECKPOINT-PROCESS控制CKPT的使能或使不能。缺省时为FALSE,即为使不能。

SMON:该实例启动时执行实例恢复,还负责清理不再使用的临时段。在具有并行服务器选项的环境下,SMON对有故障CPU或实例进行实例恢复。SMON有规律地被呼醒,检查是否需要,或者其它发现需要时可以被调用。

PMON:该在用户出现故障时执行恢复,负责清理内存储区和释放该所使用的资源。例:它要重置活动事务表的状态,释放封锁,将该故障的的ID从活动表中移去。PMON还周期地检查调度(DISPATCHER)和服务器的状态,如果已死,则重新启动(不包括有意删除的)。

PMON有规律地被呼醒,检查是否需要,或者其它发现需要时可以被调用。

RECO:该是在具有分布式选项时所使用的一个,自动地解决在分布式事务中的故障。一个结点RECO后台自动地连接到包含有悬而未决的分布式事务的其它数据库中,RECO自动地解决所有的悬而不决的事务。任何相应于已处理的悬而不决的事务的行将从每一个数据库的悬挂事务表中删去。

当一数据库服务器的RECO后台试图建立同一远程服务器的通信,如果远程服务器是不可用或者网络连接不能建立时,RECO自动地在一个时间间隔之后再次连接。

RECO后台仅当在允许分布式事务的中出现,而且DISTRIBUTED – TRANSACTIONS参数是大于0。

ARCH:该将已填满的在线日志文件拷贝到指定的存储设备。当日志是为ARCHIVELOG使用方式、并可自动地归档时ARCH才存在。

LCKn:是在具有并行服务器选件环境下使用,可多至10个(LCK0,LCK1……,LCK9),用于实例间的封锁。

Dnnn(调度):该允许用户共享有限的服务器(SERVER PROCESS)。没有调度时,每个用户需要一个专用服务(DEDICATEDSERVER PROCESS)。对于多线索服务器(MULTI-THREADED SERVER)可支持多个用户。如果在中具有大量用户,多线索服务器可支持大量用户,尤其在客户_服务器环境中。

在一个数据库实例中可建立多个调度。对每种网络协议至少建立一个调度。数据库管理员根据操作中每个可连接数目的限制决定启动的调度程序的最优数,在实例运行时可增加或删除调度。多线索服务器需要SQL*NET版本2或更后的版本。在多线索服务器的配置下,一个网络接收器等待客户应用连接请求,并将每一个发送到一个调度。如果不能将客户应用连接到一调度

时,网络接收器将启动一个专用服务器。该网络接收器不是ORACLE实例的组成部分,它是处理与ORACLE有关的网络的组成部分。在实例启动时,该网络接收器被打开,为用户连接到ORACLE建立一通信路径,然后每一个调度把连接请求的调度的地址给予于它的接收器。当一个用户作连

接请求时,网络接收器分析请求并决定该用户是否可使用一调度。如果是,该网络接收器返回该调度的地址,之后用户直接连接到该调度。有些用户不能调度通信(如果使用SQL*NET以前的版本的用户),网络接收器不能将如此用户连接到一调度。在这种情况下,网络接收器建立一个专用服务器,建立一种合适的连接。