ITPub博客

首页 > 数据库 > Oracle > 如何基于共享服务器模式shared server mode配置大池large pool

如何基于共享服务器模式shared server mode配置大池large pool

原创 Oracle 作者:wisdomone1 时间:2015-09-23 01:06:13 0 删除 编辑

背景

   在之前的文章中,已经了解了在RMAN操作期间以及并行查询过程,如何配置使用大池,这篇文章,我们学习如何在共享服务器模式下
配置大池。   
   本文主要测试如何配置共享服务器模式,因为共享服务器模式涉及内容比较多,这是第一篇文章,后须会有其它文章进行全面补充,待把共享服务器模式相关知识
熟悉完毕,方可继续学习如何基于共享服务器模式配置大池。  


结论


1,共享服务器模式可以减去大量内存的使用,即少量的共享服务器进程可以服务大量的用户连接请求
2,客户端的用户会话信息,不是存储在共享服务器进程中,而是存储在SGA,且必须要让所有的共享服务器进程可以访问
3,客户端的用户会话必须通过调度器进程,先存储到SGA中一个请求队列中,然后由可用的共享服务器从请求队列以先进先出原则选取一个客户端会话进行处理
 处理完毕,共享服务器进程把相应信息存储到对应调度器进程的响应队列中,最后由调度器进程去告知客户端会话已经处理完毕,最后这个共享服务器进程
 就可以释放出来,用于处理其它的事情了
4,可以配置1或多个调度器进程,这个具体要视SGA中请求队列的长短了,由参数dispatchers以及max_diaptchers控制
5,可以配置1或多个共享服务器进程,其取值范围在shared_servers及max_shared_servers之间
  且后者可以小于前者,此时可以创建的共享服务器进程由前者参数控制,且会一直不变



测试



1,我们先要了解共享服务器一些知识

先看一张共享服务器框架图



  共享服务器模式,它不用为每个客户端会话连接分配内存,而是通过一个叫调度器进程把来自多个客户端的会话引导到共享服务器进程的池中。
然后由这个共享服务器进程的池中,要选择一个空闲的共享服务器进程,去响应处理这个来自客户端的连接,所以说共享服务器模式可以节省大量
的内存成本开销(和专有服务器模式相比);这样的话,消耗的内存更少,可以支持更多的用户会话进程建立。


  要让共享服务器模式运行起来,必须如下3种不同的进程相同协调:
     A,监听器进程,由此把客户端会话转发到调度器进程
     B,一或多个调度器进程
     C,一或多个共享服务器进程




    客户端会话想连接数据库时,它会产生个调用,然后由调度器进程把这个连接请求先放在一个请求队列 ,然后由可用的共享服务器进程从请求队列中选择
 一个客户端会话请求进行处理
 
    这个请求队列存放在哪儿呢,它是存放在SGA,它可以由所有的调度器进程访问,然后由共享服务器进程去看或挑选有无新的来自客户端会话的请求,
 这个处理原则采用队列方式,即先进先出原则。


    只要共享服务器进程处理完了这个客户端的连接请求,它会把这个处理完成的信息存放到调度器进程的响应队列中(注意:是与客户端会话请求对应的调度器,因为可能会配置多个不同的调度器进程),
 这个调度器进程的响应队列也是存储在SGA中,且不同的调度器进程都有自己独立的响应队列,然后这个共享服务器进程就可以释放出来,就可以服务其它的客户端请求了。
 




 2,调度器进程
    这个进程允许很多的客户端会话进程共享有限的服务器进程,通过这个进程,多个用户进程只需要更少的共享服务器进程即可,因此这样就可以支持更多的用户连接或会话,特别适用于客户端以及服务器
 在不同的机器上。
    至少要配置一个调度器进程,到底最优应配置多少个调度器进程,这个取决于操作系统本身的限制以及每个进程可以支持多少个连接;而且在数据库启动期间可以动态调整调度器进程的个数。


    注意:如果在共享服务器模式下,如果监听把一个客户端连接不能引导到某个调度器进程(或者说调度器进程不能响应客户端连接,则监听会新开启一个专有服务器进程,然后把这个客户端连接引导到
    这个新建的专有服务器进程)


3,共享服务器进程(SNNN)
    每个共享服务器进程可以同时服务多个客户端连接,它和专有服务器进程功能是一样,唯一不同的是,它不会只服务于一个特定的客户端连接。所以在这种情况下,因为共享服务器不可能只服务于某一个特定的
 客户端连接,所以它会把与所有客户端会话相关的数据或信息存放在SGA中。而且要让所有的共享服务器进程可以访问存储在SGA的所有客户端会话相关的数据或信息;
 当然,你可以通过参数private_sga为每个客户端会话在SGA中分配特定的大小
    ORACLE它会根据SGA中请求队列的长度动态调整共享服务器进程的个数,另外:共享服务器到底要创建多少个,它的取值范围在shared_servers和max_shared_servers之间




4,共享服务器模式下操作还有一些限制
     一些特定的管理维护任务,比如:关闭重启数据库,数据库介质恢复,不能进行;如果你一定要通过共享服务器模式去执行这些管理维护任务,一定要在TNS连接字符串中指定(server=dedicated)       




5,查看当前数据库关于共享服务器模式的参数


SQL> show parameter shared


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
max_shared_servers                   integer
shared_memory_address                integer     0
shared_server_sessions               integer
shared_servers                       integer     1




SQL> show parameter  dispa


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dispatchers                          string      (PROTOCOL=TCP) (SERVICE=ora10g
                                                 XDB)
max_dispatchers                      integer


