在共享服务器体系结构中,一个dispatcher分派器将传入网络的多个会话请求定向到一个共享服务器进程池,消除了为每个连接分配一个专用服务器进程的需要。作为一般的指导原则,仅当系统需要并发连接到数据库的数量超过操作系统的处理能力时,才能使用共享服务器。

     共享服务器模式必须使用net services.也就是必须配置tns信息(即使客户端与服务端为同一台机器,也要配置TNS,且通过IPC协议进行通讯)。它适合用于高并发,事务量小,如果此时采用了共享模式,可以大大减少由于高度并发对于ORACLE服务器的资源消耗。

 
1,共享服务器模式优缺点
     优点:
     (1)减少了实例中的进程数
     (2)增加了更多并发用户的数量
     (3)实现动态负载均衡
     (4)减少了空闲服务器进程数量
     (5)减少了实例PGA内存
 
     缺点:
     (1)共享服务器的代码路径比专用服务器长,所以它天生就比专用服务器慢;
     (2)存在人为死锁的可能,因为它是串行的,只要一个连接阻塞,则该服务器进程上的所有用户都被阻塞,并且极可能死锁;
     (3)存在独占事务的可能,因为如果一个会话的事务运行时间过长,它独占共享资源,其它用户只能等待,而专用服务器,每个客户端是一个会话;
     (4)共享服务器模式限制了某些数据库特性,例如:不能单独启动和关闭实例,不能进行介质恢复。
 
2,在共享服务器体系结构中需要的进程
     (1)将客户端进程连接放到 dispatcher 或者 专有服务器进程的 网络监听器(PS:监听器是Oracle网络服务的一分部,而不是Oracle数据库的一部分)。
     (2)一个或多个分派器进程(Dnnn)
     (3)一个或多个共享服务器进程(Snnn)
 
3,请求处理流程
     分派器将请求放入请求队列,然后共享服务器进程检查公共请求队列并取出处理,最后服务器进程将响应结果置于分派器的响应队列。(每一个分派器都有一个响应队列)
 
4,分派器进程(Dnnn)
     分派器进程使得客户端进程可以共享数量有限的服务器进程。可以为单个数据库实例创建多个分派器进程。分派器进程的最佳个数取决于操作系统的限制和每个进程的连接数。
     当客户端进程发出连接请求时,监听器将确定客户端进程是否应使用共享服务器进程,这个在配置文件里面有配:
     
     ○ 如果明确配置的是server = shared 并且建立了和dispatcher的通信,则使用共享服务器模式。
     ○ 如果配置的是server = shared但是无法建立和任何dispatcher的通信,或者配置的是server = dedicated,则使用专有服务器模式。
 
     一个典型的实例分派器设置如下(参数文件中设置):
     dispatchers="(protocol=TCP)(serv=orcl)(list=orcl)(poo=on)(disp=5)(conn=33)(sess=224)"
      protocol=tcp--协议
      list=orcl--监听器别名,并非监听器的名字,实际是一个tnsnames.ora中的网络服务名
      serv=orcl--网络服务名
      poo=on--是否启用共享池
      disp=5--初始调度进程数
      sess=224--每个调度进程的最大会话数
      max_dispatchers=19--最大调度进程的数
 
     通过v$dispatcher视图可以查看数据库实例目前存在多少个调度器进程(分派器):select * from v$dispatcher;
     修改调度进程数量:alter system set dispatchers="(protocol=tcp)(disp=6)" scope=both;
     也可以手动的杀掉一个指定的调度器进程:ALTER SYSTEM SHUTDOWN IMMEDIATE 'D000';
 
5,共享服务器进程(Snnn)
     在共享服务器配置中,每个共享服务器进程为多个客户端请求服务。除了共享服务器进程不与特定客户端进程相关联外,共享服务器进程和专用服务器进程提供相同的功能。
     (1)共享服务进程的设置主要受三个参数的影响:
     ○ shared_servers
     指定了当instance启动的时候share_servers启动的数量(可通过shared server process查看),不要将这个参数设置得太大,否者启动数据库instance的时候就会花更多时间,Oracle启动过后会根据负载来动态调整shared_servers。如果为0,表示数据库没有启动共享服务模式。这个参数是配置shared server必须的,而且只有这个参数是必须的。
     修改参数:  alter system set shared_servers=1;
 
     ○ max_shared_servers
     ORACLE在同一个时刻最大能够使用的share_servers数量,不要将这个参数设置小于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的。
 
     (2)把服务器从共享服务器模式改为专用服务器模式
       alter system set shared_servers = 0 scope = both;   --已经存在的共享进程需要等到会话结束才能结束
       或
       alter system set max_share_servers=0 scope=both; --立即强制结束所有共享服务器进程
     
6,判断当前session的连接模式
     数据库可以同时支持共享服务器连接和专用服务器连接。因此如果参数shared_servers=0 ,可以确定所有连接均是专用模式。但是如果shared_servers>0,那么就需要通过v$session视图的SERVER字段来进一步判断当前连接模式了。
 
