共享模式 & 专有模式

简介: 一、简介 概念 专有连接:用一个服务器进程响应一个客户端请求 共享连接:在共享服务器模式下,客户端通过监听连接到dispatcher之后,dispatcher会随机分配一个端口,此时客户端断开和监听的连接,通过分配的端口和dispatcher连接。

一、简介

概念

  • 专有连接:用一个服务器进程响应一个客户端请求
  • 共享连接:在共享服务器模式下,客户端通过监听连接到dispatcher之后,dispatcher会随机分配一个端口,此时客户端断开和监听的连接,通过分配的端口和dispatcher连接。和监听的连接是短暂的。

适用场景

  • 对于连接数不多的应用,适宜用专有连接,客户的请求响应及时;
  • 对于连接数较大的应用,适宜用共享连接,充分利用系统资源

二、相关参数

通用参数

  • remote_listener:可以实现数据库和listener的分离。
    • 单机环境的remote_listener 一般为空。
    • rac环境下,listener是跟随集群crs启动的。而且数据库 rdbms的启动要依赖asm实例的资源,所以不存在启动数据库后,listener没启动,当然出现故障除外。
      • local_listener是该节点的listener信息
      • remote_listener一般是scan的信息
  • local_listener
    pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,要想让pmon动态注册listener,需要设置local_listener参数。
  • listener_networks:配置多个remote_listener、local_listener时需要,平时很少用
    例子:alter system set LISTENER_NETWORKS='((NAME=network1)(LOCAL_LISTENER=listener_net1)(REMOTE_LISTENER=scanone.gaopp.com:1521))','((NAME=network2)(LOCAL_LISTENER=listener_net2)(REMOTE_LISTENER=remote_net2))';
共享参数

  • SHARED_SERVERS:如果shared_server值为0,则表示数据库没有启动共享服务模式。 这个参数是配置shared server必须的,而且只有这个参数是必须的。它指定了当实例启动的时候 shared server process 启动的数量,不要将这个参数设置得太大,否者启动数据库instance的时候就会花更多时间,ORACLE启动过后会根据负载来动态调整shared_servers
  • 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_SESSIONS:指定了总共允许的的shared server session 的数量。如果设置了这个参数,那么就不要将这个值超过sessions,如果没有设置这个值,那么只要还有空闲的session,就可以被使用。设置这个值是为专用连接预留的User Sessions.
  • DISPATCHERS: 共享连接的分派器数量
  • MAX_DISPATCHERS: 可同时并发的共享连接的最大的分派器数量,此参数目前可忽略;
  • CIRCUITS: 可用的虚拟回路数(Specifies the total number of virtual circuits that are available for inbound and outbound network sessions)

三、资源

内存

  • large_pool_size
    相比于专用服务器模式,共享服务模式的UGA在SGA中,而专用服务器模式的UGA在PGA当中,共享服务器模式下如果设置了large_pool_size则用户的UGA会在large_pool中。MTS减少的内存实际上是专用服务器模式下每个用户连接到操作系统进程所需的内存,共享服务器模式由于限制了Server Process的数量,减少了建立Server Process所需要的内存,同时当并发量大时不需要频繁的创建和删除进程,减少了与之对应的开销,提升了并发量。所以共享服务器模式适合于高并发,处理量小的业务系统。
进程

数据库启动之后比专用服务器模式会多出两种进程,一种是调度进程(Dnnn),一种是共享服务器进程(Snnn)。来自客户端的请求会被dispatcher接受,然后dispatcher将请求置入Request队列。空闲的Server Process会按照request队列开始处理队列中的请求。处理过后的结果放入Response队列中。最后再由DIspatcher来将最后的结果返回给客户端。
  • Snnn:分派器进程使得客户端进程可以共享数量有限的服务器进程。可以为单个数据库实例创建多个分派器进程。分派器进程的最佳个数取决于操作系统的限制和每个进程的连接数。
  • Dnnn:在共享服务器配置中,每个共享服务器进程为多个客户端请求服务。除了共享服务器进程不与特定客户端进程相关联外,共享服务器进程和专用服务器进程提供相同的功能。