6,可见默认数据库有1个调度器进程及共享服务器进程
[ora10g@seconary ~]$ ps -ef|grep ora_|grep -i --color _d0
ora10g    3362     1  0 11:21 ?        00:00:00 ora_d000_ora10g
[ora10g@seconary ~]$ 


[ora10g@seconary ~]$ ps -ef|grep ora_|grep -i --color _s0
ora10g    3364     1  0 11:21 ?        00:00:00 ora_s000_ora10g
[ora10g@seconary ~]$ 


7,调整最大调度器进程个数为2
SQL> alter system set max_dispatchers=2;


System altered.


SQL> show parameter  dispa


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dispatchers                          string      (PROTOCOL=TCP) (SERVICE=ora10g
                                                 XDB)
max_dispatchers                      integer     2


8,调整共享服务器进程个数为3,且没有配置最大可以创建的共享服务器个数
SQL> alter system set shared_servers=3;


System altered.


SQL> show parameter shared_servers


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                   integer
shared_servers                       integer     3


9,可见马上共享服务器进程就变成了3个,所以当前可以创建的共享服务器进程是由shared_servers控制的
[ora10g@seconary ~]$ ps -ef|grep ora_|grep -i --color _s0
ora10g    3364     1  0 11:21 ?        00:00:00 ora_s000_ora10g
ora10g    4557     1  0 12:16 ?        00:00:00 ora_s001_ora10g
ora10g    4559     1  0 12:16 ?        00:00:00 ora_s002_ora10g




10,指定max_shared_servers为3,尝试创建超过这个数量的共享服务器,可见shared_servers指定的值可以大于max_shared_servers
SQL> alter system set max_shared_servers=3;


System altered.


SQL> show parameter shared_servers


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                   integer     3
shared_servers                       integer     3
SQL> 


SQL> alter system set shared_servers=4;


System altered.


SQL> show parameter shared_servers


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                   integer     3
shared_servers                       integer     4


[ora10g@seconary ~]$ ps -ef|grep ora_|grep -i --color _s0
ora10g    3364     1  0 11:21 ?        00:00:00 ora_s000_ora10g
ora10g    4557     1  0 12:16 ?        00:00:00 ora_s001_ora10g
ora10g    4559     1  0 12:16 ?        00:00:00 ora_s002_ora10g
ora10g    4633     1  0 12:19 ?        00:00:00 ora_s003_ora10g
[ora10g@seconary ~]$ 


SQL> alter system set shared_servers=8;


System altered.


SQL> show parameter shared_servers


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                   integer     3
shared_servers        


[ora10g@seconary ~]$ ps -ef|grep ora_|grep -i --color _s0
ora10g    3364     1  0 11:21 ?        00:00:00 ora_s000_ora10g
ora10g    4557     1  0 12:16 ?        00:00:00 ora_s001_ora10g
ora10g    4559     1  0 12:16 ?        00:00:00 ora_s002_ora10g
ora10g    4633     1  0 12:19 ?        00:00:00 ora_s003_ora10g
ora10g    4654     1  0 12:20 ?        00:00:00 ora_s004_ora10g
ora10g    4656     1  0 12:20 ?        00:00:00 ora_s005_ora10g
ora10g    4658     1  0 12:20 ?        00:00:00 ora_s006_ora10g
ora10g    4660     1  0 12:20 ?        00:00:00 ora_s007_ora10g
[ora10g@seconary ~]$ 




10,所以我们就要看看参数max_shared_servers以及shared_servers的含义,二者到底是什么关系呢?


  max_shared_servers没有默认值,如果指定此参数的值,它应该大于等于shared_servers以及小于processes
如果你想减少开启的共享服务器进程个数时,先要减少max_shared_servers,然后再减少shared_servers
  
  记住,如果max_shared_servers小于shared_servers,共享服务器进程的个数不会变化,而是一直保持由shared_servers指定的个数
  
  还有一种情况,如果没有配置max_shared_servers,只要有大于1/8 processes对应的空闲的物理内存,或者processes小于24,就可以一直产生新的共享服务器进程


个人简介


8年oracle从业经验,具备丰富的oracle技能,目前在国内北京某专业oracle服务公司从事高级技术顾问。
服务过的客户:
中国电信
中国移动
中国联通
中国电通
国家电网
四川达州商业银行
湖南老百姓大药房
山西省公安厅
中国邮政
北京302医院     
河北廊坊新奥集团公司

 项目经验:
中国电信3G项目AAA系统数据库部署及优化
      中国联通4G数据库性能分析与优化
中国联通CRM数据库性能优化
中国移动10086电商平台数据库部署及优化
湖南老百姓大药房ERR数据库sql优化项目
四川达州商业银行TCBS核心业务系统数据库模型设计和RAC部署及优化
四川达州商业银行TCBS核心业务系统后端批处理存储过程功能模块编写及优化
北京高铁信号监控系统RAC数据库部署及优化
河南宇通客车数据库性能优化
中国电信电商平台核心采购模块表模型设计及优化
中国邮政储蓄系统数据库性能优化及sql优化
北京302医院数据库迁移实施
河北廊坊新奥data guard部署及优化
山西公安厅身份证审计数据库系统故障评估
国家电网上海灾备项目4 node rac+adg 
       贵州移动crm及客服数据库性能优化项目
       贵州移动crm及客服务数据库sql审核项目
       深圳穆迪软件有限公司数据库性能优化项目

联系方式:
手机:18201115468
qq   :   305076427
qq微博: wisdomone1
新浪微博:wisdomone9
qq群:275813900    
itpub博客名称:wisdomone1    http://blog.itpub.net/9240380/


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-1806734/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb qq: 305076427 微博: wisdomone9

注册时间:2008-04-04

  • 博文量
    2149
  • 访问量
    11891776