主要参考文档:http://www.itpub.net/thread-1714191-1-1.html
Oracleh有两种服务器模式shared mode和dedicated mode。
Dedicated mode下,客户端每发来一个连接请求,数据库都要给这个请求建立一个服务进程来完成响应。而在shared mode下,oracle会首先建立一定数目的服务进程,客户端发来的请求会首先发送到dispatcher即调度器,然后由dispatcher根据服务进程的忙闲情况,选择性的把请求交付给具体的服务进程进行响应,共享服务进程作出响应后,把响应的结果再交给dispatcher,由dispatcher再次交付给客户端。在这个过程中,涉及到两个队列,即请求队列跟响应队列,这两个队列都位于SGA中,共享连接的会话信息放置在Large pool中,因此对SGA的使用更多。
使用shared mode和dedicated mode的优劣。
使用dedicated mode,因为为每一个连接请求建立一个专属进程进行响应,所以它的响应速度要比shared mode快,但dedicate mode要为每个请求建立专属的PGA,所以对内存的需求更高。但在生产环境中,大多数都是使用dedicated mode。同时dedicated mode也是oracle的默认模式。
使用shared mode可以有效减少系统进程数目,可以在内存限制比较大的环境中使用。但shared mode因为在客户端请求与服务器响应之间,必须要走dispatcher这道程序,也就更容易造成拥堵或死锁,也可能因为某一请求长时间占用服务时间而造成其他请求的长时间等待,此外,共享模式不容易实现trace。在生产环境中,大多不适用shared mode,而使用中间件软件来实现类似的需求。
查看当前系统的服务器模式
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)’;
设置要启用共享模式的服务。
此外,还需要再客户端的tnsnames.ora文件中,在要使用共享模式连接的实例解析下更改
CONNECT_DATA 中的 (SERVER=SHARED )一项。
只有这样,客户端才会发起建立共享连接的请求。如果此时服务端没有启用共享模式,则会出现错误提示:
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