Oracle的后台进程,是在平时运维中必须要了解的知识,了解后台进程的作用,能够让你更快的从alter中定位到问题,接下来就简单介绍下常见的几个后台进程:
Process Monitor Process (PMON)
1.监控后台进程运行状况
2.如果某些进程异常中断,PMON去释放会话资源以及占用的锁LOCK
3.更新事务表的标志以及清除事务XID的标记
4.清除异常中断会话在BUFFER CACHE占用的缓存
5.PMON也负责定期把数据库实例注册到监听器中
v$cleanup_process展示了PMON的进程信息,这个视图是12cR2中新加入的。
v$dead_cleanup展示了被kill的进程和cleanup status,也是12cR2中新加入的。
System Monitor Process (SMON)
SMON负责系统监视已经一些系统清理及恢复工作,这些工作主要包括:
1.清理临时空间以及临时段
SMON负责在数据库启动时清理临时表空间中的临时段,或者一些异常操作过程遗留下来的临时段,例如,当创建索引过程中,创建期间分配给索引的Segment被标志为TEMPORARY,如果Create Index (或rebuild Index等)会话因某些原因异常中断,SMON负责清理这些临时段。
2.接合空闲空间
在DMT(字典管理表空间)中,SMON负责把那些在表空间中空闲的并且互相是邻近的Extent接合成一个较大的空闲扩展区,这需要表空间的pctincrease设置为非零值。
3.执行实例恢复(Instance recovery)
在实例恢复过程中,SMON的工作包括三个环节:应用Redo执行前滚、打开数据库提供访问、回滚未提交数据
4.离线(Offline)回滚段
在自动回滚段管理(AUM)中负责Offline不再需要的回滚段
5.执行并行恢复
Database Writer Process (DBW)
即database write process,作用是将database buffer cache中的脏buffer写入数据文件中。
一个DBW进程(DBW0)对于大部分系统来说已经够用,可以通过db_writer_processes参数来增加额外的DBW进程,编号从DBW1到DBW9,或DBWa到DBWz,或BW36到BW99,能够在系统频繁修改数据时提高写性能。但是在单处理器系统下,只能有一个DBW进程。
DBW的触发条件:
1.在buffer cache中没有空余的空间,脏buffer过多,达到阀值。
2.发生checkpoint事件。
3.表空间变为read-only,offline或backup。
Log Writer Process (LGWR)
LGWR的作用是把redo log buffer的数据从内存写到磁盘的REDO文件里,完成数据库对象创建、更新数据等操作过程的记录。
LGWR触发条件:
1.commit。
2.redo日志切换。
3.每隔3秒钟,LGWR执行一次。
4.redo log buffer三分之一满,或者buffer data达到1MB大小。
5.先于DBW执行,在DBW执行写脏buffer到数据文件前,数据库必须将相关的日志写入redo log buffer中。如果DBW发现有些日志没有写,DBW会向LGWR发 出信号去写日志,在等LGWR写完后在将脏buffer写入到数据文件中。
Checkpoint Process (CKPT)
CKPT的作用是更新控制文件和数据文件头的SCN和触发DBWR将脏buffer写入数据文件中。
checkpoint主要2个作用:
- 保证数据库的一致性,这是指将脏数据写入到硬盘,保证内存和硬盘上的数据是一样的;
- 缩短实例恢复的时间,实例恢复要把实例异常关闭前没有写出到硬盘的脏数据通过日志进行恢复。如果脏块过多,实例恢复的时间也会很长,检查点的发生可以减少脏块的数量,从而提高实例恢复的时间。
CKPT触发条件:
1.日志切换,通过ALTER SYSTEM SWITCH LOGFILE。
2.DBA发出checkpoint命令,通过ALTER SYSTEM checkpoint。
3.对数据文件进行热备时,针对该数据文件的checkpoint也会进行,ALTER TABLESPACE TS_NAME BEGIN BACKUP/END BACKUP。
4.当运行ALTER TABLESPACE/DATAFILE READ ONLY的时候。
5.SHUTDOWN命令发出时。