`

共享模式和专有模式详解(原创)

 
阅读更多

专有模式和共享模式概述
专有模式:当一个用户请求连接到ORACLE的时候,ORACLE会专门的为这个user process 分配一个server process。
共享模式:一个server process可以服务多个user process.如果要使用这个功能,必须使用net services.也就是说必须配置tns。它适合用于高并发,事物量小,如果这个时候采用了共享模式,可以大大减少由于高度并发对于ORACLE服务器的资源消耗。缺点:由于它是用一个queue 来管理,所以只要有一个会话死了,那么后面的会话将等待,也就是该服务器进程上的所有用户将被阻塞,另外不能用共享模式执行批处理,大数据量的处理,不能应用于数据仓库。

专用服务器(DEDICATED): 每个客户进程与专用服务器进程连接。服务器进程没被任何另外的客户共享。 具体流程可参加下图
  
注意:专用服务器体系结构不支持HTTP和IIOP客户,仅支持TTC客户。
共享服务器(SHARED,也叫MTS Multi-Threaded Server):多个客户端连接对应一个服务器进程,服务器端存在一个进程调度器来管理。它必须使用net services.也就是说必须配置tns。它适合用于高并发,事物量小,如果这个时候采用了共享模式,可以大大减少由于高度并发对于ORACLE服务器 的资源消耗。 虽然MTS减少的内存实际上是专用服务器模式下每个用户连接到操作系统进程所需的内存,所减少的内存很 少。但是由于在MTS模式下使用SGA的Large_Pool来分配UGA,如果用户会话的连接和断开很频繁,数据库进程的创建和删除的开销会比专用模式 下小很多,如果不采用共享模式服务器,则应使用中间件的连接池技术。如果客户端一次连接终身使用(会话生命周期内),使用共享服务器模式的意义不大。因为大部分时间,一个会话就连接到一个服务器进程,无法共享服务器进程。
共享服务器体系:客户进程最终与一个调度程序连接,PMON进程注册了调度程序的位置和负荷,使监听器能够提交到负荷最小的调度程序。一个调度程序能并发地支持多重的客户连接。相信工作原理如下:
1.转发器Dispatcher接受到用户端的请求
2.请求被置入Request队列,并建立了类似电路的一条回路Circurt用来标识请求是来自哪个Client。
3.某个闲置的Server Process开始处理队列中的请求
4.SGA内存分配
5.将处理的结果置入Response队列
6.结果从Response Queue返回给Dispatcher
7.Dispatcher将结果最终返回给当初的Client
流程图如下
       
一般我们以oracle默认的专用服务器方式就行了,没必要使用共享服务器模式。一个是我们是使用中间件(如:weblogic)去连oracle的,中间件本身有连接池机制,另外就是oracle的这个共享服务器方式也做的不够好了,有诸多缺点。
共享服务器具有以下一些缺点:
1、共享服务器的代码路径比专用服务器长,所以它天生就比专用服务器慢。
2、存在人为死锁的可能,因为它是串行的,只要一个连接阻塞,则该服务器进程上的所有用户都被阻塞,并且极可能死锁。
3、存在独占事务的可能,因为如果一个会话的事务运行时间过长,它独占共享资源,其它用户只能等待,而专用服务器,每个客户端是一个会话。
4、共享服务器模式限制了某些数据库特性,例如:不能单独启动和关闭实例,不能进行介质恢复,不能使用Log Miner,并且SQL_TRACE没有意义(因为是共享而不是当前会话的)。

5、不能执行DBA管理任务,如关闭数据库,备份、恢复等。

共享服务器和专用服务器的内存比较
假设一个应用程序访问Oracle的每个Session需要400KB的内存,每个服务进程的内存需要4MB,所分配的共享服务进程数为100个。现在有5000个客户连接,
则在Dedicated模式下:
内存=5000 * (400KB+4MB) = 22GB
Shared模式下:
内存=5000 * 400KB + 100 * 4MB = 2.5GB
共享服务初始化参数
shared_servers :指定了当instance 启动的时候 shared server process启动的数量,不要将这个参数设置得太大,否者启动数据库instance的时候就会花更多时间,Oracle启动过后会根据负载来动态调整 shared_servers。如果为0,表示数据库没有启动共享服务模式。 这个参数是配置shared server必须的,而且只有这个参数是必须的。
配置共享服务初始化参数:
1.设置shared_servers :指定了当instance 启动的时候 shared server process 启动的数量,不要将这个参数设置得太大,否者启动数据库instance 的时候 就会花更多时间,Oracle启动过后会根据负载来动态调整shared_servers。如果为0,表示数据库没有启动共享服务模式。 这个参数是配置shared server 必须的,而且只有这个参数是必须的。
如果将shared_servers参数置为0,那么所有以共享方式连接到数据库都不能成功,但是未释放的共享连接会继续保持连接,直到断开
2.设置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_servers 和max_shared_servers都设为0,那么共享连接将被终结。所有的共享方式连接都断开了的话,就可以使用alter system set dispatcher=’’; 将dispatcher清除,防止下次启动数据库又打开了共享连接方式。
3.设置 shared_server_sesions: 指定了总共允许的的shared server session的数量。如果设置了这个参数,那么就不要将这个值超过sessions,如果没有设置这个值,那么只要还有空闲的session,就可以被 使用。设置这个值是为专有连接预留user sessions.
4.设置dispatchers:Dispatchers参数用于配置共享模式架构中dispatcher进程,共享模式只少需要一个 dispatcher进程。如果你没有指定dispatcher参数,但又把SHARED_SERVER设为非0值启用了共享模式,这样数据库会缺省创建 一个TCP协议的dispather,等同于设置为dispatchers="(PROTOCOL=tcp)",oracle 也会自动设置一个基于tcp协议的dispatcher。
如果还需要配置其它dispatcher,你可能通过指定以下属性:
ADDRESS:指定dispathers监听的网络地址,如(DESCRIPTION=(ADDRESS=...))
PROTOCOL:Specify the network protocol for which the dispatcher generates a listening endpoint. For example:(PROTOCOL=tcp)
DISPATCHERS:指定dispathers数量
CONNECTIONS:第个dispatcher最大允许的最大连接数
TICKS:启用连接池时,连接空闲超时时间,以10分钟为单位,1表示10分钟,2表示20分钟
POOL:是否起用连接池
SERVICE:指定dispathers注册的service
以上属性名称关键字,你可以用3位或3位以上的缩写,如你需要指定sessions=3,你可以写成ses=3,sess=3 或sessi=3类似方式
配置样例
配置2个TCP协议的dispatcher,指定端口为5000,地址为192.168.0.111和
3个TCPS协议的dispatcher
SQL> alter system set dispatchers="(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.111)(PORT=5000))(DISPATCHERS=2)","(ADDRESS=(PROTOCOL=TCPS)(HOST=rac1))(DISPATCHERS=3)";
注意:dispatchers配置好后,就算监听不起,客户端也能通过dispatcher配置连接上数据库

5.设置 max_dispatchers:设置同一时刻能够同时运行的dispatchers的数量,必须大于等于 dispatchers ,小于processes。这个参数也会被dispatchers覆盖,如果dispatchers大于max_dispatchers。
6.circuits:指定了virtual circuits的总数量。
配置共享模式
具体步骤:
1.
alter system set shared_servers=1;
2. 配置tnsnames.ora里的服务名,这里需要注意一定要配置SID ,不是SERVICE_NAME,如果不是配的SID会报ORA-12523: TNS 错误。
ORACLE =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = bluo7)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = bluo7)(PORT = 1522))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = xxx)
    )
  )

SHARED_SERVER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 16.178.115.186)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 16.178.115.186)(PORT = 1522))
    )
    (CONNECT_DATA =
      (SID = robinson)
      (SERVER = SHARED)
    )
  )

3.使用共享的方式连接到数据库 conn sys/oracle@shared_server as sysdba,但是这个时候不能关闭数据库,也不能打开数据库,不能备份和恢复。
4.查看共享方式连接数据库状态
select count(*),server from v$session where username is not null gorup by server;
这里的server字段中的none值表示会话没有活动,dedicated表示通过专用服务器连接,通过shared表示共享服务器连接
使用lsnrctl service查看
$ lsnrctl service

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 15-APR-2012 15:28:22
Copyright (c) 1991, 2005, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.111)(PORT=1521))(CONNECT_DATA=(SID=orcl)(SERVER=SHARED)))
Services Summary...
Service "orclXDB" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
    Handler(s):
      "D000" established:1 refused:0 current:0 max:1022 state:ready
         DISPATCHER <machine: rac1, pid: 2515>
         (ADDRESS=(PROTOCOL=tcp)(HOST=rac1)(PORT=61882))
常见问题
1、large_pool_size这个参数我该设为多大呢?
当large_pool_size的大小能够满足所有的共享服务进程所需的内存就可以了,当然如果内存够用的话可以适当的加大一点,如下的语句便可以得出自实例启动来MTS连接所用的内存的最大数量,可以看出来是200多M。  
SELECT sum(value) "Max MTS Memory Allocated"  
FROM v$sesstat ss, v$statname st  
WHERE name = 'session uga memory max'  
AND ss.statistic#=st.statistic#
Max MTS Memory Allocated  
------------------------  
214457296

2、如何判断我dispatcher的数量是不是够用呢?
用如下的语句,当dispatcher的繁忙比率超过50%的时侯,你就要考虑增加Dispatcher的数量了,用Alter system动态却可完成。
SELECT name, (busy / (busy + idle))*100 "Dispatcher % busy Rate"
FROM V$DISPATCHER

3、如何判断共享服务进程是不是够用呢?
使用如下的语句来确定每次请求的平均等待时间,监测Average Wait time per reques这个值,当这个值持续增长时你该考虑增加shared servers了。
SELECT decode(totalq,0,'No Requests') "Wait Time",
Wait/totalq ||'hundredths of seconds' "Average Wait time per request"
FROM V$QUEUE
WHERE type = 'COMMON'

4、如何在MTS配置的Server请求Dedicate的连接着?
你在Tnsnames.ora中做服务名配置时加入SRVR=DEDICATED这个选项就可以了,示例如下:
billing =
(DEscrīptION =
(
ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = ks3)(PORT = 1521))
)
(
CONNECT_DATA =
(SERVICE_NAME = billing)
(SRVR = DEDICATED)
)
)


参考至:http://www.cnblogs.com/lanzi/archive/2011/03/08/1977317.html

            http://blog.chinaunix.net/uid-7249348-id-95762.html
            http://blog.csdn.net/robinson1988/article/details/4681690
            http://hi.baidu.com/homappy/blog/item/273f2087e2b2133dc75cc3a1.html
            http://space.itpub.net/9399028/viewspace-682158
本文原创,转载请注明出处、作者
如有错误,欢迎指正
邮箱:czmcj@163.com

0
0
分享到:
评论

相关推荐

    数据库的几种设计模式

    ### 数据库设计模式详解 #### 一、主扩展模式 主扩展模式是一种高效的数据库设计方法,主要用于处理具有共同属性但又有特有属性的对象集合。这种模式通过将对象间的共有属性提取到一个统一的表中(公共属性表),...

    数据库设计模式数据库设计模式数据库设计模式

    数据库设计模式详解 数据库设计模式是指在数据库设计过程中遇到的一些常见的问题和解决方案。这些模式可以帮助数据库设计者更好地设计数据库,提高数据库的性能和可维护性。本文将介绍四种主要的数据库设计模式:主...

    浅论英语专有名词的变异本质及理解模式

    英语专有名词是语言学中的一个重要分支,它们在英语学习中占据着不可或缺的地位。这些专有名词通常是...通过深入学习和实践,我们能够更好地理解和运用这些变异的专有名词,从而使我们的英语表达更为精准和地道。

    手机刷机模式、刷机方案与刷机驱动详解.docx

    ### 手机刷机模式、刷机方案与刷机驱动详解 #### 一、引言 随着智能手机技术的快速发展,用户对于个性化系统的需求日益增长,刷机成为了许多手机玩家进行系统定制的重要手段之一。刷机涉及到手机硬件平台、刷机方案...

    应用展示了创建Kiosk(桌面锁定)应用时Android锁屏任务模式的基本使用

    在Android系统中,Kiosk模式,也称为自助服务模式或专有模式,是一种特殊的应用程序部署方式,主要用于商业、教育和公共场所,使设备只能运行特定的应用程序,限制用户对系统的其他部分进行访问。这种模式有助于确保...

    《阿里云专有云总体经济影响报告》.pdf

    阿里云和英特尔委托Forrester Consulting进行的研究表明,79%的大中型企业未来云计算战略中会选择公有云与专有云的混合云模式,而18%的企业会选择仅使用专有云。这种云战略选择凸显了专有云和混合云在未来企业云战略...

    2020年中国专有云行业发展洞察.pdf

    艾瑞咨询2020中国艾瑞给出专有云的定义:专有云是由第三方云服务厂商提供IT基础设施硬件资源和运维管理服务的,并从物理层面隔离出专属虚拟化资源池,所有计算资源仅供所服务的企业独享的一种云服务。也有厂商提出专...

    剖析多租户模式

    多租户模式是SaaS应用的核心,它允许多个用户共享同一个应用程序实例,但每个用户的数据和配置保持隔离。这种模式具有以下显著优势: - **资源高效利用**:多个用户共享一个应用实例,极大提高了资源利用率。 - **...

    TIA 博途编程环境下专有技术保护的实现-密码保护与取消.docx

    综上所述,TIA博途编程环境下专有技术保护的实现主要通过设置密码来完成,能够有效地保护用户的知识产权和技术秘密。通过对上述步骤的详细了解和实践,用户可以更好地理解和掌握如何利用TIAPortal的这一强大功能。

    keil c51使用详解

    - **Small 模式**:默认模式,代码和数据都放在内部 RAM。 - **Compact 模式**:数据存于内部 RAM,代码存于外部 RAM 或 ROM。 - **Large 模式**:所有数据和代码都可存放在外部 RAM 或 ROM。 **第四节 存储类型...

    汉周云计算白皮书详解

    同时,虽然云计算和网格计算都有资源共享的元素,但网格计算更强调开放的资源池,而云计算更倾向于提供封闭、专有的服务环境。 总结来说,汉周云计算白皮书详细阐述了云计算的基本概念、技术背景、市场影响以及与...

    数据库设计模式.pdf

    它将共享的属性抽取到一个单独的“公共属性表”中,而特有的属性则存放在各自的“专有属性表”里,两者之间形成一对一的关系。这种模式适合于对象数量不多,属性差异明显,且每个扩展对象都有独立且复杂的业务处理...

    AWS专有云V3云盾

    阿里云专有云V3云盾能够帮助企业确保业务连续性和安全性,通过先进的安全技术和运营体系,及时发现并处理安全事件,保障业务平稳运行。 #### 三、阿里云解决之道 阿里云专有云V3云盾的安全解决方案主要包括三个...

    专利和专有技术使用许可合同.doc

    《专利和专有技术使用许可合同》是一份重要的法律文件,涉及到知识产权的使用和转让问题。合同中的许可人通常是专利和专有技术的所有者,而被许可人则是获得使用权的一方。以下是合同中的主要知识点: 1. **许可人*...

    2020年中国专有云行业发展洞察1

    通过物理隔离的方式,专有云为单一企业构建专属的虚拟化资源池,确保所有计算资源只为该企业独享,这与公有云的共享资源池模式形成鲜明对比。专有云在资源池的管理和易用性方面类似于公有云,但在安全性和可控性上...

    佛教爬取专有名词

    佛教爬取专有名词

    多图详解Spring框架的设计理念与设计模式.pdf

    Spring框架之所以在众多开源和专有J2EE框架中脱颖而出,是因为它在多个方面进行了革新。Rod Johnson作为Spring框架的创始人,在其著作中提出了对传统Java EE架构的质疑,并提出了自己独特的解决方案。他通过编写...

Global site tag (gtag.js) - Google Analytics