Oracle进程

来着TOM的《oracle 编程艺术 9i,10g,11g》数据库

 

PMON编程

 PMON,进程监视。PMON主要有3个用途:安全

 1,在进程非正常中断后,作清理工做。例如:dedicated server失败了或者由于一些缘由被杀死,这是PMON的工做分两种。第一,是对dedicated server所作的工做进行恢复或撤销。第二:是释放dedicated server占用的资源。PMON会把失败进程的未提交的工做进行rollback,释放锁,释放SGA空间session

 2,在进程abort后,PMON进行清理工做。PMON会监视oracle其余的后台进程,并在须要的时候对它们进行重建。若是shared server或者dispatcher失败后,PMON会介入其中,并在清理完失败进程后,重建一个shared server或dispatcher。例如:在数据库进行写日志的时候LGWR进程失败,这是个很严重的错误。解决这种问题最安全的方法是当即中断实例,并恢复。oracle

 3,PMON的第三个用途是,向Oracle TNS listener注册实例信息。在实例启动的时候,PMON会查询oracle的默认端口(1521端口)是否处于工做状态。若是这个端口已经处于工做状态,那么该实例就能够启动,PMON把实例的相关信息告诉listener,包括服务名、实例的信息等。若是listener没有启动,PMON就会按期的尝试去链接listener。这里要注意若是oracle没有是默认的1521端口,而是使用其余的端口时,PMON和listener的链接过程和使用1521端口仍是很类似的,除了,在使用非默认端口时,listener的地址要在参数LOCAL_LISTENER中指定。异步

 

SMONasync

 SMON,系统监视。SMON的工做以下:性能

 1,清理临时空间。优化

 2,聚合空闲空间。若是使用dictionary-managed 方式来管理表空间,SMON就要负责把空闲的extent聚合成大的空闲extent。这种状况只有在表空间的管理方式是dictionary-managed ,且参数PCTINCREASE被设置成非零值的时候才会发生。spa

 3,对不可用文件的事务恢复。在数据库启动的时候,SMON会恢复失败的事务,这些事务是在实例恢复或crash恢复的时候被跳过的。例如:在磁盘上某哥文件不可用了,在这个文件又从新可用后,SMON会恢复它。

 4,在RAC的单节点故障上进行实例恢复。在RAC 环境下,若是cluster(簇群)中有一个实例失败了(如:实例所在的机器挂掉了),在这个cluster上的其余的节点会打开失败实例的redo log,并恢复失败实例

 5,清理OBJ$。OBJ$是个低级别的数据字典,它几乎包含了数据库中全部的objects的entry。多数时候,有的entries的objects已经被删除了,或者当前的entry表明的再也不是最新的objects。SMON就负责删除这些entry信息了

 6,收缩undo segments。SMON会自动把rollback segment收缩到最优的大小

 7,离线rollback segments。DBA可能须要把一个处于active状态的事务的rollback segment离线。此时若是事务正在使用这个已经离线的rollback segment,那么这个segment并未真的离线,而是被标记为“pending offline"。在后台,SMON会一直尝试离线这个segment,直到成功。

 此外,SMON还会刷新视图DBA_TAB_MONITORING的统计信息等。SMON会消耗大量的CPU。SMON会按期地,或被其余后台进程唤醒,来执行清理工做。

 

CKPT

 CKPT,检查点进程。CKPT进程并不像它的名字说的那样进行checkpoint,执行checkpoint是DBWn的工做。它只是来更新数据文件头的。oracle8.0以前,CKPT只是一个可选的进程。但oracle8.0以后,CKPT进程就进程被打开。过去更新数据文件头的checkpoint 信息是LGWR的工做,然而,随着数据库文件的增长,LGWR的负担也变得愈来愈重。若是LGWR要更新100,甚至1000哥文件头,那么就会有不少的session等待很长时间去commit。全部CKPT就把这个工做承担下来了

 

DBWn

 DBWn,数据写进程。DBWn负责把缓冲区的脏数据写到磁盘上。在oracle发生switch log files的时候,会发生checkpoint。checkpoint发生后,在redo log中的数据就能够被覆盖了。若是在redo log被填满,且要从新利用redo log 来存放新的数据时,而此时checkpoint还为完成,oracle就会返回”checkpoint not complete“。

 DBWn的性能至关重要。若是DBWn写数据的速度不够快,这样释放出空闲buffer的速度也就不会快。那么Free Buffer Waits 和Write Complete Waits的值就会很快的增加。

 oracle能够配置多达36个DBW进程。从DBW0到DBW35.多数系统只有一个DBW进程,但在多CPU系统中就可能不止一个DBW进程了。这样作的目的是分散写数据的负担,保证SGA中有足够的空闲空间。

 优化状况下,DBW是经过异步(asynchronous)I/O向磁盘写数据的。经过异步I/O,DBW先把blocks组成一个batch(一捆),再把batch递交给OS,DBW不会等待OS把batch写入到磁盘,而是返回,继续收集下一个batch。当OS完成写后,会异步通知DBW进程,已经把batch成功的写入到磁盘了。

 最后,DBW进程是分散地把数据写到磁盘上的。而LGWR是连续写redo log。分散写要比连续写耗时的多。可是,DBW是在后台进行分散写的,而LGWR作连续写是为了减小用户等待的时间。

 疑问:TOM说DBWn是把blocks组成一个batch,而后异步交给OS,让OS写到磁盘的。为啥又说DBWn是分散写数据的,写数据的活不是OS干的吗?

 

LGWR

 LGWR,日志写进程。LGWR是把SGA中redo log buffer的信息写到redo log file的进程。LGWR会在下面状况发生:

 1,每一个3秒钟,进行一次LGWR

 2,任何事务进行了commit

 3,当redo log buffer是1/3满,或者里面有1MB的数据

 基于以上的缘由,把redo log buffer设置的很大就不必的。

 

ARCn

 ARCn,归档进程。ARCn的工做是在LGWR把onlone redo log填满后,ARCn把redo log file的内容copy到其余的地方。归档日志能够用来作media recovery。online redo log 是被用来为实例失败的时候,恢复数据文件。而归档日志是被用来在media recovery的时候,恢复数据文件。

相关文章
相关标签/搜索