ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORACLE学习几个重要的后台进程

ORACLE学习几个重要的后台进程

原创 Linux操作系统 作者:听海★蓝心梦 时间:2012-07-12 20:32:14 0 删除 编辑
今天有个同事问我oracle这几个进程的关系和工作机制,简单的回忆了一下,觉得这几个进程对oracle的工作非常重要。
而且弄清这几个进程,对学习oracle也是非常有帮助,
下面把这几个进程和大家分享一下:


何时触发lgwr,dbwr,chpk等进程     
Log Writer (LGWR)   
LGWR performs sequential writes from the Redo Log Buffer to the online redo log file under the followingsituations:   
     1.When a transaction commits   
     2.When the Redo Log Buffer is one-third full  
     3.When there is more than 1 MB of changes recorded in the Redo Log Buffer   
     4.Before DBWn writes modified blocks in the Database Buffer Cache to the data files   
     5.Every three seconds   
   
.Because the redo is needed for recovery, LGWR confirms the commit operation only after the redo is written todisk.   
LGWR can also call on DBWn to write to the data files.   
  
  
Database Writer (DBWn)   
The server process records changes to undo and data blocks in the Database Buffer Cache. DBWn writes thedirty buffers from the Database Buffer Cache to the data files. It ensures that a sufficient number of free buffers(buffers that can be overwritten when server processes need to read in blocks from the data files) are availablein the Database Buffer Cache. Database performance is improved because server processes make changes onlyin the Database Buffer Cache.   
DBWn defers writing to the data files until one of the following events occurs:   
     Incremental or normal checkpoint  
     The number of dirty buffers reaches a threshold value   
     A process scans a specified number of blocks when scanning for free buffers and cannot find any  
     Timeout occurs   
     A ping request in Real Application Clusters (RAC) environment   
     Placing a normal or temporary tablespace offline   
     Placing a tablespace in read-only mode   
     Dropping or truncating a table  
     ALTER TABLESPACEtablespace nameBEGIN BACKUP   
  
1. 当Buffer Cache中的Dirty List长度达到阀值:   
DBWR将Dirty List中的Dirty Buffer写入磁盘(user Server Process在LRU List中查找free buffer时将碰到的dirty blocks移入Dirty List)   
  
2. 当user Server Process在Buffer Cache的LRU List中搜索了过长的时间而仍然没有找到free buffer:   
DBWR直接从LRU List中将Dirty Buffer写入磁盘   
  
3. 每过3秒钟:   
DBWR把dirty buffers从LRU List移到Dirty List,一旦Dirty List长度达到阀值,DBWR便将数据写入磁盘   
  
4. Checkpoint发生时:   
DBWR把所有的dirty buffers从LRU List移到Dirty List,并且开始写数据   
  
5. 当Tablespace开始Hot backup时:   
DBWR把所有属于该表空间的dirty buffers从LRU List移到Dirty List,并且开始写数据   
  
6. 当Tablespace offline时:   
DBWR把所有属于该表空间的dirty buffers从LRU List移到Dirty List,并且开始写数据   
  
7. 执行Drop时:   
drop table或者index将促使DBWR先将属于该segment的dirty blocks写入磁盘   
  
  
checkpoint

checkpoint是一个数据库事件,它将已修改的数据从高速缓存刷新到磁盘,并更新控制文件和数据文件。   
我们知道了checkpoint会刷新脏数据,但什么时候会发生checkpoint呢?以下几种情况会触发checkpoint。   
  
1.当发生日志组切换的时候   
2.当符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,fast_start_mttr_target参数设置的时候   
3.当运行ALTER SYSTEM SWITCH LOGFILE的时候   
4.当运行ALTER SYSTEM CHECKPOINT的时候   
5.当运行alter tablespace XXX begin backup,end backup的时候   
6.当运行alter tablespace ,datafile offline的时候;  
何时触发lgwr,dbwr,chpk等进程  
Log Writer (LGWR)
LGWR performs sequential writes from the Redo Log Buffer to the online redo log file under the followingsituations:
     1.When a transaction commits
     2.When the Redo Log Buffer is one-third full
     3.When there is more than 1 MB of changes recorded in the Redo Log Buffer
     4.Before DBWn writes modified blocks in the Database Buffer Cache to the data files
     5.Every three seconds

.Because the redo is needed for recovery, LGWR confirms the commit operation only after the redo is written todisk.
LGWR can also call on DBWn to write to the data files.

Database Writer (DBWn)
The server process records changes to undo and data blocks in the Database Buffer Cache. DBWn writes thedirty buffers from the Database Buffer Cache to the data files. It ensures that a sufficient number of free buffers(buffers that can be overwritten when server processes need to read in blocks from the data files) are availablein the Database Buffer Cache. Database performance is improved because server processes make changes onlyin the Database Buffer Cache.
DBWn defers writing to the data files until one of the following events occurs:
     Incremental or normal checkpoint
     The number of dirty buffers reaches a threshold value
     A process scans a specified number of blocks when scanning for free buffers and cannot find any
     Timeout occurs
     A ping request in Real Application Clusters (RAC) environment
     Placing a normal or temporary tablespace offline
     Placing a tablespace in read-only mode
     Dropping or truncating a table
     ALTER TABLESPACEtablespace nameBEGIN BACKUP
