Oracle 工具后台进程

这些后台进程都是可选的,可以根据你的需要来选用。它们提供了一些工具,不过这些工具并不是每天运行数据库所必需要的,除非你自己要使用(如作业队列),

或者你要利用使用了这些工具的特性(如新增加的Oracle 10g诊断功能).

 

在UNIX中,这些进程可以像其他后台进程一样可见,如果你执行ps命令,就能看到这些进程。在介绍中心后台进程那一节的开始,我列出了ps命令的执行的执行结果

(这里列出其中一部分),可以看到,我有以下进程:

配置了作业队列:CJQ0进程是作业队列协调器(job queue coordinator).

配置了Oracle AQ,从Q000(AQ队列进程,AQ queue process)和QMNC(AQ 监视器进程,AQ monistor process)可以看出。

 

启用了自设置SGA大小,由内存管理器(memory manager,MMAN)进程可以看出。

 

启用了Oracle 10g可管理性/诊断性,由可管理性监视器(manageability monitor,MMON)和可管理性监视器灯(manageability monitor light,MMNL)进程可以看出:

 

1.CJQ0和Jnnn进程:作业队列

在第一个7.0版本中,Oracle通过一种称为快照(snapshot)的数据库对象来提供复制特性。作业队列就是刷新快照(或将快照置为当前快照)进使用的内部机制。

作业队列进程监视一个作业表,这个作业表告诉它何时需要刷新系统中的各个快照。

作业队列进程监视一个作业表,这个作业表告诉它何时需要刷新系统中的各个快照。在Oracle 7.1中,Oracle公司通过一个名为DBMS_JOB的数据库包提供这个功能。

所以,原告7.0中与快照相关的进程到了7.1及以后版本中变马了"作业队列".后来,控制作业队列行为的参数(检查的频度,以及应该有多少个队列进程)名字也发生了变化

,从SNAPSHOT_REFRESH_INTERVAL和SNAPSHOT_REFRESH_PROCESSES变成了JOB_QUEUE_INTERVAL和JOB_QUEUE_PROCESS。在当前版本中,只有JOB_QUEUE_PROCESS参数的设置是用户可调的。

 

最多可以有1000个作业队列进程。名字分别是J000,J001,...,J999。这些进程在复制中大量使用,并作为物化视图刷新进程的一部分。基于流的复制使用AQ来完成复制,因此

不使用作业队列进程。开发人员还经常使用作业队列来高度一次性(后台)作来或反复出现的作业,例如,在后台发送一封电子邮件,或者在后台完成一个长时间运行的批处理。

通过在后台做这些工作,就能达到这种一种效果:尽管一个任务耗时很长,但在性急的最终用户看来所花费的时间并不多(他会认为任务运行得快多了,但事实上可能并非如此).

这与Oracle用LGWR和DBWn进程所做的工作类似,他们在后台做大量工作,所以你不必实时地等待它们完成所有任务。

 

Jnnn进程与共享服务器很相似,但是也有专用服务器中的某些方面。它们处理完一个作业之后再处理下一个作业,从这个意义上讲是共享的,但是它们管理内存的方式更像一个专用服务器(其UGA内存在PGA中,而不是在SGA中).每个作业队列进程一次只运行一个作业,一个接一个地运行,直至完成。正因为如此,如果我们想同时运行多个作业,就需要多个进程。这里不存在多纯种或作来的抢占。一旦运行一个作业,就会一直运行到完成(或失败).

你会注意到,经过一段时间,Jnnn进程会不断地来来去去,也就是说,如果配置了最多1000个Jnnn进程,并不会看到真的有1000进程随便数据库启动。相反,开始时只会启动

一个进程,即作业队列协调器(CJQ0),它在作业队列中看到需要运行的作业时,会启动Jnnn进程。如果Jnnn进程完成其工作,并发现没有要处理的新作业,此时Jnnn进程就会退出,也就是说,会消失。因此,如果将大多数作业都调度为凌晨2:00运行(没有人在场),你可能永远也看不到这些Jnnn进程。

 

2、QMNC  和 Qnnn:高级队列

QMNC进程对于AQ表来说就相当于CJQ0进程之于作业表。QMNC进程会监视高级队列,并警告从队列中删除等待消息的"出队进程"(dequeuer):已经有一个消息变成可用。QMNC和Qnnn还要负责队列传播(propagation),也就是说,能够将在一个数据库入队(增加)的消息移动另一个数据库的队列中,从而实现出队(dequeueing).

Qnnn 进程对于QMNC进程就相当于Jnnn进程与CJQ0进程的关系。QMNC进程要通知Qnnn进程需要完成什么工作,Qnnn进程则会处理这些工作。

QMNC和Qnnn进程是可选的后台进程。参数AQ_TM_PROCESSES可以指定最多创建10个这样的进程(分别为Q000,。。。,Q008),以及一个QMNC进程。如果AQ——TM_PROCESSES设置为0,就没有QMNC或Qnnn进程。不同于作业队列所用的Jnnn进程,Qnnn进程是持久的。如果将AQ_TM_PROCESSES设置为10,数据库启动时

可以看到10个Qnnn进程和一个QMNC 进程,而且在实例的整个生成期中这些进程都存在。

 

3.EMNn:事件监视器进程(Event Monitor Process)

EMNn进程是AQ体系结构的一部分,用于通知对某些消息感兴趣的队列订购者。通知会异步地完成。可以用一些Oracle调用接口(Oracle Call Interface,OCI)函数来注册消息通知

