zoukankan      html  css  js  c++  java
  • Oracle专有服务器和共享服务器模式的区别

    节选:[200805]Oracle数据库精讲与疑难解析

    下载地址:http://page2.yunfile.com/file/liul21cn/bfc83c15/

     第7章 理清两个模式问题—专有/共享服务器模式

    7.1  理解专有服务器模式(Dedicated Server Mode)

     “专有服务器模式( Dedicated Server Mode)是Oracle -种特殊的进程结构。其体系结构如图7-1所示

    在专有服务器模式中,用户进程运行在客户端的机器,专有服务器进程运行在数据库服务器端的机器上。用户进程和专有服务器进程是两种不同类型的进程。当客户端发出连接数据库请求的时候,监听器把客户端(用户进程)连接到专有服务器进程。即使这个服务器进程很空闲,这个专有服务器进程也只为这个用户进程服务。用户进程和专有服务器进程之间是一一对应的关系

    专有服务器模式有自己的优点。它适合于下面的应用:

    n  批处理,批处理使服务器进程一直处在忙碌的状态,这就不会造成服务器进程的空闲。导致系统资源的浪费:

    n  使用Recovery Manager(RMAN)进行备份或者恢复。

        当第一个用户登录的时候,监听器会启动一个专有服务器进程为这个用户服务:当第N个用户登录的时候,监听器会启动第N个专有服务器进程为这个用户服务。随着登录用户数量的增加,系统的负担也相应增加。到了一定的时候,数据库服务器将不堪重负,所以,专有服务器模式限制了应用的可扩展性。

    7.2  共享服务器模式(Shared Server Mode)原理

    本节将介绍共享服务器进程的原理及共享服务器进程的配置。共享服务器的配置比较简单,学习时,我们应该把精力集中在共享服务器的原理上。

    7.2.1  共享服务器模式(Shared Server Mode)的架构

    从上面的学习,我们都知道,专有服务器模式适合批处理和大任务的应用:与专有服务器模式(Dedicated Server Mode)相比,共享服务器模式适合有大量并发用户的应用。

    共享服务器模式中,调度进程(Dispatcher)接受多个客户端(用户进程)的连接请求,并把这些请求放到一个公共队列中。空闲的服务器进程从这个公共队列中抓出这些请求,然后完成请求的任务,任务完成后,把结果放到响应队列中,调度进程再从响应队列中把完成的结果返回给用户进程(客户端)。

    由于一个服务器进程不再专为一个用户进程服务,而是为所有的用户进程服务,因此,共享服务器模式在不消耗太多系统资源的情况下,能够支持更多的并发用户连接,提高应用程序的可扩展性。

    一个共享服务器模式的系统由下面三个部分组成。

    l  监听器

    l  一个或者多个调度进程(Dispatcher Processes)

    l  一个或者多个共享服务器进程(Shared Server Processes)

    7.2-2监听器和调度进程的关系

    当数据库实例启动的时候,调度进程(Dispatcher)会把自己的地址告诉监听器(listener)。当用户进程(User Process)请求一个数据库连接的时候,监听器将首先检查这个请求,然后决定该用户进程是否允许使用共享服务器进程( Shared Server Processes)。如果允许,监听器将把负载最小的调度进程的地址返回给用户进程,然后用户进程直接连接到这个调度进程。

    如果用户进程不能够连接到调度进程,或者用户请求的是一个专有服务器连接,则监听器将创建一个专有服务器进程(Dedicated Server Process),并把这个用户进程连接到这个专有服务器进程。

    7.2.3  请求队列(Request Queue)/响应队列(Response Queue)

    当一个用户(用户进程)发出一个调用请求的时候,这个用户进程的调度进程把这个“请求”放在请求队列( Request Queue)中。这个“请求”将一直放在请求队列中,直到有一个空闲的共享服务器进程( Shared Server Process)出现,这个空闲的共享服务器进程将从响应队列申取出这个“请求”,然后进行处理。

    当共享服务器进程处理完这个“请求”的时候,它会把处理“结果”放到响应队列中。这时候,这个共享服务器进程空闲,它将执行在请求队列中的另外一个请求。

    请求队列是一个公共的队列,它被所有的调度进程所共享。请求队列存在于SGA中。共享服务器进程按照先进先出(First-In-First-Out)的原则对请求队列中的请求进行处理。

    响应队列也存在于(SGA)中。与请求队列不同的是,每个调度进程都有自己的响应队列。调度进程会从响应队列中取出完成的请求,返回给用户进程。

    7.2.4 调度进程(Dispatcher Processes, Dnnn)

    调度进程允许用户共享有限的共享服务器进程。与专有服务器模式相比,在相同的用户数量下,Oracle只需少量的服务器进程。因此,共享服务器模式能够支持大量的用户。

    一个实例中,可以有一个或者多个调度进程,但是,每种协议至少应该有一个调度进程。DBA可以对调度进程的数量进行调整。

    7.2.5  共享服务器进程(Shared Server Processes,Snnn)

    共享服务器进程和专有服务器进程具有相同的功能。不同的是,专有服务器进程只为特定的用户进程服务,而共享服务器进程为所有的用户进程服务。

    共享服务器进程的PGA中并不存放用户相关的信息,这些信息存放在SGA,因此这些信息要被所有的共享服务器进程所共享。

    Oracle会动态调整共享服务器进程的数量。但是,无论如何调整,共享服务器进程的数量只能介于SHARED_SERVERS和MAX_SHARED_SERVERS之间。

    个人小结:

    1)    专有服务器的服务进程和用户请求是1对1 的,而共享服务器的服务进程因为有调度进程的关系,共享服务器服务进程和用户请求是1对多的。

    2)    专有服务器模式适合批处理和大任务的应用:与专有服务器模式(Dedicated Server Mode)相比,共享服务器模式适合有大量并发用户的应用。

    3)    共享服务器进程的PGA中并不存放用户相关的信息,这些信息存放在SGA中,因此这些信息要被所有的共享服务器进程所共享。Oracle会动态调整共享服务器进程的数量。但是,无论如何调整,共享服务器进程的数量只能介于SHARED_SERVERS和MAX_SHARED_SERVERS之间。

  • 相关阅读:
    Vim配置IDE开发环境
    Win7任务计划自由预设系统定时自动关机
    awk中文手册
    awk简明教程
    Linux之mount命令详解
    VirtualBox内Linux系统与Windows共享文件夹
    堆排序详解
    int main(int argc,char* argv[])参数详解
    GDB调试详解
    VirtualBox中虚拟Ubuntu添加新的虚拟硬盘
  • 原文地址:https://www.cnblogs.com/liul21cn/p/2933241.html
Copyright © 2011-2022 走看看