Oracle后台进程

来源:互联网 发布:硬盘数据销毁软件 编辑:程序博客网 时间:2024/05/18 00:55
 

Oracle体系结构之-Oracle后台进程

后台进程主要完成以下任务:

Ø  在内存与外存之间进行I/O操作

Ø  监视各个进程的状态

Ø  协调各个进程的任务

Ø  维护系统的性能

Ø  保证系统的可靠性

进程监控进程PMON(process monitor)

         当oracle数据库链接非正常终止,oracle将通过PMON进程来启动、清除中断或失败的用户进程,包括清除非正常中断的用户进程留下的会话,回退未提交的事务,释放会话所占用的锁,SGA区,PGA区等资源。此外,PMON进程还定期地检查调度程序和服务进程的状态,如果他们失败,就会尝试重新启动并释放他们所占的资源。PMON进程会定期地被唤醒,进行检查。

系统监控进程SMON(system monitor)

SMON(System Monitor)-系统监控进程,在实例启动时执行实例恢复,并负责清理不再使用的临时段。SMON所做的工作包括:

Ø  清理临时空间

Ø  合并空闲空间

Ø  针对原来不可用的文件恢复活动的事务

SMON是检查数据库系统的,PMON是检查服务进程的。当数据库非正常的关闭,再次重启时,SMON进程会自动读取重做日志文件,对数据库进行恢复,将已经提交的事务写到数据库文件,回退未提交的事务。

数据库写进程DBWR(database writer)

DBWR (数据库写入程序)后台进程负责管理数据块缓存区及字典缓存区的内容。它的作用包括:

Ø  管理高速缓存区,以便服务进程能找到空闲缓存块

Ø  当缓存中的数据写到数据库文件中,释放缓存区

Ø  使用LRU算法管理缓存中数据,避免重复读取数据库文件

DBWR进程启动时间与用户提交事务的时间无关,就是说当用户commit事务后,该事务的数据会放到高速缓存区中,而不是数据库文件中。

DBWN会写出缓冲区缓存中的脏块,通常是为了在缓存中腾出更多的空间(释放缓存区来读入其他数据),或者是为了推进检查点(将在线重做日志文件中的位置前移,如果出现失败,Oracle会从这个位置开始独取来恢复实例)。可以看到,DBWN的性能可能很重要。如果它写出块的速度不够快,不能很快地释放缓冲区,就会看到Free Buffer Waits和Write Complete Waits的等待数和等待时间开始增长,而且会增加数据库恢复的难度。但是,如果写出的频次过快,就会增加I/O读写的次数,从而影响数据库的性能。可以配置多个DBWn;实际上可以配置多达20个的DBWn。

最好的情况下,DBWn使用异步I/O将块写至磁盘。采用异步I/O,DBWn会收集一批要写的块,并把它们交给操作系统。DBWn并不等待操作系统真正将块写出;而是立即返回,并收集下一批要写的块。当操作系统完成写操作时,它会异步地通知DBWn写操作已经完成。这样,与所有的操作都串行进行相比,DWBn可以更快地工作。

根据定义,块写入器进程会把块写出到所有磁盘,即分散到各个磁盘上;也就是说,DBWn会做大量的分散写。执行一个更新时,你会修改多处存储的索引块,还可能修改随机地分布到磁盘上的数据块。另一方面,LGWR则是向重做日志完成大量的顺序写。这是一个很重要的区别。

分散写比顺序写慢多了。通过在SGA中缓存脏块,并由LGWR进程完成大规模顺序写,这样可以提升性能。DBWn在后台完成它的任务(很慢),而LGWR在用户等待时完成自己的任务(这个任务比较快),这样我们就能够得到更好的整体性能。

日志写进程LGWR(log writer)

LGWR(日志写入程序)后台进程负责把联机重做日志缓冲区的内容写入联机重做日志文件。LGWR分批将日志条目写入联机重做日志文件。重做日志缓冲区条目总是包含着数据库的最新状态,这是因为DBWR进程可以一直等待到把数据块缓冲区中的修改数据块写入到数据文件中。

LGWR是数据库正常操作时唯一向联机重做日志文件写入内容并从重做日志缓冲区直接读取内容的进程。与DBWR对数据文件执行的完全随机访问相反,联机重做日志文件以序列形式写入。如果联机重做日志文件是镜像文件, LGWR同时向镜像日志文件中写内容。

归档进程ARCH(archive)

LGWR后台进程以循环方式向联机重做日志文件写入;当填满第一个日志文件后,就开始向第二个日志文件写入;第二个日志文件填满后,再向第三个日志文件写入。一旦最后一个重做日志文件填满, LGWR就开始重写第一个重做日志文件的内容。

当Oracle以ARCHIVELOG (归档日志)模式运行时,数据库在开始重写重做日志文件之前先对其进行备份。这些归档的重做日志文件通常写入一个磁盘设备中。也可以直接写入磁带设备中,但是这往往要增加操作员的劳动强度。

这种归档功能由ARCH (归档进程)后台进程完成,利用该性能的数据库在处理大数据事务时将遇到重做日志磁盘冲突问题,这是因为当LGWR准备写入一个重做日志文件时, ARCH正准备读取另一个。如果归档日志目标磁盘写满,数据库还将遇到数据库锁定问题。此时,ARCH冻结,禁止LGW R写入;从而禁止在数据库中出现进一步的事务处理;这种情况一起延续到归档重做日志文件的空间清空为止。

在线重做日志(LGWR)用于在出现电源故障(实例中止)时“修正”数据文件,而归档重做日志则不同,它是在出现硬盘故障时用于“修正”数据文件。ARCH通常将在线重做日志文件复制到至少两个位置(冗余正是不丢失数据的关键所在!)。这些位置可能是本地机器上的磁盘,或者更确切地讲,至少有一个在另一台机器上,以应付灾难性失败。

检查点进行CKPT(checkpoint)

CKPT (检查点进程)用来减少执行实例恢复所需的时间。检查点使DBWR把上一个检查点以后的全部已修改数据块写入数据文件,并更新数据文件头部和控制文件以记录该检查点。

当一个联机重做日志文件被填满时,检查点进程会自动出现。可以用数据库实例的init.ora文件中的LOG_CHECKPOINT_INTERVAL参数来设置一个频繁出现的检查点。

注意:

检查点进程并不像它的名字所暗示的那样,真的建立检查点--建立检查点是主要是DBWn的任务。CKPT只是更新数据文件的文件首部,以辅助真正建立检查点的进程(DBWn)。