程序員備忘

          java技術(shù)
          posts - 8, comments - 0, trackbacks - 0, articles - 0

          說明:
          本總結(jié)不針對特例,僅對服務(wù)器只存在OS + ORACLE 為例,如果存在其他應(yīng)用請酌情考慮。寫這個也是因為近來這種重復(fù)性的問題發(fā)生的太多所導(dǎo)致的。

          首先不要迷信STS、OCP SG以及某些專家給出的任何建議、內(nèi)存百分比的說法?;菊莆盏脑瓌t是:

          l          data buffer 通??梢员M可能的大

          l          shared_pool_size 要適度

          l          log_buffer 通常大到幾百K 1M就差不多了

          設(shè)置之前,首先要明確2個問題
          1
          :除去OS和一些其他開銷,能給ORACLE使用的內(nèi)存有多大?
          2
          Oracle64 bit 還是 32 bit ?32bit 通常 SGA 1.7G 的限制(某些OS有特定處理或者WINDOWS上有特定設(shè)定可以支持到2G以上甚至達到3.7G,本人無這方面經(jīng)驗)。

          下面是我的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-UX 等有明確的64 bit OS ORACLE的版本,32 bit Oracle可以裝在64 bit OS 上,64 bit Oracle不能裝在32 bit OS上。

          不管Oracle32 bit 還是 64 bit 的,假定應(yīng)用存在沒有很好的使用bind var 的情況,也不能設(shè)置 shared_pool_size 過大,通常應(yīng)該控制在100M--200M,除非是 ORACLE ERP 一類的使用了很多存儲過程函數(shù)、包 ,這樣的很大的系統(tǒng),可以考慮增大shared_pool_size,但是如果超過500M可能是危險的,達到1G幾乎就會造成CPU的嚴重負擔,系統(tǒng)甚至癱瘓。所以shared_pool_size 如果超過200M還命中率不高,那么應(yīng)該從應(yīng)用上找原因而不是一味的增加內(nèi)存,shared_pool_size 過大主要增加了管理負擔和latch 的開銷。

          log_buffer
          128K -- 1M 之間通常問題不大,不應(yīng)該太大。

          large_pool_size
          :如果不設(shè)置MTS,通常在 RMAN OPQ 會使用到,但是在10M --50M 應(yīng)該差不多了。假如設(shè)置 MTS,則由于 UGA 放到large_pool_size 的緣故,這個時候依據(jù) session最大數(shù)量和 sort_ares_size 等參數(shù)設(shè)置,必須增大large_pool_size 的設(shè)置,可以考慮為 session * (sort_area_size + 2M)。這里要提醒一點,不是必須使用MTS,我們都不主張使用MTS,尤其同時在線用戶數(shù)小于500的情況下。

          java_pool_size :
          若不使用java,給30M通常就夠了。

          data buffer
          :在做了前面的設(shè)置后,凡可以提供給Oracle的內(nèi)存,都應(yīng)該給data buffer = (db_block_size * db_block_buffers) 9i 中可以是 db_cache_size。

          還有2個重要參數(shù)我們需要注意:

          sort_area_size
          hash_area_size
          這兩個參數(shù)在非MTS下都是屬于PGA ,不屬于SGA。它是為每個session單獨分配的,在我們的服務(wù)器上除了OS + SGA,一定要考慮這兩部分。

          (****) : OS
          使用內(nèi)存+ SGA + session*(sort_area_size + hash_area_size + 2M) < 總物理RAM 為好

          這樣歸結(jié)過來,假定Oracle 32 bit ,服務(wù)器RAM大于2G ,注意你的PGA的情況,則建議:

          shared_pool_size + data buffer +large_pool_size + java_pool_size < 1.6G

          再具體化,注意滿足上面(****) 的原則的基礎(chǔ)上可以參考如下設(shè)置:
          如果512M RAM
          建議 shared_pool_size = 50M, data buffer = 200M ;

          如果1G RAM
          shared_pool_size = 100M , data buffer = 500M
          ;

          如果2G RAM
          shared_pool_size = 150M ,data buffer = 1.2G
          。

          物理內(nèi)存再大已經(jīng)跟參數(shù)沒有關(guān)系了 。

          舉例來說:
          假定64 bit ORACLE

          內(nèi)存4G
          shared_pool_size = 200M , data buffer = 2.5G

          內(nèi)存8G
          shared_pool_size = 200M , data buffer = 5G

          內(nèi)存 12G
          shared_pool_size = 300M , data buffer = 8G

          總結(jié)

          以上僅為參考值,建議在設(shè)置參數(shù)的同時,init中使用 lock_sga ,在不同的平臺上可能有不同的方式,使得SGA鎖定在物理內(nèi)存中而不被放入 SWAP 中,這樣對效率有好處。(關(guān)于內(nèi)存的設(shè)置,要再進行細致的調(diào)整,起的作用不大,但可根據(jù)statspack信息和v$system_event,v$sysstat,v$sesstat,v$latch 等視圖信息來考慮微調(diào)。)

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宜兴市| 中西区| 昌黎县| 平和县| 双鸭山市| 山丹县| 兖州市| 林周县| 古交市| 清镇市| 子洲县| 宜兰县| 磐石市| 华安县| 自贡市| 延川县| 绥阳县| 东平县| 大庆市| 石河子市| 乌兰县| 衡南县| 吉安市| 新河县| 蓬溪县| 峡江县| 吉木萨尔县| 翁牛特旗| 沙田区| 尤溪县| 乳源| 平远县| 闻喜县| 清丰县| 蓝田县| 普洱| 平顺县| 瑞金市| 封开县| 鲁甸县| 金阳县|