您的位置:首页 > 数据库 > Oracle

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

2012-11-07 06:01 309 查看
在建立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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: