`
linsea
  • 浏览: 87715 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Oracle进程类别

阅读更多

Oracle进程类别

 

n        Oracle实例主要有3类进程:

Ø         服务器进程(server process):这些进程根据客户的请求来完成工作。我们已经对专用服务器和共享服务器有了一定的了解。它们就是服务器进程。

Ø         后台进程(background process):这些进程随数据库而启动,用于完成各种维护任务,如将块写至磁盘、维护在线重做日志、清理异常中止的进程等。

Ø         从属进程(slave process):这些进程类似于后台进程,不过它们要代表后台进程或服务器进程完成一些额外的工作。

专用服务器(dedicated server)连接,采用专用服务器连接时,会在服务器上得到针对这个连接的一个专用进程。数据库连接与服务器上的一个进程或线程之间存在一对一的映射。

共享服务器(shared server)连接,采用共享服务器连接时,多个会话可以共享一个服务器进程池,其中的进程由Oracle实例生成和管理。你所连接的是一个数据库调度器(dispatcher),而不是特意为连接创建的一个专用服务器进程。

 

n        连接与会话

连接并不是会话的同义词,在一条连接上可以建立0个、一个或多个会话。各个会话是单独而且独立的,即使它们共享同一条数据库物理连接也是如此。一个会话中的提交不会影响该连接上的任何其他会话。实际上,还可以有连接而无相应的会话。另外,一个会话可以有连接也可以没有连接。使用高级Oracle Net特性(如连接池)时,客户可以删除一条物理连接,而会话依然保留(但是会话会空闲)。客户在这个会话上执行某个操作时,它会重新建立物理连接。

连接(connection):连接是从客户到Oracle实例的一条物理路径。连接可以在网络上建立,或者通过IPC机制建立。通常会在客户进程与一个专用服务器或一个调度器之间建立连接。

会话(session):会话是实例中存在的一个逻辑实体。这就是你的会话状态(session state),也就是表示特定会话的一组内存中的数据结构。提到“数据库连接”时,大多数人首先想到的就是“会话”。你要在服务器中的会话上执行SQL、提交事务和运行存储过程。

 

专用服务器模式中连接与会话的例子:如果一个用户连接上数据库进行操作,操作时也打开set autotrace on statistics 则会创建一个跟踪统计的会话,此时一个连接有两个会话。如果用户执行命令disconnect,(其实这个命令真正的意思应该是“destroy_all_session”,因为用户并没有真正断开连接,如果要真正断开连接,则应该执行“exit“命令。)另一个用户在另一个窗口中打开另一个会话查询系统会话视图v$session则不会看到之前的会话,但仍有一个进程,即相应地有一条物理连接。这说明可以有连接而没有会话。之前的用户可以使用connect命令(真正的意思应该是create_session)在刚才的连接上再创建新会话。

 

如果是共享服务器模式,一个会话可能由多个服务进程轮流为之服务,一个进程可能为多个会话服务。简单地说,连接和会话之间有一种多对多的关系。

1. 什么时候使用专用服务器?

因为存在一对一的映射,所以不必担心长时间运行的事务会阻塞其他事务。其他事务只通过其自己的专用进程来处理。因此,在非OLTP环境中,也就是可能有长时间运行事务的情况下,应该只考虑使用这种模式。专用服务器是Oracle的推荐配置,它能很好地扩缩。只要服务器有足够的硬件(CPURAM)来应对系统所需的专用服务器进程个数,专用服务器甚至可以用于数千条并发连接。

某些操作必须在专用服务器模式下执行,如数据库启动和关闭,所以每个数据库中可能同时有专用服务器和共享服务器,也可能只设置一个专用服务器。

 

2. 什么时候使用共享服务器?

对于共享服务器,则有一种多对一的关系:多个客户对应一个共享服务器。共享服务器的首要原则:要确保事务的持续时间尽量短。事务可以频繁地执行,但必须在短时间内执行完(这正是OLTP系统的特点)。

共享服务器只适用于OLTP系统,这种系统的特点是事务短而且频繁。共享服务器对数据仓库很不适用,因为在数据仓库中,可能会执行耗时1分钟、2分钟、5分钟甚至更长时间的查询。

如果你的系统中90%都是OLTP,只有10%“不那么OLTP”,那么可以在同一个实例上适当地混合使用专用服务器和共享服务器。

许多高级连接特性都要求使用共享服务器。如果你想使用Oracle Net连接池,就必须使用共享服务器。如果你想在数据库之间使用数据库链接集合(database link concentration),也必须对这些连接使用共享服务器。

共享服务器主要为我们做3件事:减少操作系统进程/线程数,刻意地限制并发度,以及减少系统所需的内存。

使用共享服务器时,UGASGA中分配。这说明,转变为共享服务器时,必须能准确地确定需要多少UGA内存,并适当地在SGA中分配(通过LARGE_POOL_SIZE参数)。所以,共享服务器配置中对SGA的需求通常很大。这个内存一般要预分配,从而只能由数据库实例使用。

注意 对于大小可以调整的SGA,随着时间的推移确实可以扩大或收缩这个内存,但是在大多数情况下,它会由数据库实例所“拥有”,其他进程不能使用。

 

 

后台进程

 

可以使用一个V$视图查看所有可能的Oracle后台进程,确定你的系统中正在使用哪些后台进程:select paddr, name, description from v$bgprocess order by paddr desc

 

有两类后台进程:有一个中心(focused)任务的进程(如前所述)以及完成各种其他任务的进程(即工具进程)。

 

主要的Oracle后台进程:

1. PMON:进程监视器(Process Monitor

这个进程负责在出现异常中止的连接之后完成清理。PMON会回滚未提交的工作,并释放为失败进程分配的SGA资源。PMON还负责监视其他的Oracle后台进程,并在必要时(如果可能的话)重启这些后台进程。PMON还会为实例做另一件事,这就是向Oracle TNS监听器注册这个实例。实例启动时,PMON进程会询问公认的端口地址(除非直接指定),来查看是否启动并运行了一个监听器。

 

2. SMON:系统监视器(System Monitor

SMON进程要完成所有“系统级”任务。是一种数据库“垃圾收集器”。SMON所做的工作包括:

l         清理临时空间:例如,建立一个索引时,创建时为索引分配的区段标记为TEMPORARY。如果出于某种原因CREATE INDEX会话中止了,SMON就要负责清理。其他操作创建的临时区段也要由SMON负责清理。

l         合并空闲空间:如果你在使用字典管理的表空间,SMON要负责取得表空间中相互连续的空闲区段,并把它们合并为一个更大的空闲区段。

l         针对原来不可用的文件恢复活动的事务:这类似于数据库启动时SMON的作用:SMON会恢复一些失败的活动事务。

l         执行RAC中失败节点的实例恢复:在一个Oracle RAC配置中,集群中的一个数据库实例失败时,为该失败实例完成所有数据的恢复。

l         清理OBJ$OBJ$是一个低级数据字典表,SMON进程删除这些不再需要的行。

l         收缩回滚段:如果有设置,SMON会自动将回滚段收缩为所设置的最佳大小。

l         “离线”回滚段。

除此之外,它还会做许多其他的事情,如将DBA_TAB_MONITORING视图中的监视统计信息刷新输出,将SMON_SCN_TIME表中的SCN-时间戳映射信息刷新输出等。

 

3. RECO:分布式数据库恢复(Distributed Database Recovery

RECO有一个很中心的任务:由于两段提交(two-phase commit2PC)期间的崩溃或连接丢失等原因,有些事务可能会保持准备状态,这个进程就是要恢复这些事务。可疑的分布式事务可能导致写入器阻塞读取器(Oracle中只有此时会发生“写阻塞读”的情况)。

 

4. CKPT:检查点进程(Checkpoint Process

检查点进程并不像它的名字所暗示的那样真的建立检查点,建立检查点主要是DBWn的任务。CKPT只是更新数据文件的文件首部,以辅助真正建立检查点的进程(DBWn)。

 

5. DBWn:数据库块写入器(Database Block Writer

数据库块写入器(DBWn)是负责将脏块写入磁盘的后台进程。DBWn会写出缓冲区缓存中的脏块,通常是为了在缓存中腾出更多的空间(释放缓冲区来读入其他数据),或者是为了推进检查点(将在线重做日志文件中的位置前移,如果出现失败,Oracle会从这个位置开始读取来恢复实例)。

 

6. LGWR:日志写入器(Log Writer

LGWR进程负责将SGA中重做日志缓冲区的内容刷新输出到磁盘。如果满足以下某个条件,就会做这个工作:

l         3秒会刷新输出一次

l         任何事务发出一个提交时

l         重做日志缓冲区1/3满,或者已经包含1 MB的缓冲数据

 

7. ARCn:归档进程(Archive Process

ARCn进程的任务是:当LGWR将在线重做日志文件填满时,就将其复制到另一个位置。

 

8. 其他中心进程

自动存储管理后台(Automatic Storage Management BackgroundASMB)进程。

重新平衡(RebalanceRBAL)进程。

 

以下进程是RAC环境所特有的,如果不是RAC环境,则看不到这些进程。

锁监视器(Lock monitorLMON)进程:LMON监视集群中的所有实例,检测是否有实例失败。这有利于恢复失败实例持有的全局锁。

锁管理器守护(Lock manager daemonLMD)进程。

锁管理器服务器(Lock manager serverLMSn)进程。

锁(Lock, LCK0)进程。

可诊断性守护(Diagnosability daemon, DIAG)进程。

 

5.2.2  工具后台进程

 

1. CJQ0Jnnn进程:作业队列

Jnnn进程会不断地来来去去,也就是说,如果配置了最多1 000Jnnn进程,并不会看到真的有1 000个进程随数据库启动。相反,开始时只会启动一个进程,即作业队列协调器(CJQ0),它在作业队列表中看到需要运行的作业时,会启动Jnnn进程。如果Jnnn进程完成其工作,并发现没有要处理的新作业,此时Jnnn进程就会退出,也就是说,会消失。

 

2. QMNCQnnn:高级队列

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

参数AQ_TM_PROCESSES 可以指定最多创建10个这样的进程(分别名为Q000,…,Q009),以及一个QMNC进程。如果AQ_TM_PROCESSES设置为0,就没有QMNCQnnn进程。不同于作业队列所用的Jnnn进程,Qnnn进程是持久的。如果将 AQ_TM_PROCESSES设置为10,数据库启动时可以看到10Qnnn进程和一个QMNC进程,而且在实例的整个生存期中这些进程都存在。

 

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

EMNn进程是AQ体系结构的一部分,用于通知对某些消息感兴趣的队列订购者。

 

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

这个进程是Oracle 10g 中新增的,自动设置SGA大小特性会使用这个进程。

 

5. MMONMMNLMnnn:可管理性监视器(Manageability Monitor

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

 

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

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

 

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

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

 

5.3  从属进程

从属进程(slave process)。Oracle中有两类从属进程:I/O从属进程和并行查询从属进程。

 

5.3.1  I/O从属进程

 

I/O从属进程用于为不支持异步I/O的系统或设备模拟异步I/O。采用这种方式,可以得到更高的吞吐量,这是因为会由I/O从属进程来等待慢速的设备,而原来的调用进程得以脱身,可以做其他重要的工作来收集下一次要写的数据。

I/O从属进程在<

分享到:
评论

相关推荐

    最全的oracle常用命令大全.txt

    下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。 1、用户 查看当前用户的缺省表空间 SQL&gt;select username,default_tablespace from user_users; 查看当前用户的角色 SQL&gt;select * from user_...

    oracle动态性能表

    该视图还有一列class-统计类别但极少会被使用,各类信息如下: 1 代表事例活动 2 代表Redo buffer活动 4 代表锁 8 代表数据缓冲活动 16 代表OS活动 32 代表并行活动 64 代表表访问 128 代表调试信息 注意:Statistic...

    Oracle9i&10g编程艺术:深入数据库体系构(价值99¥)

    本书是一本关于Oracle 9j az& 10g数据库体系结构的权威图书,涵盖了所有最重要的Oracle体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,以及分区和并行,并利用具体的...

    oracle数据库经典题目

    1.在多进程Oracle实例系统中,进程分为用户进程、后台进程和服务进程。 2.标准的SQL语言语句类型可以分为:数据定义语句(DDL)、数据操纵语句(DML)和数据控制语句(DCL)。 3.在需要滤除查询结果中重复的行时,必须...

    orcale常用命令

    下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。 1、用户 查看当前用户的缺省表空间 SQL&gt;select username,default_tablespace from user_users; 查看当前用户的角色 SQL&gt;select * from user_...

    2008--2009中国电信业运营支撑系统市场研究报告

    表7-28 Oracle Siebel CRM 支撑业务类别和用户数 280 表7-29 Oracle 2005-2008年签定的项目 280 表7-30 EMC 2005-2008年公司运营总收入情况 282 表7-31 Accenture 2005-2008财年公司运营总收入情况 282 表7-32 ...

    Toad 使用快速入门

     按照 模式-&gt;对象类别 -&gt;对象-&gt;对象可操作属性 -&gt; 对象本身的详细信息和对象相关的信息 来组织,非常有条理,容易定位对象,也能够看到所有你需要的对象的相关信息。 对于表: i. 完备的建表向导,不用输入...

    数据库优化设计方案.doc

    用户的进程对这个内存区发送事务,并且以这里作为高速缓存读取命中的数据 ,以实现加速的目的。正确的SGA大小对数据库的性能至关重要。SGA包括以下几个部分 : 1、数据块缓冲区(data block buffer cache)是SGA中的...

    精通Qt4编程(第二版)源代码

    因为Qt 4框架设计得非常优秀,在2006年的第16届Jolt大奖上,Qt 4获得了类库、框架和组件类别的Jolt生产力奖。 \和Java的“一次编译,到处运行”跨平台不同的是,Qt是源代码级的跨平台,一次编写,随处编译。一次...

    精通qt4编程(源代码)

    因为Qt 4框架设计得非常优秀,在2006年的第16届Jolt大奖上,Qt 4获得了类库、框架和组件类别的Jolt生产力奖。 \和Java的“一次编译,到处运行”跨平台不同的是,Qt是源代码级的跨平台,一次编写,随处编译。一次开发...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意...

    C#.net_经典编程例子400个

    142 3.6 Process组件 143 实例102 使用Process组件访问本地进程 143 3.7 Timer组件 145 实例103 使用Timer组件制作计时器 145 实例104 使用Timer组件显示当前系统时间 150 实例105 ...

    C#程序开发范例宝典(第2版).part13

    实例110 使用Process组件访问本地进程 159 3.7 Timer组件 161 实例111 使用Timer组件制作计时器 161 实例112 使用Timer组件显示当前系统时间 165 实例113 使用Timer组件制作左右飘动的窗体 166 实例114 使用...

    C#程序开发范例宝典(第2版).part08

    实例110 使用Process组件访问本地进程 159 3.7 Timer组件 161 实例111 使用Timer组件制作计时器 161 实例112 使用Timer组件显示当前系统时间 165 实例113 使用Timer组件制作左右飘动的窗体 166 实例114 使用...

    C#程序开发范例宝典(第2版).part02

    实例110 使用Process组件访问本地进程 159 3.7 Timer组件 161 实例111 使用Timer组件制作计时器 161 实例112 使用Timer组件显示当前系统时间 165 实例113 使用Timer组件制作左右飘动的窗体 166 实例114 使用...

    C#程序开发范例宝典(第2版).part12

    实例110 使用Process组件访问本地进程 159 3.7 Timer组件 161 实例111 使用Timer组件制作计时器 161 实例112 使用Timer组件显示当前系统时间 165 实例113 使用Timer组件制作左右飘动的窗体 166 实例114 使用...

Global site tag (gtag.js) - Google Analytics