下面就来介绍一下这些在后台辛勤工作的进程们。系统检测器(System Monitor,SMON)、进程监视器(Process
Monitor,PMON)、数据库写入器(Database Writer,DBWn)、日志写入器(Log
Writer,LGWR)、检查点进程(Checkpoint Process,CKPT) 。
1、SMON:安装和打开数据库。通过查找和
验证数据库控制文件来安装数据库。此后,通过查找和验证所有数据文件和联机日志文件打开数据库。一旦打开数据库并使数据库处于使用状态,SMON就负责执行各种内部管理任务。
2、
PMON:用户会话是连接到服务器进程的用户进程。服务器进程在会话创建时启动,在绘画结束时销毁。如果会话正常结束,则用户执行的任何工作都会有序完
成,服务器进程将终止。如果非正常终止会话,PMON将销毁服务器进程,将其PGA内存返回给操作系统,并回滚任何尚在进行的未提交完成的事务。
3、DBWn:会话不直接将数据写入磁盘,而是写入到数据库高速缓存区。然后又数据库写入器负责将缓冲区写入到磁盘。一般来说一个实例可能有多个写入器。依次为DBW0,DBW1等。默认情况是8个CPU对应一个数据库写入器。 通常情况下,Oracle会尽可能的减少写入缓冲区的数量。因为IO操作会降低性能。真实情况中,如果出现会话对某些缓冲区执行写作,那么通常还会有会话对其进行操作。这样,就没有必要将其写入到磁盘了。
DBWn采用极懒算法执行写入:尽可能少,在尽可能少。有四种情况需要进行些操作:
没有可用缓冲区:服务器进程在将块复制到高速缓冲区之前,需要查找可用缓冲区。可用缓冲区是既不脏也未被占用的缓冲区。如果查找可用缓冲区时间过长(Oracle内部自行设定),则会将脏缓冲区写入到磁盘,以清理缓冲区。有Oracle的内部阈值确定,如果超过了,就会将一些缓冲区写到磁盘 。
三秒超时:DBWn每三秒会对一些缓冲区清理一次。即使系统处于闲置状态,也会清理缓冲区。
请求检查点:遇到检查点时,会写入所有的缓冲区数据。此时系统性能下降。检查点只有在不得已的情况下才会设置。关闭数据库和关闭实例时会设置检查点,也可以使用命令来设置。
在这里需要注意一点,在会话提交事务时,DBWn什么也不做,DBWn按照自己的方式执行。此时需要执行的操作是:写入日志缓冲区的数据。
4、
LGWR:日志写入器将日志缓冲区的内容写入到磁盘上的联机日志文件中。当会话发出COMMIT时,LGWR会实时写入:在LGW