干货 | [数据库] Oracle 网络配置之共享模式和专有模式

Posted 海量数据学院

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货 | [数据库] Oracle 网络配置之共享模式和专有模式相关的知识,希望对你有一定的参考价值。



简介
干货 | [数据库] Oracle 网络配置之共享模式和专有模式


概念


  • 专有连接:用一个服务器进程响应一个客户端请求。

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


适用场景


  • 对于连接数不多的应用,适宜用专有连接,客户的请求响应及时;

  • 对于连接数较大的应用,适宜用共享连接,充分利用系统资源。




干货 | [数据库] Oracle 网络配置之共享模式和专有模式
相关参数
干货 | [数据库] Oracle 网络配置之共享模式和专有模式


通用参数


  • remote_listener:可以实现数据库和 listener 的分离。

    1. 单机环境的 remote_listener 一般为空。

    2. rac 环境下,listener 是跟随集群 crs 启动的。而且数据库 rdbms 的启动要依赖 asm 实例的资源,所以不存在启动数据库后,listener 没启动,当然出现故障除外。

      1. local_listener 是该节点的 listener 信息

      2. 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)




干货 | [数据库] Oracle 网络配置之共享模式和专有模式
资源
干货 | [数据库] Oracle 网络配置之共享模式和专有模式



内存


  • 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:在共享服务器配置中,每个共享服务器进程为多个客户端请求服务。除了共享服务器进程不与特定客户端进程相关联外,共享服务器进程和专用服务器进程提供相同的功能。



干货 | [数据库] Oracle 网络配置之共享模式和专有模式
优缺点
干货 | [数据库] Oracle 网络配置之共享模式和专有模式


优点


  1. 减少了实例中的进程数

  2. 增加了更多并发用户的数量

  3. 实现动态负载均衡

  4. 减少了空闲服务器进程数量

  5. 减少了实例 PGA 内存


缺点


由于共享服务器模式存在种种问题,同时中间件也完全可以实现连接池的效果,所以一般情况下不会共享服务器模式,使用专用服务器模式即可。


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

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

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

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



干货 | [数据库] Oracle 网络配置之共享模式和专有模式
信息收集
干货 | [数据库] Oracle 网络配置之共享模式和专有模式


event


  • event 10257(后续会具体详细说明)


视图



  • 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,则不能说明服务器就一定工作在专用服务器下面,此时也有可能启动了共享模式。只是目前连接到数据库的都是专用服务器模式。



干货 | [数据库] Oracle 网络配置之共享模式和专有模式
关闭数据库共享模式
干货 | [数据库] Oracle 网络配置之共享模式和专有模式



1. 只需要将参数 shared_servers 设置为 0,即可关闭数据库的共享模式。执行该脚本后,所有以共享方式连接到数据库都不能成功,但是未释放的共享连接会继续保持连接,直到断开为止。


alter system set shared_servers=0;


2. 如果同时将参数 shared_servers 和 max_shared_servers 都设置为 0,那么共享连接方式将被终结。所有的共享方式连接都会断开(已经连接的会话也会断开)



干货 | [数据库] Oracle 网络配置之共享模式和专有模式
开启数据库共享模式
干货 | [数据库] Oracle 网络配置之共享模式和专有模式



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)';



干货 | [数据库] Oracle 网络配置之共享模式和专有模式
当前模式的判断
干货 | [数据库] Oracle 网络配置之共享模式和专有模式



1. 查看 V$SESSION 视图

通过 V$session 视图的 SERVER 字段来进一步判断当前连接模式。    


干货 | [数据库] Oracle 网络配置之共享模式和专有模式


2. 查看连接数据库的 tns 配置文件,如下所示




海量数据学院

领先的ABC+职业教育机构


官网:www.abcplus.com.cn


以上是关于干货 | [数据库] Oracle 网络配置之共享模式和专有模式的主要内容,如果未能解决你的问题,请参考以下文章

干货!手把手教你在 Centos 上安装 Oracle19c RAC 集群,文档巨详细值得收藏!!

技术干货 | DBA之Oracle数据库的备份恢复

搭建NFS网络文件共享服务(干货)

#yyds干货盘点#K8S 之网络互联通信

oracle拨云见日第6篇之网络配置

Oracle学习笔记之第七节共享专用服务器配置及案例