专用服务器:一个客户端连接对应一个服务器进程
共享服务器:多个客户端连接对应一个服务器进程,服务器端存在一个进程调度器来管理。
其实这个我之前也没搞的清楚,所以像是测试机那样的我就直接用了 专用服务器 模式,因为说明上是写预期连接数较少的情况下,
而正式机上,都建了共享服务器模式。其实现在看来,真是没必要。一个是我们是使用中间件去连oracle的,中间件本身有连接池机制,
另外就是oracle的这个共享服务器方式也做的不够好了,有诸多缺点。
从网上查来,共享服务器具有以下一些缺点:
1)共享服务器的代码路径比专用服务器长,所以它天生就比专用服务器慢。
2)存在人为死锁的可能,因为它是串行的,只要一个连接阻塞,则该服务器进程上的所有用户都被阻塞,并且极可能死锁。
3)存在独占事务的可能,因为如果一个会话的事务运行时间过长,它独占共享资源,其它用户只能等待,而专用服务器,每个客户端是一个会话。
4)共享服务器模式限制了某些数据库特性,例如:不能单独启动和关闭实例,不能进行介质恢复,不能使用Log Miner,并且SQL_TRACE没有意义(因为是共享而不是当前会话的)。
MTS减少的内存实际上是专用服务器模式下每个用户连接到操作系统进程所需的内存,但它却使用SGA的Large_Pool来分配UGA,拆东墙补西墙,所减少的内存是很少的。
如果用户会话的连接和断开很频繁,数据库进程的创建和删除的开销会非常大,这种情况最好采用共享服务器模式(否则,应该使用连接池技术)。
如果客户端一次连接终身使用(会话生命周期内),使用共享服务器模式的意义不大。因为大部分时间,一个会话就连接到一个服务器进程,无法共享服务器进程。
因此,我们后面建的实例,就以oracle默认的专用服务器方式就行了,没必要使用共享服务器模式。
判断oracle是共享模式还是专用模式有以下方法:
1) show parameter shared_server; (注:8i应为:show parameter mts_servers;)
如果数值> 0 ,就是enable了共享服务器.
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer 20
shared_server_sessions integer 330
shared_servers integer 1
2).在配置为共享服务器的情况,Client可以用共享服务器或者专用服务器来联接数据库,这个参数的控制是在tnsnames.ora里设定的。如:
DXPT =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.10)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dxpt)
)
)
这样就是以DEDICATED 专用模式连接 dxpt 实例
写上 (SERVER = SHARED) 则是使用共享服务器模式,但是这时shared_server_process需要打开,要不然会出错连不上oracle
要是这段放空没写,那么系统会根据服务器模式自动调节,
不过根据实测结果,就算服务器是定义成共享服务器模式,shared_server_process没打开的情况下,在v$session中查到的连接
依然是SERVER = DEDICATED
所以基本上我们这段话我们都是可以放空着不写的,但是有时候要连上我们的共享服务器模式的数据库,
放空有可能系统认为要用共享服务器方式去连,那时就要声明 SERVER = DEDICATED采用专用服务器方式去连接。
另外,Background process ,以及通过本地连接进来的,只能是DEDICATED .比如说sqlplus user/pass形式
如果数据库没有配置共享服务器,那么客户端只能以DEDICATED方式连接数据库.
=================
oracle的 专用模式和共享模式(2008-09-24 17:43:10)转载标签:it 分类:oracle基础
来源一:
专用模式和共享模式的本质区别就是:用户进程对ORACLE服务器所在的计算机的内存区里"服务器进程"是专用还是共享。
具体表现在:
1、在共享模式下,多个用户进程共享一个服务器进程;在专用模式下,ORACLE为每一个用户进程准备一个服务器进程。
2、在实际情况中,应用系统与数据库的连接请求总是很多,导致用户进程也很多,如果你的内存和CPU是有限的,同时,用户进程对数据库的操作占用空间不多,那你就把数据库连接模式设置为共享模式,这样,ORACLE内存区的服务器进程只是有限的几个,这几个服务器进程会通过一个调度程序来应付若干用户进程的请求。
3、如果你的硬件资源比较好,就设置成专用模式,每一个用户进程都有一个服务器进程对应,这样,你的用户进程对数据的处理会非常快!
简单的说,连接客户数少,需要长时间占用数据库的,建议用专有模式,如果连接客户数众多,使用共享模式。
来源二:
共享服务器体系:客户进程最终与一个调度程序连接,PMON进程注册了调度程序的位置和负荷,使监听器能够提交到负荷最小的调度程序。一个调度程序能并发地支持多重的客户连接。
专用服务器体系:每个客户进程与专用服务器进程连接。服务器进程没被任何另外的客户共享。
另:专用服务器体系结构不支持HTTP和IIOP客户,仅支持TTC客户。
来源三:
专用是指一个用户进程对应一个服务器进程,也就是说,每个服务器进程被特定用户进程所独占。如果有50个用户进程,则会对应50个服务器进程。
共享是多个用户进程可以共享一个服务器进程,中间是通过一个调度进程实现的,由于共享,所以服务器消耗较小。具体的配置,需要配置mts参数。
来源四:
建议不要选共享的!
就是配置MTS而已
专用的安装好后也可以配置的
再说了,mts不能乱用的
来源五:
1、是否为配置为共享服务器,最主要的参数是
8i mts_servers
9i shared_server
show parameter shared_server mts_servers
如果数值 > 0 ,就是enable了共享服务器.
2、在配置为共享服务器的情况,Client可以选择用共享服务器或者专用服务器来连接到数据库,这个参数的控制是在tnsnames.ora里设定的
aaaa=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = aaaa)(PORT = 1521))
)
(CONNECT_DATA =
(SID = aa)
(SERVER = DEDICATED)
)
)
红色部分指定了用DEDICATED方式连接DB。
另外,Background process ,以及通过本地连接进来的,只能是DEDICATED,比如说sqlplus user/pass 形式,如果DB没有配置共享服务器,那么Client只能以DEDICATED方式连接DB。
#p#副标题#e#
3、判断一个已经连接的session的连接方式有两种方法
A
select server from v$session
where ...
如果server = 'DEDICATED'则是DEDICATED方式
server='SHARED'则是shared方式,并且正有shared_server_process为其服务
server='NONE'的话,则是shared方式,并且当前没有shared_server_process为其服务。
B. 仅用于Unix 底下,似乎windown不行
连接v$session, v$process 看process中的program
1 select p.program,s.server from v$session s , v$process p
2* where s.paddr = p.addr
如果 program 为 。。(S0NN) 的,则是shared方式,并且正有shared_server_process为其服务。
如果 program 为 。。(D0NN) 的,则是shared方式,并且当前没有shared_server_process为其服务。
如果 program 为 其它的,则是'DEDICATED'方式。
来源六:(ORACLE用户文档)
In Dedicated Server Mode, there is a dedicated server process for each user process.
Select this option when the number of total clients is expected to be small, or when
database clients will make persistent, long-running requests to the database.
In Shared Server Mode, several client connections share a database-allocated pool of
resources. Use this mode when a large number of users need to connect to the
<关键词标签:oracle
相关阅读
热门文章
Oracle中使用alter table来增加,删除,修改列的语法
oracle中使用SQL语句修改字段类型-oracle修改SQL语句案例
误删Oracle数据库实例的控制文件
为UNIX服务器设置Oracle全文检索
人气排行 oracle中使用SQL语句修改字段类型-oracle修改SQL语句案例 Oracle中使用alter table来增加,删除,修改列的语法 ORACLE SQL 判断字符串是否为数字的语句 ORACLE和SQL语法区别归纳(1) oracle grant 授权语句 ORACLE修改IP地址后如何能够使用 如何加速Oracle大批量数据处理 Oracle删除表的几种方法
查看所有0条评论>>