Oracle的記憶體分配和使用

edwardking888發表於2010-04-13
 Oracle資料庫在系統佔用的記憶體分為兩個部分:SGA和PGA。如何設定和規劃Oracle的記憶體分配一直以來是一個廣為爭論的話題。

    在Oracle9i之前,PGA的記憶體使用估算一直比較複雜;從Oracle 9i開始,Oracle的自動PGA管理新特性使得Oracle的記憶體規劃得以簡化。

    根據Oracle的建議,Oracle最多可以使用80%的實體記憶體,其餘20%保留給作業系統使用,在這80%的記憶體中,對於OLTP系統,Oracle建議分配20%給PGA使用;對於DSS系統,可以分配50%給PGA使用,再引述一下前文的等式:
·對於OLTP系統,PGA_AGGREGATE_TARGET=(*80%)*20%;
·對於DSS系統,PGA_AGGREGATE_TARGET=(*80%)*50%。

進一步歸納一下就是:
SGA+PGA *80%
也就是:
SGA_MAX_SIZE+PGA_AGGREGATE_TARGET <= *80%
現在Oracle Database 11g引入了自動記憶體管理,這個公式得以進一步簡化:
MEMORY_TARGET <= MEMORY_MAX_TARGET <= *80%

    這是一個可以參考的數值,在為Oracle規劃記憶體使用時,我們必須清楚,如果Oracle耗用的記憶體過高,甚至超過了系統的實體記憶體,那麼系統的效能就會受到嚴重的影響,當系統執行任務時,如果沒有足夠的記憶體,那麼系統就會進行分頁或交換,以完成當前活動事務。

    當系統執行分頁時,會將當前沒有使用的資訊從記憶體轉移到硬碟上,這樣就可以為當前需要記憶體的程式分配記憶體。如果頻繁發生分頁,系統效能就會嚴重降低,從而導致很多程式的執行時間變長。

    當系統執行交換時,會將某些程式所分配的不活躍記憶體頁(根據LRU演算法)從記憶體轉移到硬碟上,這樣另一個活動程式就可以得到所需要的記憶體。交換基於系統迴圈時間。如果交換太過頻繁,系統甚至會出現當機。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-659605/,如需轉載,請註明出處,否則將追究法律責任。

相關文章