配置共享服务器模式

简介: --====================== -- 配置共享服务器模式 --======================   一、服务器的两种模式:专用服务器模式、共享服务器模式     1.共同点:         两者完成相同的任务,即处理所有指定的SQL操作。

--======================

-- 配置共享服务器模式

--======================

 

一、服务器的两种模式:专用服务器模式、共享服务器模式

    1.共同点:

        两者完成相同的任务,即处理所有指定的SQL操作。假定从客户端提交一个任意查询(DQL)到数据库服务器不论是专用模式还是共享

        模式都将对给出的SQL查询进行语法分析并生成执行计划放置到共享池(如果共享池中已有,则省略该步骤)。接下对变量等执行绑定

        过程,绑定完毕后开始执行。如果数据缓冲区已有该数据的数据块则直接返回给客户端,否则从数据文件中读取数据。

        两者都是完成四个过程:SQL语句-->分析-->绑定-->执行-->返回结果

       

    2.Oracle 数据库服务器中的几类进程

        用户进程   -->位于客户端,比如服务器位于Unix系统,客户端为Winxp,用户进程实际上处于Winxp系统

        服务器进程 -->位于服务器端,响应客户端的请求,通常为大量消耗CPU资源的进程,比如执行排序、聚合、联结等等

        后台进程   -->位于服务器端,负责后台数据的读写、归档、监控等等(DBWnLGWRCKPTPMONSMONARCn)

       

    3.专用服务器模式:

        是一个一对一的模式,即一个客户端产生一个服务器进程(在通Oracle Net成功连接之后)

        该类服务器进程通过TCPTCPS等直接建立连接,且此类服务器进程不为实例所有

        该类服务器进程一旦建立,直到退出和关闭该会话相关的资源才被释放

       

        建立服务器进程的过程(参照Expert Oracle Database Architecture: 9i and 10g Programming Techniques and Solutions)

            -->①Client Connection Request -->②Listener -->③fork()/exec() -->④Server Process-->①

            客户端发出连接请求到侦听器,建立连接之后,调用fork()exec()产生一个Server Process,接下来该服务器进程直接和客

                户端进程通信

            对于Win平台,Listener进程请求数据库进程为新的连接创建一个新的线程,一旦该线程被创建,客户端将重定向到新线程进行

                直接连接

           

        --查看服务器后台建立的服务器进程

            [oracle@robinson udump]$ ps -ef | grep oracleorcl  -->local=no表示非本地客户端进程,=yes为本地客户端进程

            oracle    5454  4723  0 19:08 ?        00:00:01 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

            oracle    5488     1  0 19:10 ?        00:00:00 oracleorcl (LOCAL=NO) 

            oracle    5533     1  0 19:30 ?        00:00:00 oracleorcl (LOCAL=NO)

       

    4.共享服务器模式:

        配置共享模式后,在实例在启动时,多出了两类新的进程类型:调度进程(Dispatcher)和共享服务器进程(Shared server processes)

            可以使用一个或多个调度进程(d001,d002,d003...)

            也可以使用一个或多个共享服务器进程(snnn,snnn,snnn)

            此外会在SGA共享池内开辟部分空间来用作队列的存储,包含请求队列、响应队列

                如果配置了large_pool_sizesga_target则使用SGAlarge pool 来处理所有队列

               

        共享服务器模式强制使用Oracle Net,而不论客户端与服务器是否处于同一台主机

            当使用共享模式的连接时,服务器上的所有本地连接(包括sysdba建立的连接)都会得到一个专用服务器,使用IPC进行连接

            在专用模式下,同一台主机的本地连接同样使用Oracle Net,且使用的网络协议为IPC

           

        当从客户端连接到服务器时候,不能显示的看到有新的进程产生,而是通过Dispatcher进程进行通讯,由shared_server进程处理

        其过程如下

            -->①Client Connection Request -->②Listener -->③Dispatcher -->④Request Queue

            -->⑤Shared Server -->⑥Response Queue -->⑦Dispatcher -->①Client Connection Request

            客户端发出连接请求,Listener侦听并将请求转交给调度进程(Dispatcher),调度进程则将所需完成的任务

            放入SGA中开辟的请求队列中,接下来空闲的共享服务器进程处理这些任务并将结果放置到各自的响应队列之中

            调度进程轮询检查是否有完成的任务,如有,则将结果返回给对应的客户端

            注意:当客户端通过Listener连接到Dispatcher后,Dispatcher将随机分配服务器上的一个端口号,

                Listener将该端口号返回给客户端,接下来客户端将断开与Listener的连接而直接与dispatcher建立连接

            对于会话的保持,客户端与调度进程(dispatcher)的连接必须是持久的,而与Listener的连接是短暂的

            所有调度进程共享一个公共的输入队列,但是每个调度进程都具有自己的响应队列

           

        使用共享服务器模式的优点

            减少了实例中的进程数

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

            实现动态负载均衡

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

            降低了对内存的使用

       

    5.两种模式对SGAPGA的影响

        专用服务器模式

            用户会话的数据保存在PGA

                SGA(Shared pool and other memory structers)

                PGA(Stack spaceUser session dataCursor State)

        共享服务器模式

            用户会话的数据保存在SGA

                SGA(User session dataCursor stateShared pool and other memory structers)

                PGA(Stack space)

               