的回调。回调是OCI程序中的一个函数,只要队列中有了订购者感谢兴趣的消息,就会自动地调用这个函数。EMNn后台进程用于通知订购者,第一次向实例发出通知时会自启动EMNn进程。然后应用可以发出一个显式的message_receive(dequeue)来获得消息。

 

4.MMAN:内存管理器(Memory Manager)

这个进程是Oracle 10g中增加的,自动设置SGA大小特性会使用这个进程。MMAN进程用于协调共享内存中各组件(默认缓冲区池,共享池,Java池和大池) 的大小设置和大小调整。

 

5.MMON,MMNL和Mnnn:可管理性监视器(Manageability Monitor)

这此进程用于填充自动工作负载存储库(Automatic Workload Repository,AWR),这是Oracle 10g中新增的一个特性。MMNL进程会根据调度从SGA将统计结果刷新输出至数据库表。MMON进程用于"自动检测"数据库性能问题,并实现新增的自调整特性.Mnnn进程类似于作业队列的Jnnn和Qnnnn进程:MMON进程会请求这些从属进程代表它完成工作.Mnnn进程本质上是临时性的,它们将根据需要来来去去。

6.CTWR:修改跟踪进程(Change Tracking Process)

这是Oracle 10g数据库中新增的一个可选择进程。CTWR进程负责维护新的修改跟踪文件。

7.RVWR:恢复写入器(Recovery Writer)

这个进程也是Oracle 10g数据库中新增的一个可选进程,负责维护闪回恢复区中块的"前"映像,要与FLASHBACK DATABASE命令一起使用。

8.其他工具后台进程

这就是完整的列表吗?不,还有另外一些工具进程没有列出。例如:Oracle Data Guard有一组与之相关的进程,有利于将重做信息从一个数据库移送到另一个数据库,并应用

这些重做信息。还有一些进程与Oracle 10g新增的数据泵工具有关,在某些数据泵操作中会看到这些进程。另外还有一些流申请和捕获进程。不过,以上所列已经基本涵盖了你可能遇到的大多数据常用的后台进程。

 

下面来看最后一类Oracle进程:从属进程(slave process).Oracle中有两类从属进程:I/O从属进程和并行查询从属进程。

I/O从属进程

I/O从属进程用于为不支持异步I/O的系统或设备模板异步I/O.例如,磁带设备(相当慢)就不支持异步I/O.通过使用I/O从属进程,可以让磁带机模板通常只为磁盘驱动器提供功能。就好像支持真正的异步I/O一样,写设备的进程(调用者)会收集大量数据,并交由写入器写。数据成功地写出时,写入器(此时写入器是I/O从属进程,而不是操作系统)会通知原来的调用者,调用者则会从要写的数据列表中删除这批数据。采用这种主要,可以得到更高的吞吐量,这是因为会由I/O从属进程来等待慢速的设备,而原来的调用进程得以脱身,可以做其他重要的工作来收集下一次要写的数据。

I/O从属进程在Oracle中有两个用途。DBWn和LGWR可以利用I/O从属进程来模板异步I/O,另外RMAN写磁带时也可能利用I/O从属进程。

有两个参数控制着I/O从属进程的使用:

BACKUP_TAPE_IO_SLAVES:这个参数指定RMAN是否使用I/O从属进程将数据备份、复制或恢复到磁带上。由于这段上参数是围绕磁带设备设计的,而且磁带设备一次只能由一个进程访问,所以这个参数是一个布值,而不是所用的从属进程的个数(这可能出乎你的意料).RMAN会为所用的物理设备启动多个必要的从属进程。BACKUP_TAPE_IO_SLAVES=TRUE时,则使用一个I/O从属进程从磁带设备读写。如果这个参数为FALSE,就不会使用I/O从属进程完成备份。相反,完成备份的专用服务器进程会直接访问磁带设备。

DBWR_IO_SLAVES:这个参数指定了DBW0进程所用的I/O从属进程的个数。DBW0进程及其从属进程总是将缓冲区缓存中的脏块写至磁盘。这个值默认为0,表示不使用I/O从属进程。注意,如果将这个参数设置为一个非0的值,LGWR和ARCH也会使用其自己的I/O从属进程,LGWR和ARCH最多允许4个I/O从属进程。

DBWR I/O从属进程的名字是I1nn,LGWR I/O从属进程的名字是I2nn。

 

并行查询从属进程

Oracle 7.1.6引入了并行查询功能。这个功能是指:对于SELECT,CREATE TABLE,CREATE INDEX.UPDATE等SQL语句,创建一个执行计划。其中包含可以同时完成的多个(子)执行计划。将每个执行计划的输出合并在一起构成一个更大的结果。其目标是仅用少量的时间来完成操作,这只是串行完成同一操作所需要时间的一小部分。

例如,假设有一个相当大的表,分布在10个不同文件上。你配置有16个CPU并且需要在这个表上执行一个即度查询。另一种方法是:可以将这个查询计划分解为32个小部分,并充分

地利用机器;而不是只使用一个进程串行读取和处理所有数据。相比之下,前一种做法要好得多。

使用并行查询时,会看名为Pnnn的进程,这些就是并行查询从属进程。处理一条并行语句,服务器进程则称为并行查询协调器(parallel query coordinator).操作系统上服务器进程的名字并不会改变,但是阅读有关并行查询的文档时,如果提到了协调器进程。你应该知道这就是原来的服务器进程。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值