查看: 13420|回复: 14

[FAQ] oracle之专用服务器和共享服务器小结

[复制链接]
论坛徽章:
5
ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19奥运会纪念徽章:垒球
日期:2012-10-16 11:23:38双黄蛋
日期:2013-01-30 15:58:152013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-03-12 14:09:24
跳转到指定楼层
1#
发表于 2012-9-3 17:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、专用服务器和共享服务器
1.1 原理
专有服务器

    专有服务器模式中,用户进程运行在客户端的机器,专有服务器进程运行在数据库服务器端的机器。用户进程和专有服务器进程是两种不同类型的进程。当客户端发出连接数据库请求的时候,监听器吧客户端连接到专有服务器进程。即使这个服务进程很空闲,这个专有服务器进行也只为这个用户进程服务。用户进行和专有服务器进程是一一对应的关系。
适合专有服务器环境:
1、只有少数客户端
      在纪录量多、连接用户又比较少的情况下,采用专用服务器模式,可以说是比较明智的选择。
2为数据仓库搭建的数据库系统。
     如果这个数据库是为了实现数据仓库而搭建的,则必须要采用专属服务器模式。这是Oracle数据库的强制要求。
3联机事务处理系统。
     若联机事务处理系统统是符合两个条件
   A 用户连接请求数大于共享进程
   B 事务大部分是长事务或者大事务
     则采用专用服务器连接模式比采用共享服务器连接模式效率要高。
共享服务器
共享服务器模式中,调度进程接受多个客户端的连接请求,并吧这些请求放到一个公共队列中.空闲的服务器进程从这个公共队列中抓出这些请求,然后完成请求的任务,完成任务后,把结果放到响应队列中,调度进程再从响应队列中把完成的结果返回给客户端。
论坛徽章:
5
ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19奥运会纪念徽章:垒球
日期:2012-10-16 11:23:38双黄蛋
日期:2013-01-30 15:58:152013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-03-12 14:09:24
2#
 楼主| 发表于 2012-9-3 17:41 | 只看该作者
本帖最后由 chencheng523523 于 2012-9-3 17:50 编辑



结构三部分:
1、监听器
2、一个或多个调度进程
3、一个或多个共享服务器进程
监听器和调度进程的关系
     当数据库实例启动的时候,调度进程会吧自己的地址告诉监听器。当用户进程请求一个数据库连接的时候,监听器将首先检查这个请求,然后决定该用户进程是否允许使用共享服务器进程。如果允许,监听器把负载最小的调度进程地址给用户进程,然后用户进程直接连接到这个调度进程。
   如果用户进程不能连接到调度进程,或用户请求的是一个专有服务器连接,则监听器将创建一个专有服务器进程,并把这个用户进程连接到专有服务器进程。
请求队列和响应队列
  当一个用户发出一个调用请求的时候,这个用户进程的调度把这个请求放到请求队列中。这个请求将一直在请求队列中,直到一个空闲的共享服务器进程出现,这个空闲的共享服务器进程将从响应队列总取出这个请求,进行处理。
   当共享服务器进程处理玩这个请求的时候,他会吧处理结果放到响应队列中,这个时候,共享服务器进程空闲,他将执行在请求队列中的另一个请求。
   请求队列是一个公共的队列,他被多哦有的调度进程所共享。请求队列存在SGA中。共享服务器进程按照先进先出的原则对请求队列中的请求进程处理。
响应队列也存在SGA中,不同的是每个调度都有自己的响应队列调度进程从响应队列中读取完成请求,返回给用户进程。

使用道具 举报

回复
论坛徽章:
5
ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19奥运会纪念徽章:垒球
日期:2012-10-16 11:23:38双黄蛋
日期:2013-01-30 15:58:152013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-03-12 14:09:24
3#
 楼主| 发表于 2012-9-3 17:45 | 只看该作者
本帖最后由 chencheng523523 于 2012-9-3 17:50 编辑

合适共享服务器环境:
1、 前台客户端数量比较多。
2、 服务器内存限制比较大。
    用户若在一些老的服务器上部署Oracle数据库的话,因为其主板对内存的升级有所限制,所以,为了得到一个不错的数据库性能,往往采用共享服务器模式。如此,即时同时访问数据库
    的用户有所增加,其内存也不会有多大的影响。可以大大的降低内存的压力。
3某些特定功能要求采用共享服务器模式。
   比较典型的,如Oracle数据库服务器的连接共享、连接集中与负载均衡技术等等。他们必须在共享模式下才能够运行。
   负载均衡用来在群集环境下实现多机共享数据库,以保证应用的高可用性。同时可以自动实现并行处理以及均分负载,还能够实现数据库在故障时的容错和无断点恢复。所以,在一些对
     于性能与稳定性要求比较高的应用场景中,如银行中,往往都会采用负载均衡技术。此时,数据库管理员在配置数据库的时候,就需要考虑采用共享服务器模式。