二、配置共享服务器

    1.必须要配置的参数

        dispatchers  --为指定的协议指定调度进程的个数

            dispatchers='(protocol=tcp)(dispatchers=2)(protocol=ipc)(dispatchers=1)'

            上面将为实例指定TCP协议启用个dispatchersIPC协议启用个dispatchers

       

    2.可选的配置参数

        shared_servers   --指定实例启动时至少启动共享服务器进程的个数

        max_shared_servers  --在负荷增大时启动共享服务器进程的最大个数,当负荷减少则进程动态减少到启动时的个数

                            --该参数缺省为processes参数值的八分之一

        max_dispatchers --指定dispatchers允许同时启用的最大个数,alter system set max_dispatchers=4

        local_listener  --告知实例其应当注册的侦听器的地址

        large_pool_size --在共享服务器模式下,该参数可以减轻共享池的使用

        circuits  --指定请求队列和响应队列中可用回路的总数量

        shared_server_sessions --用于指定共享服务器进程所允许会话数的总和,建议该参数值小于sessions参数值

                               --设定该参数将为专用服务器保留可用的会话数(sessions-shared_server_sessions)

        processes --该参数限制能够连接SGA的操作系统进程数(Windows线程数),针对操作系统而言

        sessions  --允许连接到Oracle的会话总数,针对Oracle 而言,该参数值是全局的sessions数目

   

    --设置dispatchers参数

        SQL> alter system set dispatchers='(protocol=tcp)(dispatchers=2)' scope=spfile;

 

        System altered.

   

    --查看设定后的参数

        SQL> show parameter dispatchers;

 

        NAME                                 TYPE        VALUE

        ------------------------------------ ----------- ------------------------------

        dispatchers                          string      (protocol=tcp)(dispatchers=2)

        max_dispatchers                      integer

        SQL> show parameter shared_ser

 

        NAME                                 TYPE        VALUE

        ------------------------------------ ----------- ------------------------------

        max_shared_servers                   integer

        shared_server_sessions               integer

        shared_servers                       integer     1     

   

    --设定后需要重新启动数据库,下面查看重新启动后的后台进程,包括了两个dispatchers进程d000,d001和一个共享服务器进程s000

        SQL> ho ps -ef | grep ora

        oracle    6080     1  0 21:09 ?        00:00:00 ora_d000_orcl

        oracle    6082     1  0 21:09 ?        00:00:00 ora_d001_orcl

        oracle    6084     1  0 21:09 ?        00:00:00 ora_s000_orcl  

   

    --修改最大的dispatchers的数目

        SQL> alter system set max_dispatchers=3;

 

        System altered.    

 

        SQL> show parameter dispatchers;

 

        NAME                                 TYPE        VALUE

        ------------------------------------ ----------- ------------------------------

        dispatchers                          string      (protocol=tcp)(dispatchers=2)

        max_dispatchers                      integer     3

   

    --修改共享服务器的数目和最大可用数目

        SQL> alter system set shared_servers=3;

 

        System altered.

 

        SQL> alter system set max_shared_servers=6;

 

        System altered.

 

        SQL> show parameter shared_servers;

 

        NAME                                 TYPE        VALUE

        ------------------------------------ ----------- ------------------------------

        max_shared_servers                   integer     6

        shared_servers                       integer     3

 

    --查看v$circuit视图,有一个dispatcher提供了共享模式服务

        SQL> select dispatcher,saddr,circuit from v$circuit;

 

        DISPATCH SADDR    CIRCUIT

        -------- -------- --------

        35221F0C 35317110 331F7AA4

 

    3.配置使用多种连接方式

        当配置了共享服务器之后,客户端请求连接到共享服务器,如果dispatchers未注册到listener,则请求将由专用服务器来处理

        如果希望将特定的客户端总是使用共享服务器模式进行连接,则可以配置tnsnames.oraconnect_data,为其增加(server=shared)

        如果dispatchers不可用,则从客户端的连接请求将被拒绝

       

        --下面是客户段tnsnames.ora配置文件修改后的内容

        # tnsnames.ora Network Configuration File: F:/oracle/product/10.2.0/client_1/NETWORK/ADMIN/tnsnames.ora

        # Generated by Oracle configuration tools.

 

        list2 =     --该网络服务名中的内容未使用server参数,则表示既可以使用dedicated,也可以使用shared server模式

          (DESCRIPTION =

            (ADDRESS_LIST =

              (ADDRESS = (PROTOCOL = TCP)(HOST = oradb.robinson.com)(PORT = 1521))

            )

            (CONNECT_DATA =

              (SERVICE_NAME = orcl.robinson.com)

            )

          )

 

        shared =  --使用shared server模式

          (DESCRIPTION =

            (ADDRESS_LIST =

              (ADDRESS = (PROTOCOL = TCP)(HOST = oradb.robinson.com)(PORT = 1521))

            )

            (CONNECT_DATA =

              (SERVICE_NAME = orcl.robinson.com)

              (SERVER=shared)

            )

          )

 

        dedicated =  --使用dedicated 模式

          (DESCRIPTION =

            (ADDRESS_LIST =

              (ADDRESS = (PROTOCOL = TCP)(HOST = oradb.robinson.com)(PORT = 1521))

            )

            (CONNECT_DATA =

              (SERVICE_NAME = orcl.robinson.com)

              (SERVER=dedicated)

            )

          )

           

        SQL> select circuit,dispatcher,saddr,status from v$circuit;

 

        no rows selected

 

        --接下来打开多个Dos窗口,从Windows客户端使用下列不同的方式连接到客户端

            SQL> conn sys/redhat@list2 as sysdba   --任意连接方式

            Connected.

            SQL> conn scott/tiger@shared           --使用shared server模式

            Connected.

            SQL> conn hr/hr@dedicated              --使用dedicated 模式

            Connected.

            SQL> conn system/redhat@list2          --任意连接方式

            Connected.

 

        --再次查看v$circuit视图,三条记录分别对应除hr帐户之外的不同客户端

            SQL> select circuit,dispatcher,saddr,status from v$circuit;

 

            CIRCUIT  DISPATCH SADDR    STATUS

            -------- -------- -------- ----------------

            331F7AA4 35221F0C 35315D38 NORMAL

            331F81C4 352224C8 35313588 NORMAL

            331F88E4 352224C8 35310DD8 NORMAL

 

        --查看网络连接状态

            [oracle@oradb ~]$ netstat -anp | more

            (Not all processes could be identified, non-owned process info

             will not be shown, you would have to be root to see it all.)

            Active Internet connections (servers and established)

            Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name  

            tcp        0      0 0.0.0.0:29639               0.0.0.0:*                   LISTEN      3368/ora_d001_orcl 

            tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      -                  

            tcp        0      0 0.0.0.0:1521                0.0.0.0:*                   LISTEN      3409/tnslsnr       

            tcp        0      0 0.0.0.0:46001               0.0.0.0:*                   LISTEN      3366/ora_d000_orcl 

            tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      -                  

            tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      -                  

            tcp        0      0 0.0.0.0:763                 0.0.0.0:*                   LISTEN      -                  

            tcp        0      0 127.0.0.1:59892             127.0.0.1:1521              ESTABLISHED 3344/ora_pmon_orcl 

            tcp        0      0 192.168.1.128:1521          192.168.1.188:1306          ESTABLISHED 3426/oracleorcl    

            tcp        0      0 192.168.1.128:1521          192.168.1.188:1309          ESTABLISHED 3368/ora_d001_orcl 

            tcp        0      0 192.168.1.128:1521          192.168.1.188:1310          ESTABLISHED 3368/ora_d001_orcl 

            tcp        0      0 192.168.1.128:1521          192.168.1.188:1303          ESTABLISHED 3366/ora_d000_orcl 

            tcp        0      0 127.0.0.1:1521              127.0.0.1:59892             ESTABLISHED 3409/tnslsnr       

            tcp        0      0 :::22                       :::*                        LISTEN      -                  

            tcp        0      0 ::ffff:192.168.1.128:22     ::ffff:192.168.1.188:1273   ESTABLISHED -                  

            udp        0      0 127.0.0.1:41602             0.0.0.0:*                               3372/ora_s001_orcl 

            udp        0      0 127.0.0.1:32134             0.0.0.0:*                               3374/ora_s002_orcl 

            udp        0      0 127.0.0.1:53130             0.0.0.0:*                               3368/ora_d001_orcl 

            udp        0      0 127.0.0.1:6549              0.0.0.0:*                               3366/ora_d000_orcl 

            udp        0      0 0.0.0.0:64552               0.0.0.0:*                               -                  

            udp        0      0 127.0.0.1:23891             0.0.0.0:*                               3370/ora_s000_orcl 

 

        --从上面可以看出客户端.168.1.188连接到了服务器.168.1.128Program name d000,d001等即连接到了dispatcher

        --92.168.1.128:1521 192.168.1.188:1306 ESTABLISHED 3426/oracleorcl 这个进程即为dedicated 产生的服务器进程

 

        --查看进程

            SQL> ho ps -ef | grep 3368

            oracle    3368     1  0 09:56 ?        00:00:00 ora_d001_orcl  --PID 3368dispatchers进程

            oracle    3479  3341  0 10:38 pts/0    00:00:00 /bin/bash -c ps -ef | grep 3368              

 

        --查看listener中的注册及来自客户端的连接情况

            SQL> ho lsnrctl services

 

            LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 12-OCT-2010 10:40:11

 

            Copyright (c) 1991, 2007, Oracle.  All rights reserved.

 

            Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oradb.robinson.com)(PORT=1521)))

            Services Summary...

            Service "orcl.robinson.com" has 1 instance(s).

              Instance "orcl", status READY, has 3 handler(s) for this service...

                Handler(s):

                  "D001" established:2 refused:0 current:2 max:1022 state:ready  --此处D001为两个连接提供了服务

                     DISPATCHER <machine: oradb.robinson.com, pid: 3368>         --这里是pid

                     (ADDRESS=(PROTOCOL=tcp)(HOST=oradb.robinson.com)(PORT=29639)) --这里是产生的随机端口号

                  "D000" established:1 refused:0 current:1 max:1022 state:ready    --此处同上

                     DISPATCHER <machine: oradb.robinson.com, pid: 3366>

                     (ADDRESS=(PROTOCOL=tcp)(HOST=oradb.robinson.com)(PORT=46001))

                  "DEDICATED" established:1 refused:0 state:ready                  --此处产生了一个dedicated连接

 

