Oracle9i自動PGA管理(zt)

tolywang發表於2007-07-16
在Oracle9i之前,PGA的計算和控制都是比較複雜的事情,從Oracle9i開始,Oracle提供了一種SQL記憶體管理的新方法:自動化SQL執行記憶體管理(Automated SQL Execution Memory Management),使用這個新特性,Oracle可以自動調整S Q L記憶體區,而不用關閉資料庫,這一改進大大簡化了DBA的工作,同時也提高了Oracle資料庫的效能。

為實現自動的PGA管理,Oracle引入了幾個新的初始化引數:

1.PGA_AGGREGATE_TARGET-此引數用來指定所有session總計可以使用最大PGA記憶體。這個引數可以被動態的更改,取值範圍從10M -- (4096G-1 )bytes。
2.WORKAREA_SIZE_POLICY-此引數用於開關PGA記憶體自動管理功能,該引數有兩個選項:AUTO 和 MANUAL,當設定為AUTO時,資料庫使用Oracle9i提供的自動PGA管理功能,當設定為MANUAL時,則仍然使用Oracle9i前手工管理的方式。
預設的,Oracle9i中WORKAREA_SIZE_POLICY被設定為AUTO。

需要注意的是,在Oracle9i中,PGA_AGGREGATE_TARGET引數僅對專用伺服器模式下(Dedicated Server)的專屬連線有效,但是對共享伺服器(Shared Server)連線無效;從Oracle10g開始PGA_AGGREGATE_TARGET對專用伺服器連線和共享伺服器連線同時生效。

PGA_AGGREGATE_TARGET 引數同時限制全域性PGA分配和私有工作區記憶體分配:

1.對於序列操作,單個SQL操作能夠使用的PGA記憶體按照以下原則分配:
MIN(5% PGA_AGGREGATE_TARGET,100MB)
2.對於並行操作
30% PGA_AGGREGATE_TARGET /DOP (DOP=Degree Of Parallelism 並行度)

要理解PGA的自動調整,還需要區分可調整記憶體(TUNABLE MEMORY SIZE)與不可調整記憶體(UNTUNABLE MEMORY SIZE)。可調整記憶體是由SQL工作區使用的,其餘部分是不可調整記憶體。

啟用了自動PGA調整之後, Oracle仍然需要遵循以下原則:

UNTUNABLE MEMORY SIZE + TUNABLE MEMORY SIZE <= PGA_AGGREGATE_TARGET

資料庫系統只能控制可調整部分的記憶體分配,如果可調整的部分過小,則Oracle永遠也不會強制啟用這個等式。

另外,PGA_AGGREGATE_TARGET引數在CBO最佳化器模式下,對於SQL的執行計劃會產生影響。Oracle在評估執行計劃時會根據PGA_AGGREGATE_TARGET引數評估在Sort,HASH-JOIN或Bitmap操作時能夠使用的最大或最小記憶體,從而選擇最優的執行計劃。

對於PGA_AGGREGATE_TARGET引數的設定,Oracle提供這樣一個建議方案
1.對於OLTP系統
PGA_AGGREGATE_TARGET = ( * 80%) * 20%
2.對於DSS系統
PGA_AGGREGATE_TARGET = ( * 80%) * 50%

也就是說,對於一個單純的資料庫伺服器,通常我們需要保留20%的實體記憶體給作業系統使用,剩餘80%可以分配給Oracle使用。Oracle使用的記憶體分為兩部分SGA和PGA,那麼PGA可以佔用Oracle消耗總記憶體的20%(OLTP系統)至50%(DSS系統)。
這只是一個建議設定,更進一步的我們應該根據資料庫的具體效能指標來調整和最佳化PGA的使用。

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

相關文章