共享服务器好处
1、减少操作系统进程/线程数
    在一个有上千用户的系统上,如果操作系统力图管理数千个进程,可能很快就崩溃了。如果使用共享模式,可以有效的管理活动的部分用户,效率大大提高,操作系统可以避免了上下
    文切换。
2、刻意的限制并发度
   如果并发数过大,到一定程度,即使用户量再增加,每秒中完成的相应事物也不会增加。吞吐量到达一定峰值后会下降。利用共享服务器,可以把系统并发度限制到合理的数量上。
3、减少系统所需的内存
   可以减少所需内存量,但是在自动PAG内存管理以后,意义不是很大。

使用道具 举报

回复
论坛徽章:
86
秀才
日期:2015-09-21 09:46:16目光如炬
日期:2014-07-28 06:00:03马上有钱
日期:2014-06-16 15:55:42马上有房
日期:2014-06-16 15:55:422014年世界杯参赛球队: 伊朗
日期:2014-06-13 11:29:242014年世界杯参赛球队:巴西
日期:2014-06-06 14:36:14马上有钱
日期:2014-04-04 13:51:21马上加薪
日期:2014-04-04 13:35:40马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02
4#
发表于 2012-9-3 17:45 | 只看该作者
不错,继续

使用道具 举报

回复
论坛徽章:
5
ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19奥运会纪念徽章:垒球
日期:2012-10-16 11:23:38双黄蛋
日期:2013-01-30 15:58:152013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-03-12 14:09:24
5#
 楼主| 发表于 2012-9-3 17:49 | 只看该作者
本帖最后由 chencheng523523 于 2012-9-3 17:54 编辑

1.2 服务器模式的设置

启用专用服务器
------------------------
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 ;

B.设置dispatchers 参数,可以采用下面的方法设置:
  alter system set dispatchers="(PROTOCOL=TCP) (SERVICE=yzdbXDB)(SERVICE=yzdb)";

  前面表示的是协议,后面的service 分别指定要采用共享服务器模式的服务名称
  oracle文档上说该步骤不是必须做的,但是我在实际中发现如果只是设置了shared_server参数,
  而把dispatches参数设置为空的话,不能启动共享服务器,使用上面的模式指定只启动某个服务的
  共享模式,如果要设置所有服务都使用共享模式,则设置为:
  alter system set dispatchers='(PROTOCOL=TCP)';

C.在客户端的tnsnames.ora tns设置中,在 CONNECT_DATA 设置一项中增加 (server=shared )一项,即可使用共享服务器连接
  如果服务器端没有启动共享服务器模式,而客户端使用shared方式连接的话,会出现错误提示:
  “ORA-12520: TNS: 监听程序无法找到需要的服务器类型的可用句柄”;

关闭调度进程:
首先要查询到DISPATCHERS的NAME: SELECT NAME,NETWORK FROM V$DISPATCHER;
然后关闭调度进程:ALTER SYSTEM SHUTDOWN IMMEDIATE 'D000';

circuits(虚拟回路):指定了virtual circuits 的总数量。
SQL> select * from V$CIRCUIT;



使用道具 举报

回复
论坛徽章:
5
ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19奥运会纪念徽章:垒球
日期:2012-10-16 11:23:38双黄蛋
日期:2013-01-30 15:58:152013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-03-12 14:09:24
6#
 楼主| 发表于 2012-9-3 17:54 | 只看该作者
本帖最后由 chencheng523523 于 2012-9-3 17:56 编辑

1.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 [email=oracle@B851]oracle @B851[/email] (q001)                               DEDICATED
29705AA0 [email=oracle@B851]oracle @B851[/email] (q000)                               DEDICATED

使用道具 举报

回复
论坛徽章:
5
ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19奥运会纪念徽章:垒球
日期:2012-10-16 11:23:38双黄蛋
日期:2013-01-30 15:58:152013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-03-12 14:09:24
7#
 楼主| 发表于 2012-9-3 17:57 | 只看该作者
本帖最后由 chencheng523523 于 2012-9-4 13:13 编辑

B.查询视图:
在网上有的资料上说只要查询下面三个视图,有记录则说明启动了共享模式,经过验证,具体情况如下:
select * from v$shared_server; ---有记录,且STATUS字段为WAIT(COMMON),则说明启动共享;
status为TERMINATED或者无记录,则说明没有启动共享服务器
select * from v$dispatcher; --有无记录都不能说明启动共享服务器,只能说明是配置了dispatchers参数
select * from V$CIRCUIT ; --有记录说明当前有使用共享模式的连接,无记录则不能判定服务器模式

C.查询监听器的状态:

1.4、客户端建立的连接模式

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

