Oracle 进程

   Oracle实例有三类进程:

   1. 服务器进程(server process):这些进程根据客户的请求来完成工作。
   2. 后台进程(background process):这些进程随数据库而启动,用于完成各种维护任务,如将块写至磁盘、维护在线重做日志、清理异常中止的进程等。
   3. 从属进程(slave process):这些进程类似于后台进程,不过它们要代表后台进程或服务器进程完成一些额外的工作。


   下面分别从这个三个方面讲:

1. 服务器进程

    Oracle有两种连接:一种是专用服务器连接, 另一种是共享服务器连接,这些在前面的博文已经总结过。这里要区分的是连接(connection)与会话(session):

     连接是客户进程与Oracle实例之间的一条物理路径,例如一条网络连接

     会话是数据库中的逻辑实体,客户进程可以在上面执行SQL等,多个独立的会话可以与一个连接相关联,这些会话甚至可以独立于连接存在。

     连接只是客户进程和数据库实例之间的一条特殊路线,这个连接可以连接到一个专用服务器进程,也可能连接到调度器。连接可以有0个会话或多个会话。使用高级Oracl连接池,客户可以删除一条物理连接,但是会话还是会保留。

 

2.  后台进程

     后台进程保证数据库运行所需的实质维护任务。

     这些进程包括:

     PMON:进程监视器(Process Monitor),这个进程负责出现异常中止的连接之后完成的清理。

     SMON:系统监视器(System Monitor),SMON要完成所有系统级别的任务,PMON关注的是单个进程,而SMON是以系统级为出发点的。

     RECO:分布式数据库恢复(Distributed Database Recovery),RECO有一个很中心的任务:由于两段提交(two-phase commit,2PC)期间的崩溃或连接丢失等原因,有些事务可能会保持准备状态,这个进程就是要恢复这些事务。

     CKPT:检查点进程(Checkpoint Process),检查点进程并不像它的名字所暗示的那样真的建立检查点(检查点在第3章介绍重做日志一节中已经讨论过),建立检查点主要是DBWn的任务。CKPT只是更新数据文件的文件首部,以辅助真正建立检查点的进程(DBWn)。

     DBWn:数据库块写入器(Database Block Writer),数据库块写入器(DBWn)是负责将脏块写入磁盘的后台进程。DBWn会写出缓冲区缓存中的脏块,通常是为了在缓存中腾出更多的空间(释放缓冲区来读入其他数据),或者是为了推进检查点(将在线重做日志文件中的位置前移,如果出现失败,Oracle会从这个位置开始读取来恢复实例)。Oracle切换日志文件时就会标记(建立)一个检查点。Oracle需要推进检查点,推进检查点后,就不再需要它刚填满的在线重做日志文件了。如果需要重用这个重做日志文件,而此时它还依赖于原来的重做日志文件,我们就会得到一个“检查点未完成”消息,而必须等待。

     LGWR:日志写入器(Log Writer),LGWR进程负责将SGA中重做日志缓冲区的内容刷新输出到磁盘(写到Redo Log里)。

     LGWR与DBWn的区别是,DBWn会做大量的分散写,LGWR则是向重做日志完成大量的顺序写。

     ARCn:归档进程(Archive Process),ARCn进程的任务是:当LGWR将在线重做日志文件填满时,就将其复制到另一个位置。此后这些归档的重做日志文件可以用于完成介质恢复。

     还有一些其他的就不在详述。

 

3.  从属进程

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

     I/O从属进程:

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

 

     并行查询从属进程:

     Oracle 7.1.6 引入了并行查询功能。这个功能是指:对于SELECT、CREATE TABLE、CREATE INDEX、UPDATE等SQL语句,创建一个执行计划,其中包含可以同时完成的多个(子)执行计划。将每个执行计划的输出合并在一起构成一个更大的结果。其目标是仅用少量的时间来完成操作,这只是串行完成同一操作所需时间的一小部分。例如,假设有一个相当大的表,分布在10个不同的文件上。你配置有16个CPU,并且需要在这个表上执行一个即席查询。另一种方法是:可以将这个查询计划分解为32个小部分,并充分地利用机器;而不是只使用一个进程串行地读取和处理所有数据。相比之下,前一种做法要好得多。
     使用并行查询时,会看到名为Pnnn的进程,这些就是并行查询从属进程。处理一条并行语句时,服务器进程则称为并行查询协调器(parallel query coordinator)。操作系统上服务器进程的名字并不会改变,但是阅读有关并行查询的文档时,如果提到了协调器进程,你应该知道这就是原来的服务器进程。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值