关于SGA设置的一点总结

来源:互联网 发布:粒子群算法工具箱下载 编辑:程序博客网 时间:2024/04/25 18:59
   
  本总结不针对特例,仅对服务器只存在OS   +   ORACLE   为例,如果存在其他应用请酌情考虑    
  写这个也是因为近来这种重复性的问题发生的太多所导致的    
   
  首先不要迷信STS,SG,OCP,EXPERT   等给出的任何建议、内存百分比的说法    
  基本掌握的原则是,   data   buffer   通常可以尽可能的大,shared_pool_size   要适度,log_buffer   通常大到几百K到1M就差不多了    
   
  设置之前,首先要明确2个问题    
  1:   除去OS和一些其他开销,能给ORACLE使用的内存有多大    
  2:oracle是64bit   or   32   bit,32bit   通常   SGA有   1.7G   的限制(某些OS的处理或者WINDOWS上有特定设定可以支持到2G以上甚至达到3.7G,本人无这方面经验)    
   
  下面是我的windows2000下的oracle   :    
   
  SQL>   select   *   from   v$version;    
   
  BANNER    
  ----------------------------------------------------------------    
  Oracle8i   Enterprise   Edition   Release   8.1.7.0.0   -   Production    
  PL/SQL   Release   8.1.7.0.0   -   Production    
  CORE   8.1.7.0.0   Production    
  TNS   for   32-bit   Windows:   Version   8.1.7.0.0   -   Production    
  NLSRTL   Version   3.4.1.0.0   -   Production    
   
  SQL>    
   
  windows上存在32bit的限制,如AIX、HP   UNIX   等有明确的64BIT   OS   and   ORACLE的版本,32bit   oracle可以装在64bit   os   上,64   bit   oracle不能装在32   bit   OS上    
   
  不管oracle是32   bit   ORACLE还是   64   bit   的,假定应用存在没有很好的使用bind   var   的情况,也不能设置   shared_pool_size   过大,通常应该控制在100M--200M,除非是   ORACLE   ERP   一类的使用了很多存储过程函数、包   ,这样的很大的系统,可以考虑增大shared_pool_size   ,但是如果超过500M可能是危险的,达到1G几乎就会造成CPU的严重负担,系统甚至瘫痪。所以shared_pool_size   如果超过200M还命中率不高,那么应该从应用上找原因而不是一味的增加内存,shared_pool_size   过大主要增加了管理负担和latch   的开销。    
   
  log_buffer   :   128K   ----   1M   之间通常问题不大,不应该太大    
   
  large_pool_size   :如果不设置MTS,通常在   RMAN   、OPQ   会使用到,但是在10M   ---   50M   应该差不多了。假如设置   MTS,则由于   UGA   放到large_pool_size   的缘故,这个时候依据   session最大数量和   sort_ares_size   等参数设置,必须增大large_pool_size   的设置,可以考虑为   session   *   (sort_area_size   +   2M)。这里要提醒一点,不是必须使用MTS,我们都不主张使用MTS,尤其同时在线用户数小于500的情况下。    
   
  java_pool_size   :   若不使用java,给30M通常就够了    
   
  data   buffer   ,在做了前面的设置后,凡可以提供给oracle的内存,都应该给data   buffer   =   (db_block_size   *   db_block_buffers)    
  在9i   中可以是   db_cache_size    
   
  还有2个重要参数我们需要注意    
   
  sort_area_size   and   hash_area_size    
  这两个参数在非MTS下都是属于PGA   ,不属于SGA,是为每个session单独分配的,在我们的服务器上除了OS   +   SGA,一定要考虑这两部分    
   
  (****)   :   OS   使用内存+   SGA   +   session*(sort_area_size   +   hash_area_size   +   2M)   <   总物理RAM   为好    
   
   
  这样归结过来,假定oracle是   32   bit   ,服务器RAM大于2G   ,注意你的PGA的情况,,则建议    
   
  shared_pool_size   +   data   buffer   +large_pool_size   +   java_pool_size   <   1.6G    
   
   
  再具体化,注意满足上面(****)   的原则的基础上可以参考如下设置    
  如果512M   RAM    
  建议   shared_pool_size   =   50M,   data   buffer   =   200M    
   
  如果1G   RAM    
  shared_pool_size   =   100M   ,   data   buffer   =   500M    
   
  如果2G    
  shared_pool_size   =   150M   ,data   buffer   =   1.2G    
   
  物理内存再大已经跟参数没有关系了    
   
   
  假定64   bit   ORACLE    
   
  内存4G    
  shared_pool_size   =   200M   ,   data   buffer   =   2.5G    
   
  内存8G    
  shared_pool_size   =   200M   ,   data   buffer   =   5G    
   
  内存   12G    
  shared_pool_size   =   300M   ,   data   buffer   =   8G    
   
   
   
  以上仅为参考值,建议在设置参数的同时,init中使用   lock_sga   ,在不同的平台上可能有不同的方式,使得SGA锁定在物理内存中而不被放入   SWAP   中,这样对效率有好处    
   
   
  关于内存的设置,要再进行细致的调整,起的作用不大,但可根据statspack信息和v$system_event,v$sysstat,v$sesstat,v$latch   等view信息来考虑微调   
   
原创粉丝点击