Oracle专用服务器与共享服务器的区别

Oracle提供两种连接模式:专用服务器和共享服务器。专用服务器为每个客户端创建独立进程,适合少量并发连接;共享服务器使用连接池,减少进程创建,适合大量并发,但可能影响性能。启用共享服务器需设置初始化参数SHARED_SERVERS,可通过ALTER SYSTEM命令动态调整。判断数据库连接模式可查询V$SESSION等视图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在建立Oracle数据库的时候,应该会在数据库建立助手向导上面看到这么一个选项,就是数据库的连接模式采用什么方式。在Oracle9i或者10g中,可以看到有2种连接模式,一种叫做专用服务器连接(dedicated server) ,另外一种叫做共享服务器连接(shared server)。下面我们来分类说一下这两种连接方式的不同点。

专用服务器模式就是说每次在对Oracle进行访问的时候,Oracle服务器的Listener会得到这个访问请求,然后回为这个访问创建一个新的进程来进行服务。所以说,对于每一个客户端的访问,都会生成一个新的进程进行服务,是一种类似一对一的映射关系。这种连接模式的一个很重要的特点就是UGA(用户全局域)是存储在PGA(进程全局域)中的,这个特性也很好说明了当前用户的内存空间是按照进程来进行分配的。

而另外的共享服务器连接则是一种在程序编写的时候通常会用到的连接池(pool)的概念。采用这种模式的话,在数据库的初始化的时候就会创建一批服务器连接的进程,然后把这些连接进程放入一个连接池来进行管理。初始化的池中的进程数量在数据库初始化建立的时候是可以手动设置的。在连接建立的时候,Listener首先接受到客户端的建立连接的请求,然后Listener去生成一个叫做调度器(dipatcher)的进程与客户端进行连接。调度器把把客户端的请求放在SGA(系统全局域)的一个请求队列中,然后再共享服务器连接池中查找有无空闲的连接,然后让这个空闲的服务器进行处理。处理完毕以后再把处理结果放在SGA的相应队列中。调度器通过查询相应队列,得到返回结果,再返回给客户端。这种连接模式的优点在于服务器进程的数量可以得到控制,不大可能出现因为连接人数过多而造成服务器内存崩溃。但是由于增加了复杂度以及请求相应队列,可能性能上有所下降

很明显,当用户并发的连接数很大的时候,dedicated servers的server process个数也会变得很大,对于操作系统来说多一个process就意味着多一点管理负担,要知道操作系统支持的同时并发数可不是无限的。这意味着,在dedicate servers里,当你有大量的用户连接(比如,同一时间超过5000个用户连上来),你的系统负担就会相当大。而这种情况shared servers就可以处理的相对好一些,因为加入同时有5000个用户连上来而且我们知道一般只有1%的连接是active,那我们只需要设置50个shared servers就可以把所有的用户请求处理得很好,并节省了系统资源

dedicated servers不需要专门的设置,这个是oracle的默认选项。

启用共享服务器

------------------------

要切换到共享模式,可以使用以下步骤:

A.设置初始化参数 SHARED_SERVERS 大于0,可以使用alter system命令动态的设置 也可以在spfile里面修改初始化参数SHARED_SERVERS   的值大于0,然后shutdown  oracle,然后restart oracle  即可启动共享模式,其他的共享服务器参数可以不用设置

 参考语句:

  alter system set shared_servers = 1 scope=both ;

  alter system set max_shared_servers = 5 scope=both ;

共享模式,如果要设置所有服务都使用共享模式,则设置为:

  alter system set dispatchers='(PROTOCOL=TCP)';

在客户端的tnsnames.ora 的tns设置中,在 CONNECT_DATA 设置一项中增加 (server=shared )一项,即可使用共享服务器连接

 如果服务器端没有启动共享服务器模式,而客户端使用shared方式连接的话,会出现错误提示:

 “ORA-12520: TNS: 监听程序无法找到需要的服务器类型的可用句柄”;

和共享服务器相关的参数如下:   

  max_shared_servers    --最大服务器进程数

  SHARED_SERVER_SESSIONS --指定可以同时运行的最大的共享服务会话数

  dispatchers       --协议,调度程序数,每个调度程序的最大连接数   

  max_dispatchers     --最大调度程序数   

  shared_servers      --服务器进程数   

  CIRCUITS         --指定网络会话层出入的总的虚拟回路

3、判断数据库使用的连接模式

========================================================================

查看当前数据库服务器的运行情况有以下几种办法:

A.从v$session里面查看:

SQL> select distinct server from v$session ;   

SQL> 

SERVER

---------

DEDICATED

NONE

SQL> 

如果显示的除了dedicated,还有NONE,则说明当前启动了共享服务器,并且server为none的会话正使用共享服务器连接,同时,如果只显示有dedicated,则不能说明服务器就一定工作在专用服务器下面,此时只能说明有可能启动了共享模式,

但是无连接

可以使用下面的语句查询采用共享服务器的会话信息:

select saddr,program ,server from v$session;

SQL> /

SADDR   PROGRAM                      SERVER

-------- ------------------------------------------------ ---------

296FB24C plsqldev.exe                    NONE

296FFD1C oracle@B851 (q001)                 DEDICATED

29705AA0 oracle@B851 (q000)                 DEDICATED

在网上有的资料上说只要查询下面三个视图,有记录则说明启动了共享模式,经过验证,具体情况如下:

select * from v$shared_server; ---有记录,且STATUS字段为WAIT(COMMON),则说明启动共享;

                status为TERMINATED或者无记录,则说明没有启动共享服务器

select * from v$dispatcher;   --有无记录都不能说明启动共享服务器,只能说明是配置了dispatchers参数

select * from V$CIRCUIT ;    --有记录说明当前有使用共享模式的连接,无记录则不能判定服务器模式

当服务器采用专用服务器模式时,客户端只能使用专用模式连接,也就是在connect_data数据中只能使用 server=dedicated。

B.当服务器采用共享服务器模式时,客户端可以选择建立共享还是专用连接,connection,只要在 connect_data 中指定server=dedicated or server=shared

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值