1. 当Buffer Cache中的Dirty List长度达到阀值:
DBWR将Dirty List中的Dirty Buffer写入磁盘(user Server Process在LRU List中查找free buffer时将碰到的dirty blocks移入Dirty List)
2. 当user Server Process在Buffer Cache的LRU List中搜索了过长的时间而仍然没有找到free buffer:
DBWR直接从LRU List中将Dirty Buffer写入磁盘
3. 每过3秒钟:
DBWR把dirty buffers从LRU List移到Dirty List,一旦Dirty List长度达到阀值,DBWR便将数据写入磁盘
4. Checkpoint发生时:
DBWR把所有的dirty buffers从LRU List移到Dirty List,并且开始写数据
5. 当Tablespace开始Hot backup时:
DBWR把所有属于该表空间的dirty buffers从LRU List移到Dirty List,并且开始写数据
6. 当Tablespace offline时:
DBWR把所有属于该表空间的dirty buffers从LRU List移到Dirty List,并且开始写数据
7. 执行Drop时:
drop table或者index将促使DBWR先将属于该segment的dirty blocks写入磁盘

checkpoint是一个数据库事件,它将已修改的数据从高速缓存刷新到磁盘,并更新控制文件和数据文件。
我们知道了checkpoint会刷新脏数据,但什么时候会发生checkpoint呢?以下几种情况会触发checkpoint。
1.当发生日志组切换的时候
2.当符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,fast_start_mttr_target参数设置的时候
3.当运行ALTER SYSTEM SWITCH LOGFILE的时候
4.当运行ALTER SYSTEM CHECKPOINT的时候
5.当运行alter tablespace XXX begin backup,end backup的时候
6.当运行alter tablespace ,datafile offline的时候;



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

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

DBWR进程:
        该进程执行将缓冲区写入数据文件,是负责缓冲存储区管理的一个ORACLE后台进程。当缓冲区中的一缓冲区被修改,它被标志为“弄脏”,DBWR的主要任务是将“弄脏”的缓冲区写入磁盘,使缓冲区保持“干净”。由于缓冲存储区的缓冲区填入数据库或被用户进程弄脏,未用的缓冲区的数目减少。当未用的缓冲区下降到很少,以致用户进程要从磁盘读入块到内存存储区时无法找到未用的缓冲区时,DBWR将管理缓冲存储区,使用户进程总可得到未用的缓冲区。 ORACLE采用LRU(LEAST RECENTLY USED)算法(最近最少使用算法)保持内存中的数据块是最近使用的,使I/O最小。在下列情况预示DBWR 要将弄脏的缓冲区写入磁盘:
1、当一个服务器进程将一缓冲区移入“弄脏”表,该弄脏表达到临界长度时,该服务进程将通知DBWR进行写。该临界长度是为参数DB-BLOCK-WRITE-BATCH的值的一半。
2、 当一个服务器进程在LRU表中查找DB-BLOCK-MAX-SCAN-CNT缓冲区时,没有查到未用的缓冲区,它停止查找并通知DBWR进行写。
3、出现超时(每次3秒),DBWR 将通知本身。
4、 当出现检查点时,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、 当用户进程提交一事务时写入一个提交记录。
2、每三秒将日志缓冲区输出。
3、 当日志缓冲区的1/3已满时将日志缓冲区输出。
4、当DBWR将修改缓冲区写入磁盘时则将日志缓冲区输出。
LGWR进程同步地写入到活动的镜象在线日志文件组。如果组中一个文件被删除或不可用,LGWR 可继续地写入该组的其它文件。 日志缓冲区是一个循环缓冲区。当LGWR将日志缓冲区的日志项写入日志文件后,
服务器进程可将新的日志项写入到该日志缓冲区。LGWR 通常写得很快,可确保日志缓冲区总有空间可写入新的日志项。
注意:有时候当需要更多的日志缓冲区时,LWGR在一个事务提交前就将日志项写出,而这些日志项仅当在以后事务提交后才永久化。 ORACLE使用快速提交机制,当用户发出COMMIT语句时,一个COMMIT记录立即放入日志缓冲区,但相应的数据缓冲区改变是被延迟,直到在更有效时才将它们写入数据文件。当一事务提交时,被赋给一个系统修改号(SCN),它同事务日志项一起记录在日志中。由于SCN记录在日志中,以致在并行服务器选项配置情况下,恢复操作可以同步。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/751371/viewspace-735328/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-02-18

  • 博文量
    256
  • 访问量
    1187779