關於SGA設置的一點總結
本總結不針對特例僅對服務器只存在OS + ORACLE 為例如果存在其他應用請酌情考慮
寫這個也是因為近來這種重復性的問題發生的太多所導致的
首先不要迷信STSSGOCPEXPERT 等給出的任何建議內存百分比的說法
基本掌握的原則是 data buffer 通常可以盡可能的大shared_pool_size 要適度log_buffer 通常大到幾百K到M就差不多了
設置之前首先要明確個問題
除去OS和一些其他開銷能給ORACLE使用的內存有多大
oracle是bit or bitbit 通常 SGA有 G 的限制(某些OS的處理或者WINDOWS上有特定設定可以支持到G以上甚至達到G本人無這方面經驗)
下面是我的windows下的oracle :
SQL> select * from v$version;
BANNER
Oraclei Enterprise Edition Release Production
PL/SQL Release Production
CORE Production
TNS for bit Windows: Version Production
NLSRTL Version Production
SQL>
windows上存在bit的限制如AIXHP UNIX 等有明確的BIT OS and ORACLE的版本bit oracle可以裝在bit os 上 bit oracle不能裝在 bit OS上
不管oracle是 bit ORACLE還是 bit 的假定應用存在沒有很好的使用bind var 的情況也不能設置 shared_pool_size 過大通常應該控制在MM如果是 ORACLE ERP 一類的使用了很多存儲過程函數包 或者很大的系統可以考慮增大shared_pool_size 但是如果超過M可能是危險的達到G可能會造成CPU的嚴重負擔系統甚至癱瘓所以shared_pool_size 如果超過M還命中率不高那麼應該從應用上找原因而不是一味的增加內存shared_pool_size 過大主要增加了管理負擔和latch 的開銷
log_buffer : K M 之間通常問題不大不應該太大
large_pool_size :如果不設置MTS通常在 RMAN OPQ 會使用到但是在M M 應該差不多了假如設置 MTS則由於 UGA 放到large_pool_size 的緣故這個時候依據 session最大數量和 sort_ares_size 等參數設置必須增大large_pool_size 的設置可以考慮為 session * (sort_area_size + M)這裡要提醒一點不是必須使用MTS我們都不主張使用MTS尤其同時在線用戶數小於的情況下
java_pool_size : 若不使用java給M通常就夠了
data buffer 在做了前面的設置後凡可以提供給oracle的內存都應該給data buffer = (db_block_size * db_block_buffers)
在i 中可以是 db_cache_size
還有個重要參數我們需要注意
sort_area_size and hash_area_size
這兩個參數在非MTS下都是屬於PGA 不屬於SGA是為每個session單獨分配的在我們的服務器上除了OS + SGA一定要考慮這兩部分
(****) : OS 使用內存+ SGA + session*(sort_area_size + hash_area_size + M) < 總物理RAM 為好
這樣歸結過來假定oracle是 bit 服務器RAM大於G 注意你的PGA的情況則建議
shared_pool_size + data buffer +large_pool_size + java_pool_size < G
再具體化注意滿足上面(****) 的原則的基礎上可以參考如下設置
如果M RAM
建議 shared_pool_size = M data buffer = M
如果G RAM
shared_pool_size = M data buffer = M
如果G
shared_pool_size = M data buffer = G
物理內存再大已經跟參數沒有關系了
假定 bit ORACLE
內存G
shared_pool_size = M data buffer = G
內存G
shared_pool_size = M data buffer = G
內存 G
shared_pool_size = MM data buffer = G
以上僅為參考值不同系統可能差異比較大需要根據具體情況調整建議在設置參數的同時init中使用 lock_sga 在不同的平台上可能有不同的方式使得SGA鎖定在物理內存中而不被放入 SWAP 中這樣對效率有好處
關於內存的設置要再進行細致的調整起的作用不大但可根據statspack信息和v$system_eventv$sysstatv$sesstatv$latch 等view信息來考慮微調
From:http://tw.wingwit.com/Article/program/Oracle/201311/16840.html