三、监视共享服务器

    监视共享服务器用到的视图

        v$circuit

        v$session

        v$dispatcher

        v$shared_server

        v$shared_server_monitor

        v$queue

   

    --执行下面的查询来获得共享服务器的相关信息 

    select c.dispatcher,c.server, /*c.status,*/ c.queue,

        s.username,s.status, /*s.server,*/ s.process,s.terminal,s.program, --s.event,

        d.name,/*d.network,*/ d.idle,d.busy

    from v$circuit c

        join v$session s

            on c.dispatcher = s.paddr

        join v$dispatcher d

            on d.paddr = s.paddr

 

    DISPATCHER  SERVER  QUEUE   USERNAME    STATUS  PROCESS TERMINAL    PROGRAM NAME    IDLE    BUSY

    352224C8    35224CEC    SERVER  SYSTEM  INACTIVE    1448:3452   ROBINSON_XP sqlplus.exe D001    229708    5

    352224C8    35222A84    SERVER  SYSTEM  INACTIVE    1448:3452   ROBINSON_XP sqlplus.exe D001    229708    5

    352224C8    0           NONE    SYSTEM  INACTIVE    1448:3452   ROBINSON_XP sqlplus.exe D001    229708    5

    35221F0C    35223040    SERVER  SCOTT   INACTIVE    3632:2244   ROBINSON_XP sqlplus.exe D000    229697    14

    35221F0C    0           NONE    SCOTT   INACTIVE    3632:2244   ROBINSON_XP sqlplus.exe D000    229697    14

 

    SQL> select * from v$shared_server;  --v$shared_serve视图中获得相关信息

 

    NAME PADDR    STATUS             MESSAGES      BYTES     BREAKS CIRCUIT        IDLE       BUSY   REQUESTS

    ---- -------- ---------------- ---------- ---------- ---------- -------- ---------- ---------- ----------

    S000 35222A84 WAIT(RECEIVE)            90      28223          0 331F88E4      63696     181019         39

    S001 35223040 WAIT(RECEIVE)          1016     731342          3 331F9E44     227329      17377         53

    S003 35224CEC WAIT(RECEIVE)           508     293481          2 331F9004      30553      12871          7      

 

    SQL> select * from v$shared_server_monitor;  --v$shared_server_monitor中获得相关信息

 

    MAXIMUM_CONNECTIONS MAXIMUM_SESSIONS SERVERS_STARTED SERVERS_TERMINATED SERVERS_HIGHWATER

    ------------------- ---------------- --------------- ------------------ -----------------

                      6                6               2                  2                 4

                 

