欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ORACLE实例的后台进程

程序员文章站 2023-11-17 11:19:04
下面就来介绍一下这些在后台辛勤工作的进程们。系统检测器(system monitor,smon)、进程监视器(process monitor,pmon)、数据库写入器(da...
下面就来介绍一下这些在后台辛勤工作的进程们。系统检测器(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会实时写入:在lgwr将缓冲区写入磁盘时,会话将会被挂起。在oracle体系结构中,lgwr是最大的瓶颈之一。dml的速度不能超过lgwr将更改矢量写入到磁盘的速度。在以下三种情况发生时,lgwr将转储日志缓冲区:

提交写入时:已提交事务的每个更改矢量都可以再磁盘上的重做日志中得到,并可以再此后应用于数据文件备份。

日志缓冲区的占用率达到1/3:在应用程序中,通常在非常短的时间内就能填充满日志缓冲区的1/3,这时强制lgwr将更改矢量准实时的写入磁盘。此后,当会话发生commit时,几乎没有什么要写入的内容:commit可以立即完成。

dbwn需要将脏缓冲区从数据库高速缓存区写入到数据文件时:在dbwn执行写入操作之前,总会执行lgwr的写入操作。目的是:始终可以逆转未提交的事务。dbwn可能会将未提交的事务写入数据文件,如果能过获取逆转事务所需的数据和更改矢量,这样做就不会产生问题。所以,在dbwn执行写入之前,需要执行lgwr的写入,以确保这些数据进入重做日志文件中。

5、ckpt:系统崩溃后,必须从重做日志提取与脏缓冲区对应的所有更改矢量,并将其应用于数据块。这就是恢复过程。频繁的检查点确保:可以将脏缓冲区快速写入磁盘,从而最大程度的减少崩溃发生后必须应用的重做量。在oracle8i之后,采用增量检查点机制,dbwn以固定速率写出脏缓冲区,因此dbwn和lgwr之间始终有一个可以预见的差距。使用增量检查点时系统性能更加平稳,恢复时间可以预测。

当然,在10g之后,oracle又新增了几个进程,这里简单介绍一下:
mmon:管理监视器(maniageability monitor),数据块的自我监视和自我调整的支持进程。
mmnl:mmon的辅助进程。
mman:支持内存分布的自动调整。