Oracle中的后台进程
为了使多数用户获得最佳的性能体验,Oracle系统中融合了一些后台进程(background processes)
。常见的后台进程包含 DBWn
、LGWR
、CKPT
、SMON
、PMON
、RECO
、ARCn
、QUNn
及其他一些后台进程。
Oracle数据库由数据库
和实例
两部分组成,一个实例总是拥有多个后台进程,且后台进程总是伴随实例的启动而启动。通过 V$BGPROCESS
视图可以查看实例的所有后台进程的相关信息。
图为多进程体系架构下的Oracle实例的后台进程
SMON监控进程
SMON(System Monitor Process, 系统监控进程)
主要负责实例启动(Instance Startup)阶段的实例恢复(Instance Recovery)。同时,还负责清理内存中不再使用的临时区段(temporary segments),并合并由字典管理的表空间中的连续的空闲数据块。
在实例运行过程中,因为文件读取(file-read)或数据文件离线(offline)所产生数据库的异常,这将导致在实例进行恢复时所有呗中断的事务都会被忽略掉。而这些被忽略的异常将会通过SMON
进程启动时在表空间中或文件重新在线后进行恢复。
SMON 是一个周期性执行的进程,在实例运行过程中,SMON 后台进程会被定期唤醒,并且其他进程需要时也可以调用SMON进程。
在一些实时应用集群(例如,Oracle RAC)中,一个实例的SMON可以为故障的CPU或实例进行故障恢复。
-
主要功能
- 系统启动阶段的实例恢复
- 清理不再使用的临时区段
- 合并表空间中连续区域的空闲数据块
- 安装/打开数据库
- 恢复被异常中断的事务(表空间/数据文件等恢复正常时)
PMON监控进程
PMON(Process Monitor Process, 进程监控进程)
负责清理内存中存储区域(数据库高速缓冲区,Database Buffer Cache)中的缓存并释放用户进程正在使用的资源。并且在用户进程异常退出后进行恢复操作。
与SMON相同,PMON同样是一个周期性的后台监控进程。PMON后台进程会定期检查实例中的调度进程和用户进程是否正常,当监控进程检查到非正常退出的进程后,PMON进程会尝试重启该进程,但是被Oracle标记/终止的进程则PMON不会尝试去启动这些进程。
PMON进程会被周期性的唤醒,并且当其他进程需要时可以调用/唤醒PMON后台进程。
当PMON进程异常退出时,数据库/实例也会发生崩溃并退出,直到PMON后台进程恢复服务后,数据库/实例方可提供正常服务。
-
主要功能
- 释放用户进程所持有的资源
- 清理内存中不被使用的缓存信息
- 将数据库服务注册到监听(TNS)中
- 监控后台核心进程(恢复异常的核心进程)