oracle开启共享模式参数,Oracle共享和专有模式的说明

对其有了一定的了解。

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

专用服务器(DEDICATED):一个客户端连接对应一个服务器进程

共享服务器(SHARE):多个客户端连接对应一个服务器进程,服务器端存在一个进程调度器来管理。它必须使用net services.也就是说必须配置tns。它适合用于高并发,事物量小,如果这个时候采用了共享模式,可以大大减少由于高度并发对于ORACLE服务器的资源消耗。

Dedicated server

说明

对于专用服务器配置,在登录时,Oracle

总会创建一个新的进程,这个服务器进程会在会话生存期中专门这个连接服务。对于每个会话,都会出现一个新的专用服务器,会话与专用服务器之间存在一对一的映射。按照定义,这个专用服务器不是实例的一部分。客户进程(也就是想要连接数据库的程序)会通过某种网络通道(如TCP/IP

socket)与这个专用服务器直接通信,并由这个服务器进程接收和执行我的SQL。如果必要,它会读取数据文件,并在数据库的缓存中查找我要的数据。也许它会完成我的更新语句,也可能会运行我的PL/SQL

代码。这个服务器进程的主要目标就是对我提交的SQL 调用做出响应。

Shared server 说明

共享服务器(shared

server),正式的说法是多线程服务器(Multi-Threaded

Server)或MTS。如果采用这种方式,就不会对每条用户连接创建另外的线程或新的UNIX 进程。

在共享服务器中,Oracle

使用一个“共享进程”池为大量用户提供服务。共享服务器实际上就是一种连接池机制。利用共享服务器,我们不必为10,000

个数据库会话创建10,000

个专用服务器(这样进程或线程就太多了),而只需建立很少的一部分进程/线程,顾名思义,这些进程/线程将由所有会话共享。这样Oracle

就能让更多的用户与数据库连接,否则很难连接更多用户。如果让我的机器管理10,000个进程,这个负载肯定会把它压垮,但是管理100

个或者1,000

个进程还是可以的。采用共享服务器模式,共享进程通常与数据库一同启动,使用ps命令可以看到这个进程。

共享服务器连接和专用服务器连接之间有一个重大区别,与数据库连接的客户进程不会与共享服务器直接通信,但专用服务器则不然,客户进程会与专用服务器直接通信。之所以不能与共享服务器直接对话,原因就在于这个服务器进程是共享的。为了共享这些进程,还需要另外一种机制,通过这种机制才能与服务器进程“对话”。为此,Oracle

使用了一个或一组称为调度器(dispatcher,也称分派器)的进程。

客户进程通过网络与一个调度器进程通信。这个调度器进程将客户的请求放入SGA中的请求队列(这也是SGA

的用途之一)。第一个空闲的共享服务器会得到这个请求,并进行处理(例如,请求可能是UPDATE T SETX = X+5 WHERE Y

=

2)。完成这个命令后,共享服务器会把响应放在原调度器(即接收请求的调度器)的响应队列中。调度器进程一直在监听这个队列,发现有结果后,就会把结果传给客户。从概念上讲,共享服务器请求的流程如图2-3

所示。

共享服务器具有以下一些缺点

一般我们以oracle默认的专用服务器方式就行了,没必要使用共享服务器模式。一个是我们是使用中间件(如:weblogic)去连oracle的,中间件本身有连接池机制,另外就是oracle的这个共享服务器方式也做的不够好了,有诸多缺点。

1)共享服务器的代码路径比专用服务器长,所以它天生就比专用服务器慢。

2)存在人为死锁的可能,因为它是串行的,只要一个连接阻塞,则该服务器进程上的所有用户都被阻塞,并且极可能死锁。

3)存在独占事务的可能,因为如果一个会话的事务运行时间过长,它独占共享资源,其它用户只能等待,而专用服务器,每个客户端是一个会话。

4)共享服务器模式限制了某些数据库特性,例如:不能单独启动和关闭实例,不能进行介质恢复,并且SQL_TRACE没有意义(因为是共享而不是当前会话的)。

