在Oracle数据库系统中内存结构主要分为系统全局区(SGA)和程序全局区(PGA),SGA随着数据库实例的启动向操作系统申请分配一块内存结构,随着数据库实例的关闭释放,每一个Oracle数据库实例有且只有一个SGA。PGA随着Oracle服务进程启动的时候申请分配的一块内存结构。如果在共享服务结构中PGA存在SGA中。
下图展示Oracle的内存结构,在后面我们将用文字详细的表述各个部件。
[@more@]
内存结构
在Oracle数据库系统中内存结构主要分为系统全局区(SGA)和程序全局区(PGA),SGA随着数据库实例的启动向操作系统申请分配一块内存结构,随着数据库实例的关闭释放,每一个Oracle数据库实例有且只有一个SGA。PGA随着Oracle服务进程启动的时候申请分配的一块内存结构。如果在共享服务结构中PGA存在SGA中。
下图展示Oracle的内存结构,在后面我们将用文字详细的表述各个部件。
系统全局区(SGA)
重要提示,提高SGA的大小可以在一定程度上提高Oracle数据库系统的性能,但你设置SGA的值如果不能锁定在内存物理页上,有些部分可能被交换到系统的交换文件中。这样你的Oracle数据库系统将变慢。
系统全局区是一组包含数据和控制信息的共享内存结构,允许Oracle服务的众多后台进程同时访问或修改其中的数据,所以有些时候也被称为“全局共享区”,参数文件中的SGA_MAX_SIZE指定SGA动态大小。
系统全局区由以下主要几个部分组成:
※ 共享池SharedPool
※ 数据高速缓存DatabaseBufferCache
※ 重做日志缓存RedoLogBufferCache
※ Java池(可选)JavaPool
※ 大池(可选)LagerPool
共享池
共享池存储了最近多数使用的执行SQL语句和最近使用的数据定义。它包含库高速缓存器和数据字典缓存器这两个与性能相关的内存结构。共享池的大小可以通过初始化参数文件(通常为init.ora)中的SHARED_POOL_SIZE决定。共享池是活动非常频繁的内存结构,会产生大量的内存碎片,所以你要确保它尽可能足够大。
库高速缓存器,他又包含共享SQL区和共享PL/SQL区两个组件区。为了提高SQL语句的性能,在提交SQL语句或PL/SQL程序块时Oracle服务器将先利用最近最少使用(LRU)算法检查库高速缓存中是否存在相同的SQL语句或PL/SQL程序块,若有则使用原有的分析树和执行路径。
数据字典缓存器,它收集最近使用的数据库中的数据定义信息。它包含数据文件、表、索引、列、用户、访问权限、其他数据库对象等信息。在分析阶段决定数据库对象的可访问信息。利用数据字典缓存器有效的改善了响应时间。它的大小由共享池的大小决定。
数据高速缓存
它存储数据文件中数据块的拷贝。利用这种结构使数据的更新操作性能大大的提高。数据高速缓存中的数据交换同样采用最近最少使用算法(LRU)。它的大小主要受到DB_BLOCK_SIZE决定。数据高速缓存它由DB_CACHE_SIZE、DB_KEEP_CACHE_SIZE、DB_RECYCLE_CACHE_SIZE这些独立的子缓存器构成,同时它能动态的增长或收缩。
重做日志缓存
重做日志缓存器是个环状的缓存器,它记载所有数据的改变,主要目的用于恢复。改变后的记录内部称为重做条目,重做条目包含重构或重做信息。它的大小由初始化参数中的LOG_BUFFER决定。
重做日志缓存尺寸若太小会导致进程竞争,并引起写日志进程之间的竞争。
Java池
Java池是在安装使用Java后,才在SGA中出现的一个组件,它的大小由JAVA_POOL_SIZE初始化参数决定。Java池为执行Java命令提供分析与执行内存空间。
大池
数据库管理员可以可选配置被称为大池的内存区,它主要用于存储为共享服务器保存会话信息、I/O服务进程、Oracle备份与恢复操作、并行的消息缓存等内容。
值得一提的是大池不像其他内存组件中存在LRU列表。
程序全局区PGA
程序全局区用于保存每一个用户连接到数据库的信息。连接到数据库的信息主要有回话信息、排序信息和游标信息等三方面。
进程结构
Oracle的进程主要分为用户进程、服务进程和后台进程三类。用户进程运行在应用或Oracle工具中;服务进程在一个Oracle数据库实例启动后当一个用户建立连接后创建的;后台进程则完成不同特定任务的一些进程。
Oracle的后台进程如下:
※ 写数据DatabaseWriter(DBW0或DBWn);
※ 写日志LogWriter(LGWR);
※ 检查点Checkpoint(CKPT);
※ 系统监视SystemMonitor(SMON);
※ 进程监视ProcessesMonitor(PMON);
※ 归档Archive(ARCn);
※ 恢复Recover(RECO);
※ 锁管理服务LockManagerServer(LMS)–仅在RealApplicationClusters;
※ 队列监视QueueMonitor(OMNn);
※ 调度Dispatcher(Dnnn);
※ 服务Server(Snnn);
下图为各后台进程之间的逻辑关系图,在图的后面将用文字说明这些进程的目的。
写数据(DBWn)
数据写进程负责将重写块(dirtyblock)从数据高速缓存中写到磁盘上的数据文件里。为了使数据库的性能受I/O限制降到最低,DBWn不是每一个块修改时立即写到磁盘上,而是等到符合一定条件后读取高速缓存中的重写块列表,并将其指定的块成批地写到数据文件中。
数据写进程活动的条件如下:
※ 服务进程无法发现可用缓存
※ 检查点出现
※ 重写块到达极限
※ 超时
※ ARC发出需求
※ 表空间脱机
※ 表空间只读
※ 表丢弃或表截断
※ 表空间开始备份
虽然一个数据库写进程(DBW0)对大多数系统是足够的,但是如果你的系统修改数据量很大要提高些性能你可以配置更多的写进程(DBW1到DBW9和DBWa到DBWj)。这些增加的DBWn进程无法在单处理系统中使用。
初始化参数DB_WRITER_PROCESSES指定了DBWn进程的序号,此参数最大允许值为20。
写日志(LGWR)
写日志进程是负责管理重做日志缓存的——将重做日志从缓存区写到磁盘重做日至文件中。LGWR写从上次写后开始到最后复制到缓存中的所有重做条目。
要记住Oracle数据库系统直到LGWR将重做信息从缓存器中写到在线重做日志才认为事务完成并发送成功代码。LGWR进程对数据库性能的影响不大。
写日志在下列条件中活动:
※ 在COMMIT;
※ 缓存器使用达到三分之一时
※ 缓存器使用达到1M时
※ 每隔3秒
※ 在DBWn活动之前
检查点进程(CKPT)
检查点进程是负责向DBWn发送信号;用检查点的信息更新数据文件头;用检查点信息更新控制文件信息。
检查点频繁出现、日志频繁切换或数据库有很多数据文件时,该进程可以减少LGWR的工作量。数据库管理员可以通过设置初始化参数CHECKPOINT_PROCESS为TRUE或FALSE来确定这个数据库实例是否使用检查点进程。在初始化参数中LOG_CHECKPOINT_INTERVAL和LOG_CHECKPOINT_TIMEOUT来改变检查点出现的频率。设置这两个参数要小心,多检查点虽然能使LGWR进程工作量下降,但是过多的检查点会导致系统处理时间和I/O时间浪费在不必要的开启和关闭检查点的执行上。
系统监视进程(SMON)
系统监视进程是有规律的周期性活动。它负责的目的如下:
※ 在实例启动中如果需要执行恢复;
※ 重新分配临时段;
※ 每隔3秒合并表空间中相邻的自由区;
※ 根据需要将表空间或数据文件回复到联机状态;
※ 对于应用集群系统,它执行恢复一个失败的CPU或Oracle实例。
系统监视这进程在数据库系统实例启动时如果出现故障,那么数据库系统将无法开始工作。如果任何停止的事务因为文件只读或脱机错误导致实例恢复过程中跳过,SMON将使表空间或文件回复到联机状态。SMON进程对于一个实例能执行实例应用集群,一个SMON对于一个实例能执行实例恢复为一个失败CPU或实例。
进程监视进程(PMON)
进程监视进程负责在下列过程失败后释放相关对象:
※ 事务回退
※ 释放相关锁
※ 释放相关资源
※ 重新分配发生错误的调度
PMON周期性的检查调度状态和服务进程,并重新使除Oracle有意终止以外的已停止的进程运行;PMON同样也注册关于实例和调度进程用于网络监听的信息。
如果这个进程在数据库系统实例启动时出现故障,那么数据库系统也将无法开始工作。
恢复进程(RECO)
恢复进程负责自动解决恢复分步式数据库系统中陷于失败的分布式事务。关于此进程的详细将在分布式数据库章节中介绍。
归档进程(ARCn)
这是一个可选的后台进程。只有当Oracle数据库实例运行在归档模式时出现。归档进程负责在日志文件切换时将所有重做日志信息复制到指定的设备文件中。
一个Oracle数据库实例最多可以拥有(ARC0到ARC9)10个归档进程。
其他Oracle的后台进程,如锁管理服务、队列监视、调度等均不是一个Oracle数据库实例必须的,我们将在后面相关的部分再介绍他们。
===========================================================
1. ORACLE实例的进程结构和内存结构
1) 进程结构
进程是操作系统中的一种机制,它可执行一系列的操作步。在有些操作系统中使
用作业(JOB)或任务(TASK)的术语。一个进程通常有它自己的专用存储区。ORACL
E进程的体系结构设计使性能最大。
ORACLE实例有两种类型:单进程实例和多进程实例。
单进程ORACLE(又称单用户ORACLE)是一种数据库系统,一个进程执行全部ORAC
LE代码。由于ORACLE部分和客户应用程序不能分别以进程执行,所以ORACLE的代
码和用户的数据库应用是单个进程执行。
在单进程环境下的ORACLE 实例,仅允许一个用户可存取。例如在MS-DOS上运行O
RACLE 。
多进程ORACLE实例(又称多用户ORACLE)使用多个进程来执行ORACLE的不同部分
,对于每一个连接的用户都有一个进程。
在多进程系统中,进程分为两类:用户进程和ORACLE进程。当一用户运行一应用
程序,如PRO*C程序或一个ORACLE工具(如SQL*PLUS),为用户运行的应用建立一
个用户进程。ORACLE进程又分为两类:服务器进程和后台进程。服务器进程用于
处理连接到该实例的用户进程的请求。当应用和ORACELE是在同一台机器上运行,
而不再通过网络,一般将用户进程和它相应的服务器进程组合成单个的进程,可
降低系统开销。然而,当应用和ORACLE运行在不同的机器上时,用户进程经过一
个分离服务器进程与ORACLE通信。它可执行下列任务:
? 对应用所发出的SQL语句进行语法分析和执行。
? 从磁盘(数据文件)中读入必要的数据块到SGA的共享数据库缓冲区(
该块不在缓冲区时)。
? 将结果返回给应用程序处理。
系统为了使性能最好和协调多个用户,在多进程系统中使用一些附加进程,称为
后台进程。在许多操作系统中,后台进程是在实例启动时自动地建立。一个ORAC
LE实例可以有许多后台进程,但它们不是一直存在。后台进程的名字为:
DBWR 数据库写入程序
LGWR 日志写入程序
CKPT 检查点
SMON 系统监控
PMON 进程监控
ARCH 归档
RECO 恢复
LCKn 封锁
Dnnn 调度进程
Snnn 服务器
每个后台进程与ORACLE数据库的不同部分交互。
下面对后台进程的功能作简单介绍:
DBWR进程:该进程执行将缓冲区写入数据文件,是负责缓冲存储区管理的一个OR
ACLE后台进程。当缓冲区中的一缓冲区被修改,它被标志为“弄脏”,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所指定。如果弄脏表中没有该参数指定块数的缓冲区,DB
WR从LUR表中查找另外一个弄脏缓冲区。
如果DBWR在三秒内未活动,则出现超时。在这种情况下DBWR对LRU表查找指定数目
的缓冲区,将所找到任何弄脏缓冲区写入磁盘。每当出现超时,DBWR查找一个新
的缓冲区组。每次由DBWR查找的缓冲区的数目是为寝化参数DB-BLOCK-WRITE-BAT
CH的值的二倍。如果数据库空运转,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 – TRANS
ACTIONS参数是大于0。
ARCH进程:该进程将已填满的在线日志文件拷贝到指定的存储设备。当日志是为
ARCHIVELOG使用方式、并可自动地归档时ARCH进程才存在。
LCKn进程:是在具有并行服务器选件环境下使用,可多至10个进程(LCK0,LCK1
……,LCK9),用于实例间的封锁。
Dnnn进程(调度进程):该进程允许用户进程共享有限的服务器进程(SERVER P
ROCESS)。没有调度进程时,每个用户进程需要一个专用服务进程(DEDICATEDS
ERVER PROCESS)。对于多线索服务器(MULTI-THREADED SERVER)可支持多个用
户进程。如果在系统中具有大量用户,多线索服务器可支持大量用户,尤其在客
户_服务器环境中。
在一个数据库实例中可建立多个调度进程。对每种网络协议至少建立一个调度进
程。数据库管理员根据操作系统中每个进程可连接数目的限制决定启动的调度程
序的最优数,在实例运行时可增加或删除调度进程。多线索服务器需要SQL*NET版
本2或更后的版本。在多线索服务器的配置下,一个网络接收器进程等待客户应用
连接请求,并将每一个发送到一个调度进程。如果不能将客户应用连接到一调度
进程时,网络接收器进程将启动一个专用服务器进程。该网络接收器进程不是OR
ACLE实例的组成部分,它是处理与ORACLE有关的网络进程的组成部分。在实例启
动时,该网络接收器被打开,为用户连接到ORACLE建立一通信路径,然后每一个
调度进程把连接请求的调度进程的地址给予于它的接收器。当一个用户进程作连
接请求时,网络接收器进程分析请求并决定该用户是否可使用一调度进程。如果
是,该网络接收器进程返回该调度进程的地址,之后用户进程直接连接到该调度
进程。有些用户进程不能调度进程通信(如果使用SQL*NET以前的版本的用户),
网络接收器进程不能将如此用户连接到一调度进程。在这种情况下,网络接收器
建立一个专用服务器进程,建立一种合适的连接。
2)、ORACLE内存结构
ORACLE在内存存储下列信息:
? 执行的程序代码。
? 连接的会话信息
? 程序执行期间所需数据和共享的信息
? 存储在外存储上的缓冲信息。
ORACLE具有下列基本的内存结构:
? 软件代码区
? 系统全局区,包括数据库缓冲存储区、日志缓冲区和共享池.
? 程序全局区,包括栈区和数据区.
? 排序区
软件代码区
用于存储正在执行的或可以执行的程序代码。
软件区是只读,可安装成共享或非共享。ORACLE系统程序是可共享的,以致多个
ORACLE用户可存取它,而不需要在内存有多个副本。用户程序可以共享也可以不
共享。
系统全局区
为一组由ORACLE分配的共享的内存结构,可包含一个数据库实例的数据或控制信
息。如果多个用户同时连接到同一实例时,在实例的SGA中数据可为多个用户所共
享,所以又称为共享全局区。当实例起动时,SGA的存储自动地被分配;当实例关
闭时,该存储被回收。所有连接到多进程数据库实例的全部用户可自动地被分配
;当实例关闭时,该存储被回收。所有连接到多进程数据库实例的全部用户可使
用其SGA中的信息,但仅仅有几个进程可写入信息。在SGA中存储信息将内存划分
成几个区:数据库缓冲存储区、日志缓冲区、共享池、请求和响应队列、数据字
典存储区和其它各种信息。
程序全局区
PGA是一个内存区,包含单个进程的数据和控制信息,所以又称为进程全局区(P
ROCESS GLOBAL AREA)。
排序区
排序需要内存空间,ORACLE利用该内存排序数据,这部分空间称为排序区。排序
区存在于请求排序的用户进程的内存中,该空间的大小为适就排序数据量的大小
,可增长,但受初始化参数SORT-AREA-SIZER所限制。
--------------------------------------------------------
1. ORACLE实例的进程结构和内存结构
1) 进程结构
进程是操作系统中的一种机制,它可执行一系列的操作步。在有些操作系统中使
用作业(JOB)或任务(TASK)的术语。一个进程通常有它自己的专用存储区。ORACL
E进程的体系结构设计使性能最大。
ORACLE实例有两种类型:单进程实例和多进程实例。
单进程ORACLE(又称单用户ORACLE)是一种数据库系统,一个进程执行全部ORAC
LE代码。由于ORACLE部分和客户应用程序不能分别以进程执行,所以ORACLE的代
码和用户的数据库应用是单个进程执行。
在单进程环境下的ORACLE 实例,仅允许一个用户可存取。例如在MS-DOS上运行O
RACLE 。
多进程ORACLE实例(又称多用户ORACLE)使用多个进程来执行ORACLE的不同部分
,对于每一个连接的用户都有一个进程。
在多进程系统中,进程分为两类:用户进程和ORACLE进程。当一用户运行一应用
程序,如PRO*C程序或一个ORACLE工具(如SQL*PLUS),为用户运行的应用建立一
个用户进程。ORACLE进程又分为两类:服务器进程和后台进程。服务器进程用于
处理连接到该实例的用户进程的请求。当应用和ORACELE是在同一台机器上运行,
而不再通过网络,一般将用户进程和它相应的服务器进程组合成单个的进程,可
降低系统开销。然而,当应用和ORACLE运行在不同的机器上时,用户进程经过一
个分离服务器进程与ORACLE通信。它可执行下列任务:
? 对应用所发出的SQL语句进行语法分析和执行。
? 从磁盘(数据文件)中读入必要的数据块到SGA的共享数据库缓冲区(
该块不在缓冲区时)。
? 将结果返回给应用程序处理。
系统为了使性能最好和协调多个用户,在多进程系统中使用一些附加进程,称为
后台进程。在许多操作系统中,后台进程是在实例启动时自动地建立。一个ORAC
LE实例可以有许多后台进程,但它们不是一直存在。后台进程的名字为:
DBWR 数据库写入程序
LGWR 日志写入程序
CKPT 检查点
SMON 系统监控
PMON 进程监控
ARCH 归档
RECO 恢复
LCKn 封锁
Dnnn 调度进程
Snnn 服务器
每个后台进程与ORACLE数据库的不同部分交互。
下面对后台进程的功能作简单介绍:
DBWR进程:该进程执行将缓冲区写入数据文件,是负责缓冲存储区管理的一个OR
ACLE后台进程。当缓冲区中的一缓冲区被修改,它被标志为“弄脏”,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所指定。如果弄脏表中没有该参数指定块数的缓冲区,DB
WR从LUR表中查找另外一个弄脏缓冲区。
如果DBWR在三秒内未活动,则出现超时。在这种情况下DBWR对LRU表查找指定数目
的缓冲区,将所找到任何弄脏缓冲区写入磁盘。每当出现超时,DBWR查找一个新
的缓冲区组。每次由DBWR查找的缓冲区的数目是为寝化参数DB-BLOCK-WRITE-BAT
CH的值的二倍。如果数据库空运转,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 – TRANS
ACTIONS参数是大于0。
ARCH进程:该进程将已填满的在线日志文件拷贝到指定的存储设备。当日志是为
ARCHIVELOG使用方式、并可自动地归档时ARCH进程才存在。
LCKn进程:是在具有并行服务器选件环境下使用,可多至10个进程(LCK0,LCK1
……,LCK9),用于实例间的封锁。
Dnnn进程(调度进程):该进程允许用户进程共享有限的服务器进程(SERVER P
ROCESS)。没有调度进程时,每个用户进程需要一个专用服务进程(DEDICATEDS
ERVER PROCESS)。对于多线索服务器(MULTI-THREADED SERVER)可支持多个用
户进程。如果在系统中具有大量用户,多线索服务器可支持大量用户,尤其在客
户_服务器环境中。
在一个数据库实例中可建立多个调度进程。对每种网络协议至少建立一个调度进
程。数据库管理员根据操作系统中每个进程可连接数目的限制决定启动的调度程
序的最优数,在实例运行时可增加或删除调度进程。多线索服务器需要SQL*NET版
本2或更后的版本。在多线索服务器的配置下,一个网络接收器进程等待客户应用
连接请求,并将每一个发送到一个调度进程。如果不能将客户应用连接到一调度
进程时,网络接收器进程将启动一个专用服务器进程。该网络接收器进程不是OR
ACLE实例的组成部分,它是处理与ORACLE有关的网络进程的组成部分。在实例启
动时,该网络接收器被打开,为用户连接到ORACLE建立一通信路径,然后每一个
调度进程把连接请求的调度进程的地址给予于它的接收器。当一个用户进程作连
接请求时,网络接收器进程分析请求并决定该用户是否可使用一调度进程。如果
是,该网络接收器进程返回该调度进程的地址,之后用户进程直接连接到该调度
进程。有些用户进程不能调度进程通信(如果使用SQL*NET以前的版本的用户),
网络接收器进程不能将如此用户连接到一调度进程。在这种情况下,网络接收器
建立一个专用服务器进程,建立一种合适的连接。
2)、ORACLE内存结构
ORACLE在内存存储下列信息:
? 执行的程序代码。
? 连接的会话信息
? 程序执行期间所需数据和共享的信息
? 存储在外存储上的缓冲信息。
ORACLE具有下列基本的内存结构:
? 软件代码区
? 系统全局区,包括数据库缓冲存储区、日志缓冲区和共享池.
? 程序全局区,包括栈区和数据区.
? 排序区
软件代码区
用于存储正在执行的或可以执行的程序代码。
软件区是只读,可安装成共享或非共享。ORACLE系统程序是可共享的,以致多个
ORACLE用户可存取它,而不需要在内存有多个副本。用户程序可以共享也可以不
共享。
系统全局区
为一组由ORACLE分配的共享的内存结构,可包含一个数据库实例的数据或控制信
息。如果多个用户同时连接到同一实例时,在实例的SGA中数据可为多个用户所共
享,所以又称为共享全局区。当实例起动时,SGA的存储自动地被分配;当实例关
闭时,该存储被回收。所有连接到多进程数据库实例的全部用户可自动地被分配
;当实例关闭时,该存储被回收。所有连接到多进程数据库实例的全部用户可使
用其SGA中的信息,但仅仅有几个进程可写入信息。在SGA中存储信息将内存划分
成几个区:数据库缓冲存储区、日志缓冲区、共享池、请求和响应队列、数据字
典存储区和其它各种信息。
程序全局区
PGA是一个内存区,包含单个进程的数据和控制信息,所以又称为进程全局区(P
ROCESS GLOBAL AREA)。
排序区
排序需要内存空间,ORACLE利用该内存排序数据,这部分空间称为排序区。排序
区存在于请求排序的用户进程的内存中,该空间的大小为适就排序数据量的大小
,可增长,但受初始化参数SORT-AREA-SIZER所限制。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/671866/viewspace-825712/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/671866/viewspace-825712/