簡述PGA相關概念及參數

1.概念簡介
1)PGA: 程序全局區(Program Global Area),服務器進程的私有內存區域,涉及服務器進程相關私有內存的所有區域和信息。
2)UGA: 用戶全局區(User Global Area),會話相關的內存區域。shared server模式中,UGA從SGA的large pool(如果設置)或者shared pool(沒有設置large pool)中分配;dedicated server模式中,UGA從PGA中分配。
3)CGA: 調用全局區(Call Global Area),存放調用過程中的數據。調用過程中的數據,象:SQL Area、Sort Area等位於UGA中;CGA存放的只是調用過程中的臨時數據。CGA存在於PGA中,調用開始時創建,調用執行中分配,調用結束後釋放。

2.參數及設置詳述
1)workarea_size_policy
--語法:
  {alter system|session} set workarea_size_policy={auto|manual};

--說明:
  該參數設爲AUTO時,使用內存較多的SQL操作,例如sort, group by, hash join, bitmap merge和bitmap create等,由Oracle自動分配內存;設爲MANUAL時,前述操作將使用相應*_AREA_SIZE參數設置的內存值。
*_AREA_SIZE針對所有Session,設置過小,有些Session可能得不到足夠的內存,設置過大,有些Session可能會浪費內存空間。9i開始,PGA自動管理使得該現象得以改善。使用PGA_AGGREGATE_TARGET設置整個PGA大小,Oracle爲每個Session按需分配PGA,且儘量使PGA總量低於PGA_AGGREGATE_TARGET值。

2)pga_aggregate_target
--語法:
  alter system set pga_aggregate_target=integer[k|m|g];
--說明:
  設置PGA總內存大小。Oracle將盡力使PGA總內存不超過該值,但這不是硬限制,指示一個目標值,既有時可能會超過這個值。
將該參數設置爲大於0,Oracle將自動設置WORKAREA_SIZE_POLICY爲AUTO;將該參數設置爲0,Oracle將自動設置WORKAREA_SIZE_POLICY爲MANUAL。設置PGA_AGGREGATE_TARGET後,Oracle將忽略所有*_AREA_SIZE參數設置。

3)hash_area_size
  {alter system|session} set hash_area_size=integer [deferred];
--說明:
  該參數單位爲字節。

4)sort_area_size
--語法:
  {alter system|session} set sort_area_size=integer [deferred];
--說明:
  該參數單位爲字節。如果沒有設置sort_area_retained_size,爲排序操作分配的內存,排序結束且返回記錄前釋放,如果設置了前述參數,爲排序操作分配的內存在所有結果返回後釋放。此外,對位圖索引的插入、更新操作也會用到SORT_AREA_SIZE。

5)sort_area_retained_size
--語法:
  {alter system|session} set sort_area_retained_size=integer [deferred];
--說明:
  該參數單位爲字節。該參數表示UGA中爲排序操作保留的內存大小,排序操作結束,返回結果後將內存釋放給UGA,而非操作系統。

6)_pga_max_size
--語法:
  {alter system|session} set pga_max_size=integer[k|m|g];
--說明:
  該參數爲系統隱含參數,用於設置每個進程的最大PGA內存大小,其默認值爲200M。該參數值可以通過如下SQL查看:
  select ksppinm "Name", ksppstvl/1024/1024 ||'M' "Value", ksppdesc "Desc" 
    from x$ksppi x, x$ksppcv y 
   where x.indx = y.indx and ksppinm ='_pga_max_size';

7)_smm_max_size
--語法:
  {alter system|session} set pga_max_size=integer;
--說明:
  該參數爲隱含參數,用於設置每個進程自動模式下最大工作區大小(串行)。如果沒有手動設置修改過_smm_max_size默認值,但設置了_pga_max_size或pga_aggregate_target,那麼,Oracle會自動計算出_smm_max_size值。如果手動設置了_smm_max_size,則該參數值就是設置的數值,單位爲kb。查看該參數值的具體SQL如下:
  select ksppinm "Name", ksppstvl/1024 ||'M' "Value", ksppdesc "Desc" 
    from x$ksppi x, x$ksppcv y 
   where x.indx = y.indx and ksppinm ='_smm_max_size';
  使用pga_aggregate_target實現自動分配pga時,這兩個參數控制了單個進程的最大內存使用量,這兩個參數爲隱含參數。非並行查詢時,單個會話的工作區最大內存使用量爲min( 5%*PGA_AGGREGATE_TARGET , 50%*_pga_max_size , _smm_max_size)。
  設置兩個參數的命令舉例如下:
  alter system set "_pga_max_size"=1024M|1G;
  alter system set "_smm_max_size"=307200,單位只能是k,數字值後不能用K、M、G等單位。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章