Oracle进程

来源:互联网 发布:javascript 循环对象 编辑:程序博客网 时间:2024/05/04 00:01

1. CKPT 

当检查点发生的时候,oracle必须update所有数据文件的headers去记录检查点的细节。这些都是检查点进程完成的。检查点进程不写块到磁盘,而是DBWn进程来做这个工作。

CKPT读写数据文件,也对控制文件进行读写。

两种类型的检查点

增量检查点;全检查点

管理检查点队列的初始化参数:

 

FAST_START_MTTR_TARGET

 

Oracle9i以来FAST_START_MTTR_TARGET 参数是调整checkpoint的首选的方法。FAST_START_MTTR_TARGET 可以指定单实例恢复需要的秒数。基于内部的统计,增长的checkpoint会自动调整的checkpint的目标以满足 FAST_START_MTTR_TARGET 的需求。V$INSTANCE_RECOVERY.ESTIMATED_MTTR 显示当前估计需要恢复的秒数。这个值会被显示即使FAST_START_MTTR_TARGET 没有被指定。

V$INSTANCE_RECOVERY.TARGET_MTTR 表明在短时间内MTTR的目标。

V$MTTR_TARGET_ADVICE 显示这个当前MTTR设置的工作量产生的I/O数量和其他I/O

这个视图帮助用户评定这个在优化和恢复之前的平衡。

 

LOG_CHECKPOINT_INTERVAL

 

LOG_CHECKPOINT_INTERVAL 参数指定这个最大的重做块的间隔数目。如果FAST_START_MTTR_TARGET被指定,LOG_CHECKPOINT_INTERVAL不能被设置为0

在大多数Unix系统的OS块大小是512字节。设置LOG_CHECKPOINT_INTERVAL=10000意味着

这个增长的checkpoint不能追加到当前日志,因为多于5M。如果你的重做日志是20M,你将发出4checkpoint对每个重做日志。

LOG_CHECKPOINT_INTERVAL 会发生影响当一个checkpoint发生时,小心设置这个参数,保持它随着重做日志文件大小变化而变化。checkpoint频繁是这个影响数据库恢复的原因之一。

短的checkpoint间隔意味数据库将快速恢复,也增加了资源的利用。

这个参数也影响数据库向前回滚的时间。实际的恢复时间是基于这个时间,当然还有失败的类型和

需要归档日志的数量。

 

LOG_CHECKPOINT_TIMEOUT

 

这个参数指定checkpoint发出的时间间隔。换句话说,它指定一次脏数据多少时间写出一次。

checkpoint频率会影响这个数据库恢复的时间。长时间的间隔会要求数据库恢复要求更久。

Oracle建议用LOG_CHECKPOINT_interval去控制checkpoint而不用 LOG_CHECKPOINT_TIMEOUTLOG_CHECKPOINT_TIMEOUTn秒发一次checkpoint,不顾事务提交的频率。这可能会导致一些没有必要的checkpoint在事务已经变化的情况下。不必要的checkpoint必须被避免。还有一个容易误解的地方:LOG_CHECKPOINT_TIMEOUT 会间隔性地发出log switch。而Log switch会触发一个checkpoint,但checkpoint不会导致一个log switch。唯一手工方式alter system switch logfile或者重新设置redo logs大小可以导致频繁switch.

 

2. DBWn 

数据库写进程把buffer里的内容写进数据文件。DBWn使用LRU算法来保证最频繁被访问的块在buffer cache里,所以当buffer被写进磁盘的时候没有把马上就要使用的块写到磁盘。

初始化参数DB_WRITE_PROCESSES指定了DBWn进程的个数,最大的DBWn20个,如果在启动的时候没有指定,oracle根据CPU和处理器决定这个参数的大小。

The DBWn process writes dirty buffers to disk under the following conditions:

When a server process cannot find a clean reusable buffer after scanning a threshold number of buffers, it signals DBWn to write. DBWn writes dirty buffers to disk asynchronously while performing other processing.

DBWn periodically writes buffers to advance the checkpoint, which is the position in the redo thread (log) from which instance recovery begins. This log position is determined by the oldest dirty buffer in the buffer cache.

 

3. LGWR 

LGWR进程负责把redo log buffer里的信息写到redo log file里,

在以下情况下LGWR进行写:

用户提交commit

Redo log buffer

3秒;

Redo log buffer 三分之一满;

DBWn进程把修改过的buffer的信息到disk里,如果有必要的话,LGWR也会写。

DBWn进程把修改过的buffer写到数据文件之前,所有于buffer中修改过的信息相关的redo记录都要被写到磁盘里,即所谓的write-ahead protocol。如果DBWn发现有些redo信息没有被写,那么他就会给LGWR发信号告诉他把redo 记录写到redo log file里,直到LGWR完成为止DBWn才写数据文件。

如果redo log file之中的一个坏掉了或者不可用了,那么LGWR会继续写到同组中的其他文件中,并且记录错误在LGWRtrace文件和alert文件里。如果组中的文件都坏了,那么LGWR就不能归档了,也不能继续工作了。

当一个用户提交commit的时候,LGWR会立即提交到redo log buffer并且将其写到磁盘上。当成功的时候oracle会返回一个成功的代码给提交的事物,尽管数据buffer还没有写到磁盘里。

当用户提交一个事务的时候,这个事务被分配给一个SCNoracle会将其记录在redo log文件里来方便恢复操作。

high activity的情况下,oralce可以使用group commits来写现在redo log文件。

LGWR既然和redo log有关,那么就必然需要介绍一下redo log buffer

Redo log bufferSGA区中一个循环的buffer,掌握着有关数据库改变的信息,这个信息存储在redo entries里。

初始的log_buffer参数可以查看reference

 

4. ARCn

 

ARCn进程是载发生log switch的时候把在线redo log拷贝到指定的存储设备上,ARCn进程只有在数据库是归档模式下自动归档开启时使用。数据库可以有10个归档进程,当前的ARCn进程不能满足处理负载的时候LGWR会启动新的ARCn进程。当LGWR启动新的ARCn的时候,alert文件会记录下来。

LOG_ARCHIVE_MAX_PROCESSES是归档进程的初始参数,但是你不需要去改变这个参数的默认值,因为系统决定需要几个ARCn,并且LGWR会自动启动ARCn进程。

 

 

5.SMON

SMON在必要的时候,在实例启动的时候实行recoverySMON也负责清除那些没在使用的临时段,为数据字典管理的表空间联合空闲的extents

 

6. PMON

当一个用户的进程失败的时候,PMON负责进行进程恢复。PMON负责清除数据库buffer cache并且释放那个用户占用的资源。PMON周期性的检查dispatcher和服务器的进程,如果发现有停止的,PMON负责启动他们,并且PMON会把实例和dispatcher的信息注册到network的监听。

 

 

 

 

 

 

 

原创粉丝点击