四、优缺点

优点

  • 减少了实例中的进程数
  • 增加了更多并发用户的数量
  • 实现动态负载均衡
  • 减少了空闲服务器进程数量
  • 减少了实例PGA内存
缺点:由于共享服务器模式存在种种问题,同时中间件也完全可以实现连接池的效果,所以一般情况下不会共享服务器模式,使用专用服务器模式即可。
  • 共享服务器的代码路径比专用服务器长,所以它天生就比专用服务器慢。
  • 存在人为死锁的可能,因为它是串行的,只要一个连接阻塞,则该服务器进程上的所有用户都被阻塞,并且极可能死锁。
  • 存在独占事务的可能,因为如果一个会话的事务运行时间过长,它独占共享资源,其它用户只能等待,而专用服务器,每个客户端是一个会话。
  • 共享服务器模式限制了某些数据库特性,例如:不能单独启动和关闭实例,不能进行介质恢复,不能使用Log Miner,并且SQL_TRACE没有意义(因为是共享而不是当前会话的)。

五、信息收集

event

  • event 10257(后续会距离详细说明)

视图
  • V$DISPATCHER:提供DISPATCH进程信息,包括DISPATCH名称,网络,地址,状态,统计信息和索引号等;
    有记录,说明是配置了dispatchers参数
  • V$DISPATCHER_CONFIG:提供DISPATCH的配置信息
  • V$DISPATCHER_RATE:提供DISPATCH的速度(RATE)统计
  • V$CIRCUIT:提供用户通过DISPATCH连接到数据库的虚拟回路信息(virtual circuits)
    有记录说明当前有使用共享模式的连接,无记录则不能判定服务器模式
  • V$SHARED_SERVER:提供共享服务器信息
    有记录,且STATUS字段为WAIT(COMMON),则说明启动共享;
    无记录,或STATUS字段为TERMINATED,则说明没有启动共享服务器
  • V$SHARED_SERVER_MONITOR:提供共享服务器的优化信息
  • V$QUEUE:提供共享服务器队列信息.
  • V$SESSION:如果SERVER字段的值除了DEDICATED,还有NONE,则说明当前实例启动了共享服务器,并且SERVER为NONE的会话正使用共享服务器连接,同时,如果只显示有DEDICATED,则不能说明服务器就一定工作在专用服务器下面,此时也有可能启动了共享模式。只是目前连接到数据库的都是专用服务器模式。

六、关闭数据库共享模式

  1. 只需要将参数shared_servers设置为0,即可关闭数据库的共享模式。执行该脚本后,所有以共享方式连接到数据库都不能成功,但是未释放的共享连接会继续保持连接,直到断开为止。
    alter system set shared_servers=0;
  2. 如果同时将参数shared_servers和max_shared_servers都设置为0,那么共享连接方式将被终结。所有的共享方式连接都会断开(已经连接的会话也会断开)

七、开启数据库共享模式

  1. 设置shared_servers这个参数,将其值设置为大于0即可开启服务器共享模式。其他的共享服务器参数可以不用设置,但是最好也设置一下max_shared_servers参数
    alter system set shared_servers=1 scope=both;
    alter system set max_shared_servers =24 scope=both;
  2. 关于参数dispatchers的设置,可以使用下面命令
    alter system set dispatchers='(protocol=TCP)(disp=8)(serv=xxx)’
    前面表示的是协议,disp表示调度器(dipatcher)的进程数量,service分别指定要采用共享服务器模式的服务名称。使用上面的模式指定只启动某个服务的共享模式,如果要设置所有服务都使用共享模式,则设置为:
    alter system set dispatchers='(PROTOCOL=TCP)';

八、当前模式的判断

  1. 查看V$SESSION视图
    通过v$session视图的SERVER字段来进一步判断当前连接模式
    SELECT SID, USERNAME, OSUSER, MACHINE,TERMINAL, SERVER
      FROM V$SESSION
     WHERE USERNAME IS NOT NULL;
  2. 查看连接数据库的tns配置文件,如下所示
    TEST =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.16.22)(PORT = 1521))
        )
        (CONNECT_DATA =
          # SERVER = DEDICATED为专用服务模式
          (SERVER = SHARED)
          (SERVICE_NAME = epps)
        )
      )

