节选:[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之间。