四、总结:

 

    1.当配置了使用共享服务器模式,即设定了dispatchers,则应当设定下列实例参数

            shared_servers(指定dispatchers后缺省被置为)

            large_pool_size

        此外在任何情况下,始终应当设置processessessions

        对于未使用缺省端口的侦听器,应当设置local_listener

        对于客户端连接到数据库可以通过修改客户端配置文件tnsnames.ora来指定连接时使用专用或共享模式

            connect_data中增加该选项:server=dedicated | shared

        对于本地客户端连接到数据库则使用的是专用服务器模式

        如果在客户端sqlnet.ora中指定了参数USE_DEDICATED_SERVER=on 则该设置将覆盖连接描述符中的server=dedicated |share

       

            SQL> conn sys/redhat@shared as sysdba  --从客户端使用共享模式连接

            Connected.

            SQL> shutdown immediate                --共享模式不支持远程关闭数据库

            ORA-00106: cannot startup/shutdown database when connected to a dispatcher

 

            SQL> conn sys/redhat@dedicated as sysdba  --从客户端使用专用模式连接

            Connected.

            SQL> shutdown immediate;                --专用模式支持远程关闭数据库

            Database closed.

            Database dismounted.

            ORACLE instance shut down.     

       

    2.何时使用专用模式

        下列三种情况适用于专用服务器模式

            提交事务的为批处理

            启动关闭或执行恢复使用sysdba

            在层架构中,专用模式具有更好的性能

   

   

    3.何时使用共享模式

        多用于管理许多完成短事务会话的OLTP系统

   

    4.一般情况下模式的选择

        当并发数为几百左右或多于一千,则应当考虑使用共享服务器,当过多的上下文转接会导致操作系统性能退化

        当并发数少于一百,则一般使用专用服务器模式

   