大多数情况下我们更倾向或习惯专用模式,两种模式下,对sga等分配都会有不同,所以如果转换成mts模式,别忘了sga也是需要调整的。最典型的是mts模式需要较大的large_pool_size。如果真想转换还是仔细看看oracle关于mts的文档。共享连接只是把连接SESSION信息放在LARGE POOL,所以LARGE POOL要大一些。而专用连接的SESION信息放在PGA。


1.5、禁用共享服务器模式

禁用的实验:
-------------------------
alter system set shared_servers = 0 ;
alter system set max_shared_servers = 0 ;
在已经建立共享模式的客户端执行查询,一直处于等待,查看视图:
SQL> select circuit,saddr,status,queue from v$circuit;
CIRCUIT  SADDR    STATUS           QUEUE
-------- -------- ---------------- ----------------
27434010 296F8CE4 NORMAL           COMMON
2743471C 296FB24C NORMAL           NONE
2 rows selected.

SQL> select program,saddr,server,status from v$session
where saddr in ('296F8CE4','296FB24C');

PROGRAM                                          SADDR    SERVER    STATUS
------------------------------------------------ -------- --------- --------
plsqldev.exe                                     296F8CE4 NONE      INACTIVE
plsqldev.exe                                     296FB24C NONE      INACTIVE
2 rows selected.SQL> 恢复参数值:
SQL>

alter system set shared_servers = 1;
System altered.
SQL> alter system set max_shared_servers = 5;
System altered.
SQL>

前台的查询恢复正常,查看视图:
SQL> select circuit,saddr,status,queue from v$circuit;
CIRCUIT  SADDR    STATUS           QUEUE
-------- -------- ---------------- ----------------
27434010 296F8CE4 NORMAL           NONE
2743471C 296FB24C NORMAL           NONE
2 rows selected.
SQL>

使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
21
itpub2007年荐股参与纪念徽章
日期:2008-04-03 16:54:14itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50复活蛋
日期:2014-12-01 15:10:24蓝锆石
日期:2015-02-03 13:52:432015年新春福章
日期:2015-03-04 14:51:122015年新春福章
日期:2015-03-06 11:57:31知识
日期:2015-05-27 16:53:28itpub13周年纪念徽章
日期:2014-09-28 10:55:55
8#
发表于 2012-9-4 11:18 | 只看该作者
共享服务器   就是   连接池的原理。
共享模式不稳定呀。。。实际应用中很多,   一般会用专业的中间件产品连接,不过原理是一样的。
共享修改方式还有一种方法就是  dbca修改共享,缺点是数据库必须重启。
一般都是楼主提到的 直接修改动态参数。

dispatcher.png (65.27 KB, 下载次数: 37)

dispatcher.png

使用道具 举报

回复
论坛徽章:
5
ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19奥运会纪念徽章:垒球
日期:2012-10-16 11:23:38双黄蛋
日期:2013-01-30 15:58:152013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-03-12 14:09:24
9#
 楼主| 发表于 2012-9-4 11:29 | 只看该作者
楼上朋友说的很对,共享服务服务器连接,会话的跟踪信息可能分布在不同的独立跟踪文件中,重建会话比较困难。除非必须要用共享模式,如系统负载太重或特定的性能,否则专用服务器是最佳选择。

使用道具 举报

回复
论坛徽章:
5
ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19奥运会纪念徽章:垒球
日期:2012-10-16 11:23:38双黄蛋
日期:2013-01-30 15:58:152013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-03-12 14:09:24
10#
 楼主| 发表于 2012-9-4 13:14 | 只看该作者
本帖最后由 chencheng523523 于 2012-9-4 13:15 编辑

1.6、共享服务初始化参数的一些说明:
shared_servers 指定了当instance 启动的时候 shared server process 启动的数量,不要将这个参数设置得太大,否者启动数据库instance 的时候就会花更多时间,Oracle启动过后会根据负载来动态调整shared_servers。如果为0,表示数据库没有启动共享服务模式。 这个参数是配置shared server 必须的,而且只有这个参数是必须的。
--修改参数:  alter system set shared_servers=1;
max_shared_serversORACLE在同一个时刻最大能够使用的 shared server process.不要将这个参数设置小于 shared_servers,如果动态修改shared_servers大于max_shared_serversORACLE会覆盖max_shared_servers的值,此时你需要修改max_shared_servers.同时也不能大于processes。这个参数是为了给占用很大资源操作而设的(批处理),为了预留一些process DBA任务(rman备份)
shared_server_sesions: 指定了总共允许的的 shared server session 的数量。如果设置了这个参数,那么就不要将这个值超过sessions,如果没有设置这个值,那么只要还有空闲的session,就可以被使用。设置这个值是为专有连接预留 user sessions.

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表