oracle专用模式与共享模式

来源:互联网 发布:淘宝相似问题怎么看 编辑:程序博客网 时间:2024/05/22 07:01


oracle的服务器进程分为:专用(DEDICATED)服务器进程和共享(SHARED)服务器进程


select server from v$session;

专用服务器:一个客户端连接对应一个服务器进程

   共享服务器:多个客户端连接对应一个服务器进程,服务器端存在一个进程调度器来管理。


共享服务器会在共享池中(不是PGA)存储大量会话数据。只要某个共享服务器从公共队列中获取一个作业,那么就会进入SGA并连接适当的内存块,从而找出会话状态
。SGA中用于每个共享服务器会话的内存被称为UGA(User Global Area 用户全局区域,UGA)。除了会话的堆栈空间外,UGA还包含了PGA中所有的存储结构,由此节省了内存。
配置共享服务器:
共享服务器通过实例初始化进行配置,其中有两个关键参数:dispatchers和shared_servers。
1、shared_servers控制实例启动时启动的共享服务器的数目。max_shared_servers设定了最大的共享服务器数目。当shared_servers个共享服务器被用完时,就会额外启动一个共享服务器,
直到共享服务器启动到max_shared_servers时为止。
2、dispatchers参数控制实例启动后启动的调度进程数以及这些进程的行为。dispatchers参数存在许多选项,其中有两个必选参数:启动的调度进程数,这些调度进程应当侦听的协议类型


一、专用服务器进程

   

   数据库服务器要求每个用户拥有一个专用服务器进程,当用户比较多的时候,则其对服务器的硬件资源,特别是内存,会产生比较大的压力。



 


   适用环境:

   1、 只有少数客户端。

   2、 为数据仓库搭建的数据库系统。

   3、 联机事务处理系统。(大事务的处理,若使用共享服务器模式,很有可能会造成有些事务需要进入队列排队,响应时间拉长)

 

二、共享服务器进程

  

    多个用户程序可以并发共用一个服务器进程,客户端程序通过调用调度程序与服务器进程相连

   

 

如何查看是否是共享服务器模式?

1 查看调度程序

SQL> show parameter dispatchers;

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------------------
dispatchers                          string      (PROTOCOL=TCP) (SERVICE=sdecp
                                                 yXDB)
max_dispatchers                      integer     5
mts_dispatchers                      string      (PROTOCOL=TCP) (SERVICE=sdecp
                                                 yXDB)
mts_max_dispatchers                  integer     5


2、查看共享服务器进程数

SQL> show parameter shared_servers;

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------------------
max_shared_servers                   integer     20
shared_servers                       integer     1

 

3、预留

SQL> show parameter shared_server_session;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------
shared_server_sessions               integer     165

 

 

其中

dispatchers:调度程序服务器进程

max_shared_servers :指定同时运行的最大服务器进程数

shared_servers :启动实例时可以创建的服务器进程数

shared_server_sessions:指定用于用户会话的总数,配置此参数可为专用服务器保留用户会话


4.改变进程数

SQL> alter system set shared_servers=2;

系统已更改。

SQL>alter system set max_shared_servers=20;

系统已更改。

SQL> show parameter shared_servers;

NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------------------
max_shared_servers                   integer     20
shared_servers                       integer     2
SQL>

 

优点是客户端进程多对一,增加了数据库可以支持的用户数。缺点就是各个用户共享一个进程,对用户访问数据库的性能有所影响。


共享服务器具有以下一些缺点:

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

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

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

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



NAME                                               TYPE        VALUE                                                                                                
-------------------------------------------------- ----------- ---------------------------------------------------------------------------------------------------- 
hi_shared_memory_address                           integer     0                                                                                                    
max_shared_servers                                 integer     20                                                                                                   
shared_memory_address                              integer     0                                                                                                    
shared_pool_reserved_size                          big integer 6081740                                                                                              
shared_pool_size                                   big integer 0                                                                                                    
shared_server_sessions                             integer                                                                                                          
shared_servers                                     integer     2    


把服务器从共享服务器模式改为专用服务器模式    
alter system set shared_servers = 0 scope = both;--已经存在的共享进程需要等到会话结束才能结束
或 
alter system set max_share_servers=0 scope=both;--立即强制结束所有共享服务器进程


ORACLE用户文档

In DedicatedServer Mode, there is a dedicated server process for each user process.

  Select this option whenthe number of total clients is expected to be small, or when

  database clients willmake persistent, long-running requests to the database.

  In Shared Server Mode,several client connections share a database-allocated pool of

  resources. Use this modewhen a large number of users need to connect to the

  database. It is alsouseful when database memory is limited and for better

  performance, since youcan have more client connections to the database than in

  dedicated server modewith the same memory. If you choose shared server mode, you

  must also indicate thenumber of server processes you want to create when an instance

  is started up. For moreinformation about setting this parameter, click Help.