Oracle启动之后,就能看到Oracle的进程情况,一般见到的有如下进程:
-
DBWR 数据库写入进程
-
LGWR 日志写入进程
-
PMON 进程监视进程
-
SMON 系统监视进程
-
CKPT 检查点进程
-
ARCHn 归档进程
-
RECO 恢复进程
-
Dnnn 调度进程
-
Snnn 共享服务器进程
-
LMS Oracle RAC 锁管理服务
-
QMNn 队列管理进程
现对上述进程的作用进行一一说明:
1、DBWR 数据库写入进程
DBWR The Database Writer Process 进程负责将脏数据块从数据缓存(database block buffer)写回磁盘.当一个事务修改数据块中的数据以后,不需要立即将数据块写回磁盘。由于Oracle所采用的先进机制,修改后的数据可以不用立即写回,并且即使出现故障也不会丢失。因此,DBWR可以采取更有效写回方式,而不用再事务提交完之后立即写回。DBWR通常定时写回数据,除非数据缓冲区需要清空或已满。
数据写回时,采用了最近最少使用原则(least-recently-used).对于支持异步I/O的系统,只需使用一个BWR进程即可,对不支持异步IO的可以通过增加DBWR的个数来提升效率。
2、LGWR 日志写入进程
LGWR (the log writer process)负责将日志缓冲区中的数据写入重做日志。由于COMMIT操作依赖于LGWR写回日志(commit操作触发LGWR将日志缓冲区数据写入UNDO日志),因此系统性能容易受到LGWR的影响。
3、PMON 进程监视进程
PMON(the Process Monitor Process)进程负责监视数据库的处理情况,并负责清除死掉的进程。PMON还负责重启失败的调度进程(dispatcher process)。
专有服务器体系模式下,用户进程和服务器进程是一对一的关系,如果某个会话发生异常,PMON会销毁对应的服务器进程,回滚未提交的事务,并回收会话专有的PGA内存区域。
4、SMON 系统监视进程
SMON(the System Monitor Process)进程负责在实例启动时恢复实例,包括清除临时段以及恢复因系统崩溃而中断的事物。
SMON还可以通过合并空闲分区的方式清除数据库中的碎片。
也有解释说SMON( System Monitor)安装和打开数据库,实例恢复也是由此进程完成的。
SMON进程负责在实例启动时恢复实例,包括清除临时段以及恢复因系统崩溃而中断的事物。
SMON还可以通过合并空闲分区的方式清除数据库中的碎片
主要负责其它进程不想处理的工作的进程,是数据库的一种“垃圾回收站”,主要包括:
2.1)临时空间的清除;
比如创建索引失败时,SMON将负责清除在创建索引过程当中分配出来的Temporary extent.
2.2)崩溃恢复;
2.3)Coalescing free space;
这个是在字典管理的表空间才会有的,SMON将表空间中连续的空闲的extent,合并成一个大的free extent.这只能发生在字典管理的表空间,
并且pctincrease 被设置成非零的时候。
2.4)Recovering transactions active against unavailable files;
2.5)OPS中失败节点的实例恢复;在OPS中,当一个节点Fail,其它节点将打开失败节点的重做日志,对失败节点执行恢复(注意:实例恢复和崩溃恢复的区别)。
2.6)清除OBJ$;
2.7)Shrinks 回滚段;如果设置了Optimal,那么SMON将执行自动 Shrink 回滚段到Optimal 大小。
2.8)脱机 回滚段;
举个例子,比如在切换回滚表空间的时候,由于可能之前的回滚表空间中有活动的事务,所以回滚表空间中的一些回滚段可能并不是真正的脱机,而只是标志为" Pending offline",
要等到活动事务提交或回滚之后,相应的回滚段才算真正的脱机,而SMON则周期性的在后台去真正的脱机回滚段,直到回滚段真正的脱机为止。
5、CKPT 检查点进程
CKPT(the Checkpoint Process)进程负责向DBWR进程发送信号,要求执行一次检查点,并更新数据库的所有数据和控制文件。
CheckPoint(检查点),是指有DBWR进程将所有修改过的数据缓冲区写回数据文件。CKPT是可选的,如果没有CKPT进程,则有LGWR代行这些任务。
CKPT负责发起检查点信号,手动设置检查点的语法:
SQL>alter system checkpoint;
检查点可强制DBWn写入脏缓冲区,当数据库崩溃后,由于大量脏缓冲区未写入数据文件,在重新启动时,需要由SMON进行实例恢复,实例恢复需要提取和应用重做日志记录,提取的位置就是从上次检查点发起的位置开始的(检查点之前的数据已经被强制写入到数据文件中去了),这个位置称为RBA(redo byte address),CKPT会不断将这个位置更新到控制文件中去(以确定实例恢复需要从哪儿开始提取日志记录)。
6、ARCHn 归档进程
ARCH(the Archiver Process )负责将再现重做日志复制到归档存储器。 归档进程,这个进程是可选的,如果数据库配置为归档模式,这个进程就是必须的。进档RDBMS运行在ARCHIVELOG模式时ARCH才有效,如果系统没有运行在ARCHIVELOG模式,则系统失效后可能无法恢复。最后让系统运行在ARCHIVELOG模式下,此时归档进程可能有多个。
所谓归档,就是将重做日志文件永久保存(生产库一般都会配置为归档模式)到归档日志文件中。归档日志文件和重做日志文件作用是一样的,只不过重做日志文件会不断被重写,而归档日志文件则保留了关于数据更改的完整的历史记录。
SQL>archive log list //查看是否为归档模式
可以再数据库Mount 模式下开启归档
SQL>alter database archivelog; //开启
SQL>alter database noarchivelog;//关闭
7、RECO 恢复进程
RECO (the Recovery Process)进程用于清除分布式数据库中的未决(pending)事务,它负责分布式事务中本地部分的提交与回滚
8、Dnnn 调度进程
如果选择了Multithreaded Server选项,则对使用的每个通信协议至少有一个调度进程。调度进程(the Dispatcher Process,Dnnn)负责将用户进程的请求转发到一个可用的共享服务器进程,并负责将用户进程的请求转发到一个可用的共享服务器进程,并负责回送响应消息。
9、Snnn 共享服务器进程
当使用共享服务器配置或MTS时,会用到共享服务器进程(the Shared Servers Process ,Snnn).这些进程如同专用服务器进程(Dedicated Server Process),但可以被多个用户共享。
10、LMS Oracle RAC 锁管理服务
使用RAC时,该服务用语管理集群中不同节点间的锁.
11、QMNn 队列管理进程
使用高级队列选项时(advanced queueing option),队列管理进程 (Queue Manager Process )用于管理作业队列,队列数目可以
达到10个,QMN0——QMN9
12、MMON(Manageability Monitor)
数据库的自我监视和自我调整的支持进程。实例在运行中,会收集大量有关实例活动和性能的统计数据,这些数据会收集到SGA中,MMON定期从SGA中捕获这些统计数据,并将其写入到数据字典中,便于后续对这些快照进行分析。(默认情况,MMON每隔一个小时收集一次快照)
进程之间的协助
Ckpt、lgwr、dbwn之间的协作。
Ckpt:每隔3秒或更频繁写一次,写入控制文件,记录DBWN从SGA写入磁盘的块的位置。
LGWR:每3秒,1/3满buffer,commit,DBWN写之前。将buffer中数据写入物理文件。
DBWN:将SGA中脏块写入datafile。