补充:Oracle11gR2安装后初始设置shared_servers=1;同时,数据库还创建了一个调度器进程,在参数文件中有如下配置:dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)',service "orclXDB"是Oracle9i后创建数据库时默认包含的XML DB特性,提供http、ftp等服务。通过lsnrctl service可以查看监听器监听的网络服务:(orclXDB是Oracle网络体系中的一个服务,而不是操作系统层面的服务)
  
 

Oracle之共享服务器模式的更多相关文章

  1. 专用服务器模式&共享服务器模式

    连接ORACLE服务器一般有两种方式:专用服务器连接(dedicated server)和共享服务器连接(shared server).那么两者有啥区别和不同呢?下面我们将对这两者的区别与不同一一剖析 ...

  2. 把Oracle由归档模式改为非归档模式

    把Oracle由归档模式改为非归档模式 开始–>运行命令cmd进入命令行模式 1. 使用命令sqlplus以无日志形式打开如下: sqlplus /nolog; 2. 连接数据库dev.worl ...

  3. Oracle用户和模式,表空间

    oracle 用户与表空间关系 oracle用户与表空间关系用户=商家表=商品表空间=仓库1. 1个商家能有很多商品,1个商品只能属于一个商家2. 1个商品可以放到仓库A,也可以放到仓库B,但不能同时 ...

  4. Atitit.mysql oracle with as模式临时表模式 CTE 语句的使用,减少子查询的结构性 mssql sql server..

    Atitit.mysql  oracle with as模式临时表模式 CTE 语句的使用,减少子查询的结构性 mssql sql server.. 1. with ... as (...) 在mys ...

  5. Oracle11G_R2中共享服务器模式和专用服务器模式参数解释及设置

    sys@MYTESTDB> show parameterNAME TYPE VALUE------------------------------------ ----------- ----- ...

  6. [20191113]oracle共享连接模式端口2.txt

    [20191113]oracle共享连接模式端口2.txt --//昨天的测试链接:http://blog.itpub.net/267265/viewspace-2663651/=>[20191 ...

  7. [20191112]oracle共享连接模式端口.txt

    [20191112]oracle共享连接模式端口.txt --//如果使用共享服务模式,你可以发现每次重启数据库对应的端口号会发生变化.# netstat -tunlp | egrep "A ...

  8. Oracle在归档模式下恢复

    =============== 数据库的完全恢复 =============== 在归档模式下数据库完全恢复时,数据库所经过的状态如下: 1.利用备份修复(Restores)损坏或丢失的数据文件,即将 ...

  9. Oracle数据库归档模式的切换及其相关操作详解

    SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> ...

随机推荐

  1. 粘性固定 position:sticky

    在研究rem布局时,无意中看到网易新闻移动端首页的导航栏用上了一个CSS 3的属性粘性定位position:sticky,它是相对定位(position:relative)和固定定位(position ...

  2. 【SaltStack官方版】—— states教程, part 4 - states 说明

    STATES TUTORIAL, PART 4 本教程建立在第1部分.第2部分.第3部分涵盖的主题上.建议您从此开始.这章教程我们将讨论更多 sls 文件的扩展模板和配置技巧. This part o ...

  3. 【GDOI 2016 Day1】疯狂动物城

    题目 分析 注意注意:码农题一道,打之前做好心理准备. 对于操作1.2,修改或查询x到y的路径,显然树链剖分. 对于操作2,我们将x到y的路径分为x到lca(x,y)和lca(x,y)到y两部分. 对 ...

  4. [洛谷P2886] 牛继电器Cow Relays

    问题描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...

  5. tweenMax+如何让数字由初始值动画到结束的值

    html: <div class="wz1">0</div> css: .wz1{ width: 114px; height: 30px; position ...

  6. CSS插入的四种方式

    一.什么是CSS CSS(Cascading style sheets  层叠样式表),CSS可以用以为网页构建样式表,通过样式表来达到对网页进行美化的效果.所谓层叠可以将网页想象成一层层的结构,高层 ...

  7. mysql CHECK约束 语法

    mysql CHECK约束 语法 作用:CHECK 约束用于限制列中的值的范围. 直线电机 说明:如果对单个列定义 CHECK 约束,那么该列只允许特定的值.如果对一个表定义 CHECK 约束,那么此 ...

  8. localhost、127.0.0.1、本机ip、0.0.0.0 的区别

    1.各个地址 绑定到127.0.0.1的服务只能被本机访问. localhost是个域名,一般指向127.0.0.1这个ip,绑定到localhost的服务也只能被本机访问. 本机地址,指的是本机物理 ...

  9. vue.js条件渲染 v-if else-if v-for

    v-if: 在字符串模板中,如 Handlebars ,我们得像这样写一个条件块: {{#if ok}} <!-- Handlebars 模板 --> <h1>Yes</ ...

  10. 将MSQL中的数据导出至EXCEL

    mysql> show variables like '%secure%';+------------------+---------------------+| Variable_name | ...