MTS减少的内存实际上是专用服务器模式下每个用户连接到操作系统进程所需的内存,但它却使用SGA的Large_Pool来分配UGA,拆东墙补西墙,所减少的内存是很少的。如果用户会话的连接和断开很频繁,数据库进程的创建和删除的开销会非常大,这种情况最好采用共享服务器模式(否则,应该使用连接池技术)。如果客户端一次连接终身使用(会话生命周期内),使用共享服务器模式的意义不大。因为大部分时间,一个会话就连接到一个服务器进程,无法共享服务器进程。

共享服务初始化参数的一些说明

shared_servers

:指定了当instance 启动的时候 shared server process

启动的数量,不要将这个参数设置得太大,否者启动数据库instance

的时候就会花更多时间,Oracle启动过后会根据负载来动态调整shared_servers。如果为0,表示数据库没有启动共享服务模式。这个参数是配置shared

server 必须的,而且只有这个参数是必须的。

修改参数:  alter system set shared_servers=1;

max_shared_servers:ORACLE在同一个时刻最大能够使用的 shared

server process.不要将这个参数设置小于

shared_servers,如果动态修改shared_servers大于max_shared_servers,ORACLE会覆盖max_shared_servers的值,此时你需要修改max_shared_servers.同时也不能大于processes。这个参数是为了给占用很大资源操作而设的(批处理),为了预留一些process

给DBA任务(rman备份),

shared_server_sesions: 指定了总共允许的的shared server

session

的数量。如果设置了这个参数,那么就不要将这个值超过sessions,如果没有设置这个值,那么只要还有空闲的session,就可以被使用。设置这个值是为专有连接预留

user sessions.

dispatchers:配置 dispatcher process

.如果不设置这个参数,只要设置了shared_servers ,oracle

也会自动设置一个基于tcp协议的dispatcher。还需要查看操作系统支持一个dispatcher能处理多少个connections

SQL>

select * from v$dispatcher;

max_dispatchers:

设置同一时刻能够同时运行的dispatchers的数量,必须大于等于 dispatchers

,小于processes。这个参数也会被dispatchers覆盖。

circuits:指定了virtual circuits 的总数量。

关闭调度进程:首先要查询到DISPATCHERS的NAME: SELECT

NAME,NETWORK FROM V$DISPATCHER;

然后关闭调度进程:ALTER SYSTEM SHUTDOWN IMMEDIATE

'D000';

关闭共享模式

将shared_servers参数置为0,那么所有以共享方式连接到数据库都不能成功,但是未释放的共享连接会继续保持连接,直到断开。如果将shared_servers

和max_shared_servers都设为0,那么共享连接将被终结。所有的共享方式连接都断开了的话,就可以使用alter

system set dispatcher=’’; 将dispatcher清除,防止下次启动数据库又打开了共享连接方式。

判断oracle是共享模式还是专用模式的方法:1. show parameter

shared_server; (注:8i应为:show parameter mts_servers;)

SQL> show parameter shared_server;

a4c26d1e5885305701be709a3d33442f.png shared_servers为0表示专用模式

2. 查看v$session 视图

SQL> Select username,server,program from v$session where

username is not null;

a4c26d1e5885305701be709a3d33442f.png

3. 查看监听: lsnrctl service

$ lsnrctl service

a4c26d1e5885305701be709a3d33442f.png

4.查看TNSNAMES.ora 文件。如:

a4c26d1e5885305701be709a3d33442f.png

这段放空没写,那么系统会根据服务器模式自动调节,不过根据实测结果,就算服务器是定义成共享服务器模式,shared_server_process没打开的情况下,在v$session中查到的连接依然是SERVER

= DEDICATED。写上(SERVER = SHARED)则以DEDICATED 专用模式连接 orcl 实例。写上

(SERVER = SHARED)

则是使用共享服务器模式,但是这时shared_server_process需要打开,要不然会出错连不上oracle。

在数据库启动的时候,如果没有指定shared_servers,但是设置了dispatchers,那么ORACLE就认为启动了shared

server ,并且设置shared_servers为1.

在数据库启动的时候,没有设置shared_servers,没有设置dispatchers,即使以后修改了dispatchers,也不能启动shared

server,必须从新启动数据库。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值