ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle进程

Oracle进程

原创 Linux操作系统 作者:spritesong 时间:2009-05-05 09:42:59 0 删除 编辑

Oracle 实例主要有3 类进程:

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

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

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

 

5.1 服务器进程

专用服务器(dedicated server)连接,采用专用服务器连接时,会在服务器上得到针对

这个连接的一个专用进程。数据库连接与服务器上的一个进程或线程之间存在一对一的映射。

共享服务器(shared server)连接,采用共享服务器连接时,多个会话可以共享一个服务

器进程池, 其中的进程由Oracle 实例生成和管理。你所连接的是一个数据库调度器

dispatcher),而不是特意为连接创建的一个专用服务器进程。

 

注意有一点很重要,要知道Oracle 术语中连接和会话之间的区别。连接(connection)就是客户进程与Oracle 实例之间的一条物理路径(例如,客户与实例之间的一个网络连接)。会话(session)则不同,这是数据库中的一个逻辑实体,客户进程可以在会话上执行SQL 等。多个独立的会话可以与一个连接相关联,这些会话甚至可以独立于连接存在。稍后将进一步讨论这个问题

 

5.1.1 专用服务器连接

UNIX 上,可以在同一台机器上运行客户和服务器,就能很清楚地看出这种父/子进程的创建:

5.1.2 共享服务器连接

客户应用会连接到Oracle TNS 监听器,并重定向或转交给一个调度器。调度器充当客户应用和共享服务器进程之间的“导管”。图5-2 显示了与数据库建立共享服务器连接时的体系结构。

5.1.3 连接与会话

在一条连接上可以建立0 个、一个或多个会话。各个会话是单独而且独立的,即使它

们共享同一条数据库物理连接也是如此。一个会话中的提交不会影响该连接上的任何其他会话。实际上,一条连接上的各个会话可以使用不同的用户身份!

Oracle 中,连接只是客户进程和数据库实例之间的一条特殊线路,最常见的就是网络连接。这条连接可能连接到一个专用服务器进程,也可能连接到调度器。

连接(connection):连接是从客户到Oracle 实例的一条物理路径。连接可以在网络上建

立,或者通过IPC 机制建立。通常会在客户进程与一个专用服务器或一个调度器之间建立连接。不过,如果使用Oracle 的连接管理器(Connection Manager CMAN),还可以在客户和CMAN之间以及CMAN 和数据库之间建立连接。CMAN 的介绍超出了本书的范围,不过Oracle NetServices Administrators Guide(可以从http://otn.oracle.com 免费得到)对CMAN 有详细的说明。

会话(session):会话是实例中存在的一个逻辑实体。这就是你的会话状态(session

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

 

这两个会话都使用同一个专用服务器进程,从它们都有同样的PADDR 值就能看出这一点。

 

我们想使用SQL*Plus 来查看一条没有任何会话的连接。这很容易。在上例所用的同一个SQL*Plus 窗口中,只需键入一个“很容易误解”的命令即DISCONNECT。(

注意在SQL*Plus 中要真正地断开连接,应该执行“exit”命令,因为你必须退出才能完全撤销连接。

一条语句可能由多个共享服务器一点一点地处理

连接和会话之间有一种多对多的关系。不过,最常见的是专用服务器与单一会话之间的一

对一关系,这也是大多数人每天所看到的情况

什么时候使用专用服务器

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

什么时候使用共享服务

共享服务器只适用于OLTP 系统,这种系统的特点是事务短而且频繁。在一个OLTP 系统中,事务以毫秒为单位执行,任何事务的执行都会在1 秒以内的片刻时间内完成。

共享服务器的潜在好处

l         减少操作系统进程/线程数

l         刻意地限制并发度

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

P专用服务器与此正好相反,任何人都可以使用未分配给SGA 的任何内存。那么,既然UGA SGA 中分配而使得SGA 相当大,又怎么能节省内存呢? 之所以能节省内存,这是因为共享服务器会分配更少的PGA。每个专用/共享服务器都有一个PGA,即进程信息。PGA 是排序区、散列区以及其他与进程相关的结构。采用共享服务器,就可以从系统去除这部分内存的需求。如果从使用5 000 个专用服务器发展到使用100 个共享服务器,那么通过使用共享服务器,累计起来就能节省4 900 PGA 的内存(但不包括其UGA)。

 

5.2 后台进程

可以使用一个V$视图(v$bgprocess)查看所有可能的Oracle 后台进程,确定你的系统中正在使用哪些后台进程:这个视图中PADDR 不是00 的行都是系统上配置和运行的进程(线程)。

5.2.1 中心后台进程

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

这个进程负责在出现异常中止的连接之后完成清理。例如,如果你的专用服务器“失败”或者出于某种原因被撤销,就要由PMON 进程负责修正(恢复或撤销工作),并释放你的资源。PMON 会回滚未提交的工作,并释放为失败进程分配的SGA 资源。

除了出现异常连接后完成清理外,PMON 还负责监视其他的Oracle 后台进程,并在必要时(如果可能的话)重启这些后台进程。

PMON 还会为实例做另一件事,这就是向Oracle TNS 监听器注册这个实例。

 

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

SMON 进程要完成所有“系统级”任务。PMON 感兴趣的是单个的进程,而SMON 与之不同,它以系统级

为出发点,这是一种数据库“垃圾收集器”。

清理临时空间:

合并空闲空间:

针对原来不可用的文件恢复活动的事务

执行RAC 中失败节点的实例恢复:

清理OBJ$

收缩回滚段

“离线”回滚段

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

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

建立检查点主要是DBWn 的任务。CKPT 只是更新数据文件的文件首部,以辅助真正建立检查点的进程(DBWn)。

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

DBWn 会做大量的分散写(scattered write

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

  • 3 秒会刷新输出一次
  • 任何事务发出一个提交时
  • 重做日志缓冲区1/3 满,或者已经包含1 MB 的缓冲数据

由于这些原因,分配超大的(数百MB)重做日志缓冲区并不实际,Oracle 根本不可能完全使用这个缓冲区。

7. ARCn:归档进程(Archive Process

8. 其他中心进程

 

5.2.2 工具后台进程

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/293106/viewspace-592590/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 文件
下一篇: 内存结构
请登录后发表评论 登录
全部评论

注册时间:2009-03-28

  • 博文量
    62
  • 访问量
    24276