java思維

          正在學(xué)習(xí)中:(

          Oracle 內(nèi)存分配建議


           Oracle 內(nèi)存分配建議
          關(guān)于SGA設(shè)置的一點(diǎn)總結(jié)
          本總結(jié)不針對(duì)特例,僅對(duì)服務(wù)器只存在OS + ORACLE 為例,如果存在其他應(yīng)用請(qǐng)酌情考慮
          寫這個(gè)也是因?yàn)榻鼇?lái)這種重復(fù)性的問題發(fā)生的太多所導(dǎo)致的

          首先不要迷信STS,SG,OCP,EXPERT 等給出的任何建議、內(nèi)存百分比的說(shuō)法
          基本掌握的原則是, data buffer 通常可以盡可能的大,shared_pool_size 要適度,log_buffer 通常大到幾百K到1M就差不多了

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

          下面是我的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 的,假定應(yīng)用存在沒有很好的使用bind var 的情況,也不能設(shè)置 shared_pool_size 過(guò)大,通常應(yīng)該控制在200M--300M,如果是 ORACLE ERP 一類的使用了很多存儲(chǔ)過(guò)程函數(shù)、包 ,或者很大的系統(tǒng),可以考慮增大shared_pool_size ,但是如果超過(guò)500M可能是危險(xiǎn)的,達(dá)到1G可能會(huì)造成CPU的嚴(yán)重負(fù)擔(dān),系統(tǒng)甚至癱瘓。所以shared_pool_size 如果超過(guò)300M還命中率不高,那么應(yīng)該從應(yīng)用上找原因而不是一味的增加內(nèi)存,shared_pool_size 過(guò)大主要增加了管理負(fù)擔(dān)和latch 的開銷。

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

          large_pool_size :如果不設(shè)置MTS,通常在 RMAN 、OPQ 會(huì)使用到,但是在10M --- 50M 應(yīng)該差不多了。假如設(shè)置 MTS,則由于 UGA 放到large_pool_size 的緣故,這個(gè)時(shí)候依據(jù) session最大數(shù)量和 sort_ares_size 等參數(shù)設(shè)置,必須增大large_pool_size 的設(shè)置,可以考慮為 session * (sort_area_size + 2M)。這里要提醒一點(diǎn),不是必須使用MTS,我們都不主張使用MTS,尤其同時(shí)在線用戶數(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個(gè)重要參數(shù)我們需要注意

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

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


          這樣歸結(jié)過(guò)來(lái),假定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
          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 = 300M , data buffer = 5G

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



          以上僅為參考值,不同系統(tǒng)可能差異比較大,需要根據(jù)具體情況調(diào)整。建議在設(shè)置參數(shù)的同時(shí),init中使用 lock_sga ,在不同的平臺(tái)上可能有不同的方式,使得SGA鎖定在物理內(nèi)存中而不被放入 SWAP 中,這樣對(duì)效率有好處


          關(guān)于內(nèi)存的設(shè)置,要再進(jìn)行細(xì)致的調(diào)整,起的作用不大,但可根據(jù)statspack信息和v$system_event,v$sysstat,v$sesstat,v$latch 等view信息來(lái)考慮微調(diào)

          posted on 2008-01-28 23:58 john 閱讀(799) 評(píng)論(0)  編輯  收藏 所屬分類: Oracle Technology

          主站蜘蛛池模板: 仁寿县| 杂多县| 甘孜| 庄浪县| 自治县| 道真| 吉隆县| 渭南市| 梁平县| 枝江市| 福州市| 岢岚县| 江川县| 吉水县| 阜平县| 雷波县| 曲阳县| 汝城县| 尉犁县| 泗洪县| 景洪市| 山东| 通江县| 桑日县| 保定市| 青州市| 华容县| 九龙坡区| 延庆县| 杭州市| 会昌县| 虞城县| 闽清县| 桦甸市| 满城县| 昭觉县| 宜春市| 繁峙县| 阿合奇县| 大足县| 晋江市|