Oracle数据库实例的后台进程是操作系统进程或线程,它们共同实现对Oracle数据库的管理功能。每个后台进程只完成一项单独的任务,这使Oracle实例具有较高的效率。Oracle后台进程数量繁多,一些后台进程在每个实例中都会启动,而另一些后台进程则根据条件和配置启动。从动态性能视图V bgprocess可以查询有关后台进程信息,以及实例当前已经启动的后台进程。
一些常见的基本后台进程如下所述。
(1)数据库写入进程
数据库写入进程(database writer,DBWR)负责将SGA内数据库缓冲区中的“脏”数据块写入数据文件。所谓“脏”数据块是指高速数据缓冲区中被修改过的数据块。如果需要,可以创建多个DBWR进程,让它们共同分担数据写入负载。实例启动的DBWR数量由初始化参数DB_WRITER_PROCESS指定。在Oracle Database 11g中,一个实例最多可以启动36个DBWR(依次编号为DBWO,…,DBW9和DBWa,…,DBWz,因此,数据库写入进程又被统称为DBWn)。由于Windows操作系统采用异步I/O方式,所以常常只配置一个数据库写入进程即可满足数据写入需要。
数据库写入进程在以下条件下将把脏数据块写入数据文件。
①服务器进程找不到足够数量的可用干净缓冲区。
②数据库系统执行检查点时。
但在写入脏数据块之前,如果DBWR发现与数据缓冲区内脏数据块相关的重做日志还没有写入磁盘,它将通知LGWR,先把重做日志缓冲区内的重做日志写入联机重做日志文件,并一直等到LGWR写完之后才开始把脏数据块写入磁盘,这称为前写协议(Write⁃ahead protocol)。
(2)日志写入进程
日志写入进程(log writer,LGWR)负责把日志缓冲区内的重做日志写入重做日志文件。Oracle系统首先将用户所作的修改日志信息写入日志文件,然后再将修改结果写入数据文件。
Oracle实例在运行中会产生大量日志信息,这些日志信息首先被记录在SGA的重做日志缓冲区中,当发生提交命令或者重做日志缓冲区的信息满1/3或者日志信息存放超过3 s时,LGWR进程就将日志信息从重做日志缓冲区中读出并写入日志文件组中序号较小的文件中,一个日志组写满后接着写另外一组。当LGWR进程将所有的日志文件都写过一遍之后,它将再次转向第一个日志文件组重新覆盖。对于LGWR进程写满一个日志文件组而转向写另外一组的过程,人们称为日志切换。
(3)归档进程
归档进程(archiver,ARCH)是一个可选的进程,只有当Oracle数据库处于归档模式时,该进程才可能起到作用。若Oracle数据库处于归档模式,在各个日志文件组都被写满而即将被覆盖之前,先由归档进程(ARCH)把即将被覆盖的日志文件中的日志信息读出,然后再把这些“读出的日志信息”写入归档日志文件。
(4)检查点进程
在Oracle数据库内,检查点进程(checkpoint process,CKPT)会定期启动,它把检查点信息写入控制文件和数据文件头部,并通知DBWn进程把脏数据块写入数据文件。DBWn进程的运行又会启动LGWR进程将重做日志缓冲区内的内容写入重做日志文件,这样就完全同步了数据文件、日志文件和控制文件的内容。
要理解检查点,首先应该了解Oracle数据库的事务提交方式。用户提交事务时,Oracle分配一个系统修改号(System Change Number,SCN)用于标识该事务,LGWR在重做日志缓冲区内添加一项提交记录,之后立即把重做日志缓冲区内的数据写入联机重做日志文件。日志写入成功后,通知用户或应用程序事务提交完成。这时候与该事务相关的数据可能还在数据缓冲区缓存内没有写入数据文件。这种提交方式被称为事务的快速提交。Oracle之所以采用这种方式,是因为数据的写入是随机的,而日志的写入是顺序方式,所以日志的写入速度会比数据的写入速度快。(www.daowen.com)
如果用户所提交事务的数据还未写入数据文件就遇到实例故障,在下次实例启动打开数据库过程中,它会发现数据库处于不一致状态,需要做实例恢复。此时,Oracle会读出重做日志文件中的重做日志,再执行一遍(这就是重做日志名称的由来),即可恢复用户已经提交的所有事务的数据。所以,采用快速提交方式能够满足事务持久性的要求。
Oracle数据库的检查点机制可保证数据库文件在每个检查点处于同步状态,并将所有已提交事务的数据写入数据文件(这些事务对应的日志在提交事务时已经写入了重做日志文件),因此实例恢复时只需恢复最后一个检查点后提交的事务,从而缩短实例恢复所需的时间,使数据库能够快速启动。但是,如果检查点进程启动过于频繁,它会大量增加系统的I/O次数,从而影响系统的运行性能。
与检查点频率设置相关的初始化参数包括LOG_CHECKPOINT_TIMEOUT、LOG_CHECKPOINT_INTERVAL和FAST_START_MTTR_TARGET。初始化参数LOG_CHECKPOINTS_TO_ALERT的值决定是否把检查点启动事件写入数据库的警告日志文件。有关这些初始化参数的详细介绍,请参阅Oracle文档。
(5)进程监视进程
进程监视进程(process monitor,PMON)的主要作用如下。
①监视其他后台进程、服务器进程和调度进程的运行情况。当它们异常中断时,重启这些进程或者终止实例的运行。
②在用户进程异常中断后,负责清理数据库缓冲区缓存,释放用户进程锁定的资源。
③向正在运行的监听注册数据库实例。如果监听没有运行,PMON则定期查询监听是否启动以注册实例。
(6)系统监视进程
系统监视进程(system monitor,SMON)负责大量系统级的清理工作,其中包括:
①实例启动时,如果需要,SMON执行实例恢复。
②清理不再使用的临时段。
③合并字典管理表空间内相邻的空闲区。
以上讲解了Oracle 11g中的若干个典型进程,不同版本Oracle的后台进程也不同。默认情况下,Oracle 11g会启动200多个后台进程。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。