在Oraclei之前PGA的計算和控制都是比較復雜的事情從Oraclei開始Oracle提供了一種SQL內存管理的新方法自動化SQL執行內存管理(Automated SQL Execution Memory Management)使用這個新特性Oracle可以自動調整S Q L內存區而不用關閉數據庫這一改進大大簡化了DBA的工作同時也提高了Oracle數據庫的性能
為實現自動的PGA管理Oracle引入了幾個新的初始化參數
PGA_AGGREGATE_TARGET此參數用來指定所有session總計可以使用最大PGA內存這個參數可以被動態的更改取值范圍從M —— (G )bytes WORKAREA_SIZE_POLICY此參數用於開關PGA內存自動管理功能該參數有兩個選項AUTO 和 MANUAL當設置為AUTO時數據庫使用Oraclei提供的自動PGA管理功能當設置為MANUAL時則仍然使用Oraclei前手工管理的方式
缺省的Oraclei中WORKAREA_SIZE_POLICY被設置為AUTO
需要注意的是在Oraclei中PGA_AGGREGATE_TARGET參數僅對專用服務器模式下(Dedicated Server)的專屬連接有效但是對共享服務器(Shared Server)連接無效從Oracleg開始PGA_AGGREGATE_TARGET對專用服務器連接和共享服務器連接同時生效
PGA_AGGREGATE_TARGET 參數同時限制全局PGA分配和私有工作區內存分配
對於串行操作單個SQL操作能夠使用的PGA內存按照以下原則分配MIN(% PGA_AGGREGATE_TARGETMB)
對於並行操作% 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參數評估在SortHASHJOIN或Bitmap操作時能夠使用的最大或最小內存從而選擇最優的執行計劃
對於PGA_AGGREGATE_TARGET參數的設置Oracle提供這樣一個建議方案對於OLTP系統PGA_AGGREGATE_TARGET = (<Total Physical Memory > * %) * % 對於DSS系統PGA_AGGREGATE_TARGET = (<Total Physical Memory > * %) * %
也就是說對於一個單純的數據庫服務器通常我們需要保留%的物理內存給操作系統使用剩余%可以分配給Oracle使用Oracle使用的內存分為兩部分SGA和PGA那麼PGA可以占用Oracle消耗總內存的%(OLTP系統)至%(DSS系統)
這只是一個建議設置更進一步的我們應該根據數據庫的具體性能指標來調整和優化PGA的使用
From:http://tw.wingwit.com/Article/program/Oracle/201311/17149.html