目录
相关文章
|
6月前
|
前端开发 JavaScript 安全
开源一款剪贴板跨设备共享工具
`shigen`,编程博主,擅长多种语言,近期自制了一个名为`copyhub`的工具,用于局域网内跨设备同步剪贴板。设计灵感源于对现有共享工具的安全顾虑,采用`Flask`和`Redis`实现,前端直接HTML+JS,简化架构。用户通过取件码交换内容,不涉及复杂功能。代码已开源并在个人腾讯云服务器上部署。更多详情见shigen的GitHub和哔哩哔哩频道。一起探索,每天进步!
143 1
开源一款剪贴板跨设备共享工具
|
2天前
|
5G 网络架构
怎么区分5G卡片开启的网络类型是NSA(非独立组网)还是SA(独立组网)
要确定5G卡片开启的网络类型是NSA(非独立组网)还是SA(独立组网),你通常需要进行以下操作:
|
3月前
|
负载均衡 安全 网络虚拟化
CCE集群VPC网络模式下几种访问场景
【8月更文挑战第13天】在CCE(Cloud Container Engine)集群的VPC网络模式下,支持多样化的访问场景:容器应用可直接利用VPC访问外部资源;通过ELB负载均衡或VPN/专线配置,实现外部网络对容器应用的安全访问;容器间通过内部IP或服务发现机制相互通信;跨VPC访问则可通过VPC对等连接或云连接服务实现。这些方案确保了应用内外部通信的安全与高效。
112 3
|
弹性计算 负载均衡 网络安全
阿里云默认专有网络是什么?
什么是专有网络VPC?创建云服务器或者云数据库需要选择或创建专有网络,阿里云专有网络VPC有什么用?专有网络是上云用户在云上的私有网络,云上用户可以自己完全掌控的私有网络,可以自定义设置IP地址、配置路由表及网关等操作,阿里云百科来详细说下什么是专有网络:
202 0
阿里云默认专有网络是什么?
|
弹性计算 网络安全 数据中心
阿里云创建专有网络10.0.0.0/8、172.16.0.0/12和192.168.0.0/16
阿里云专有网络VPC私网网段可选192.168.0.0/16、172.16.0.0/12或10.0.0.0/8,如何选择?阿里云百科来详细说下阿里云专有网络IPv4网段选择方法:
508 0
阿里云创建专有网络10.0.0.0/8、172.16.0.0/12和192.168.0.0/16
|
网络安全
阿里云默认专有网络和默认交换机是什么?
阿里云默认专有网络和默认交换机是什么?专有网络VPC是阿里云为用户提供的云上私有网络,系统会为每个用户自动创建默认专有网络和默认交换机,如果对于专有网络规划没有特殊要求的用户,选择默认即可,也可以自定义设置专有网络和交换机,创建专有网络可以指定IPv4网段、交换机网段等配置。
214 0
阿里云默认专有网络和默认交换机是什么?
|
弹性计算 负载均衡 安全
创建专有网络及安全组 | 学习笔记
快速学习创建专有网络及安全组
212 0
创建专有网络及安全组 | 学习笔记
|
网络安全 云计算 开发者
创建专有网络|学习笔记
快速学习创建专有网络
创建专有网络|学习笔记
|
弹性计算 运维 负载均衡
如何实现多账号共享VPC
多账号共享VPC架构具备上下通吃的特点,今天就给大家介绍一下这个架构要如何落地实施。
953 0
如何实现多账号共享VPC
|
物联网 API 存储
IoT存量设备跨账号迁移,动态切换region节点,公共区到企业实例迁移方案
基于开放API实现IoT存量设备跨账号迁移设备,动态切换region节点,企业实例迁移
5117 0
IoT存量设备跨账号迁移,动态切换region节点,公共区到企业实例迁移方案