五、更多

 

Oracle 冷备份

 

SPFILE错误导致数据库无法启动

 

Oracle 用户、对象权限、系统权限

 

Oracle 角色、配置文件

 

  Oracle 联机重做日志文件(ONLINE LOG FILE)

 

  Oracle 控制文件(CONTROLFILE)

 

  Oracle 表空间与数据文件

 

Oracle 归档日志

 

 

 

 

       

       

       

   

 

目录
相关文章
|
4天前
|
存储 运维 Oracle
服务器数据恢复—光纤共享存储互斥出现问题的数据恢复案例
两台SOLARIS系统(SPARC平台)的服务器通过光纤交换机共享同一个存储作为CLUSTER使用。正常情况下只有A服务器工作。如果A服务器发生故障宕机,可将A服务器关机,开启B服务器接管。但由于配置不当导致共享存储互斥出现问题。 管理员进行运维检查时发现B服务器连接了一块未知磁盘。由于B服务器并未启用,处于闲置状态,所以管理员也将这块磁盘当作闲置的,于是在B服务器上将磁盘的某个分区做了newfs。没想到这块磁盘就是那个共享存储,执行操作没有多长时间A服务器就开始报警并宕机。
|
2天前
|
存储 弹性计算 负载均衡
阿里云服务器地域、实例、带宽与操作系统等配置选择指南参考
在数字化时代,无论是个人博客、企业官网、APP后端支持,还是小程序运行或者其他项目,云服务器都扮演着至关重要的角色,考虑产品质量、服务和价格等因素,大家现在都喜欢选择阿里云服务器。然而,对于初次接触云服务的新手来说,可能并不是很清楚应该如何选阿里云服务器的地域、实例、带宽与操作系统等配置。本文将从地域选择、实例规格、操作系统、云盘配置、购买时长以及带宽选择等六个方面,为新手用户提供详细的选购指南,以供参考。
阿里云服务器地域、实例、带宽与操作系统等配置选择指南参考
|
9天前
|
关系型数据库 MySQL Linux
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
|
9天前
|
Ubuntu 应用服务中间件 Linux
在Linux中,如何配置Web服务器(如Apache或Nginx)?
在Linux中,如何配置Web服务器(如Apache或Nginx)?
|
9天前
|
安全 Ubuntu 网络协议
在Linux中,如何配置DHCP服务器?
在Linux中,如何配置DHCP服务器?
|
9天前
|
域名解析 网络协议 Linux
在Linux中,如何配置DNS服务器?
在Linux中,如何配置DNS服务器?
|
1天前
|
数据采集 弹性计算 供应链
阿里云服务器付费模式:按量付费、包年包月和抢占式实例全解析
阿里云服务器提供包年包月、按量付费与抢占式实例三种付费模式。包年包月为预付费,适合长期稳定使用,价格更优惠并支持备案。按量付费则为后付费模式,按小时结算,适合短期或访问量波动大的场景,但不支持备案。抢占式实例基于按量付费,价格更低(最多节省90%),适用于无状态应用,如临时测试或可弹性伸缩的Web服务,但存在被系统释放的风险,同样不支持备案。根据具体需求选择合适的付费模式能够有效降低成本并提高效率。
9 0
|
9天前
|
关系型数据库 MySQL Linux
在Linux中,如何配置邮件服务器?
在Linux中,如何配置邮件服务器?
|
弹性计算 Shell Windows
阿里云学生专享ecs服务器体验及个人配置
阿里云学生优惠专享的云服务器个人使用体验
阿里云学生专享ecs服务器体验及个人配置
|
15天前
|
机器学习/深度学习 编解码 人工智能
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
随着人工智能、大数据和深度学习等领域的快速发展,GPU服务器的需求日益增长。阿里云的GPU服务器凭借强大的计算能力和灵活的资源配置,成为众多用户的首选。很多用户比较关心gpu云服务器的收费标准与活动价格情况,目前计算型gn6v实例云服务器一周价格为2138.27元/1周起,月付价格为3830.00元/1个月起;计算型gn7i实例云服务器一周价格为1793.30元/1周起,月付价格为3213.99元/1个月起;计算型 gn6i实例云服务器一周价格为942.11元/1周起,月付价格为1694.00元/1个月起。本文为大家整理汇总了gpu云服务器的最新收费标准与活动价格情况,以供参考。
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析

热门文章

最新文章

下一篇
云函数