oracle的shared、dedicated模式解析

主要參考文档:http://www.itpub.net/thread-1714191-1-1.html

Oracleh有两种server模式shared modededicated mode

Dedicated mode下。client每发来一个连接请求。数据库都要给这个请求建立一个服务进程来完毕响应。而在shared mode下。oracle会首先建立一定数目的服务进程,client发来的请求会首先发送到dispatcher即调度器,然后由dispatcher依据服务进程的忙闲情况。选择性的把请求交付给详细的服务进程进行响应。共享服务进程作出响应后,把响应的结果再交给dispatcher,由dispatcher再次交付给client。在这个过程中,涉及到两个队列。即请求队列跟响应队列。这两个队列都位于SGA中,共享连接的会话信息放置在Large pool中,因此对SGA的使用很多其它。

使用shared modededicated mode的优劣。

使用dedicated mode,由于为每个连接请求建立一个专属进程进行响应。所以它的响应速度要比shared mode快,但dedicate mode要为每个请求建立专属的PGA,所以对内存的需求更高。但在生产环境中,大多数都是使用dedicated mode。同一时候dedicated mode也是oracle的默认模式。

使用shared mode能够有效降低系统进程数目,能够在内存限制比較大的环境中使用。

shared mode由于在client请求与server响应之间,必需要走dispatcher这道程序。也就更easy造成拥堵或死锁,也可能由于某一请求长时间占用服务时间而造成其它请求的长时间等待,此外,共享模式不easy实现trace。在生产环境中。大多不适用shared mode,而使用中间件软件来实现类似的需求。

查看当前系统的server模式

Show parameter shared

首先shared_servers显示的系统启动时候启用的共享服务进程的个数。这个參数大于0表示启用了共享模式,这个參数不用设置过大,过大会添加启动时间,oracle会自己主动依据负载调节共享服务进程的个数,这个数值仅仅是启动时候的初始值。

Max_shared_servers这个參数设置了共享服务进程的最大数。

Show parameter dispatcher

仅仅启动shared_server并不能真正启用共享模式,还须要设置好dispatchers

Dispatchers的内容形如‘(protocol=tcp) (service=jf01) (dispatchers=3)’。

当中protocol表示协议类型,service表示要启用共享模式的服务名,dispatchers表示初始调度进程的数量。

Max_dispatchers为调度进程的最大数目。

共享模式下相应的后台进程分别为以“S”和“D”开头的,S开头的为服务进程,D开头的为调度进程。形如S000,S001,D000,D001此类。能够通过select pname from v$process查看。

启用禁用共享模式

Dedicated模式是oracle的默认模式,oracle也不推荐使用shared模式。

启用共享

Alter system set shared_servers=2;

设置此參数大于0

Alter system set dispatcher=’(protocol=tcp) (service=jf01) (dispatchers=3);

设置要启用共享模式的服务。

此外。还须要再client的tnsnames.ora文件里,在要使用共享模式连接的实例解析下更改

 CONNECT_DATA 中的 (SERVER=SHARED )一项。

仅仅有这样,client才会发起建立共享连接的请求。假设此时服务端没有启用共享模式。则会出现错误提示:

 ORA-12520 TNS:Listener count not find available handler for requested type of server

禁用共享模式

Alter system set shared_server=0;

Alter system set dispatcher=’’;

这样就能够了。

查看当前会话的信息

Select server from v$session;

相关视图

V$shaed_server

V$dispatcher

V$circuit

原文地址:https://www.cnblogs.com/tlnshuju/p/6940037.html