ORACLE PGA(程序全局區)

SGA(System Global Area),即系統全局區,管理數據庫buffer cache,java,stream的內存區html

PGA (Process Global Area),即程序全局區,主要用於管理進程的內存區java

UGA(User Global Area),即用戶全局區,處理用戶會話相關信息的內存區sql

CGA(Call Global Area),即調用全局區,處理如排序、HASH JOIN、位圖合併等工做的內存區數據庫

 

若是採用專用服務模式(Dedicated Server Connection)那麼UGA在PGA中分配,若是採用共享服務模式(Shared Server Connection),那麼UGA在SGA區的Large pool中分配。bash

 

UGA組成:session

UGA=User Session+Cursor state+Sort Area Retained數據結構

 

User Session:用戶會話,存放用戶權限、角色、性能統計等信息。ide

Cursor state(私有SQL區):即一個句柄,或稱爲指針、引用指向Sql私有區。而後私有Sql區又指向共享Sql區。私有Sql區分兩個部分:性能

固定部分:綁定信息,數據結構信息,指針。隨session的建立而建立,結束而釋放。指針

動態部分:執行sql的中間結果集,如多表關聯、排序。隨sql建立而建立,結束而釋放。

 

專用模式下的PGA組成:

PGA=UGA+CGA

 

PGA的管理模式:

  • 手動管理模式,用戶指定排序區和散列區所使用的內存,每一個鏈接使用相同的內存。

  • 自動管理模式,設定PGA的總量,由Oracle根據系統負載自行決定分配。

 

PGA內存管理模式由WORKAREA_SIZE_POLICY控制

設爲MANUAL,啓動手動內存管理。

設爲AUTO,而且PGA_AGGREGATE_TARGET不爲0時,啓動自動內存管理。

 

手動PGA內存管理受三個參數的影響最大

SORT_AREA_SIZE 排序區,用於排序時存放排序數據的內存區,屬於PGA

SORT_AREA_RETAINTED_SIZE 排序完成後用於保存排序數據的內存,屬於UGA

HASH_AREA_SIZE 儲存散列表的內存

 

這三個參數設置的狀況以下:

SORT_AREA_SIZE=SORT_AREA_RETAINTED_SIZE

則排序在內存中進行,且排序結果均保存在內存中。

SORT_AREA_SIZE>SORT_AREA_RETAINTED_SIZE

則在SORT_AREA_SIZE規定的大小中排序,並保留SORT_AREA_RETAINTED_SIZE規定大小的排序數據,超出部分排序數據寫到臨時表中,排序完成後,把排序數據存放在SORT_AREA_RETAINTED_SIZE,最終反饋給終端。若是SORT_AREA_RETAINTED_SIZE設置爲0,則與第一種狀況相同。

 

當一個多個結果集關聯時,會用到HASH_AREA_SIZE,兩個集合中較小的一個會散列到內存中做爲驅動表,散列區放不下的部分都會經過聯結鍵存儲在臨時表空間中。HASH_AREA_SIZE太小會影響集合關聯時的性能。

 

備註:

       1)如須要排序的數據量大於SORT_AREA_SIZE,Oracle進行分批排序,將排序的結果存到臨時表空間中,而後對剩餘部分進行排序。最後還須要對保存在臨時表中的已排序數據進行再排序,由於每次保存到臨時表空間中的已排序數據只是部分數據的排序,對於總體來講只是局部排序。

        2)參數的限制僅是對某個操做的限制,一個查詢能夠有多個操做,例如一個查詢有10個排序,若是SORT_AREA_SIZE限制爲5M,則10個排序佔用50M排序內存。

 

設置PGA自動管理

SQL> alter system set WORKAREA_SIZE_POLICY=auto;
SQL> alter system set PGA_AGGREGATE_TARGET=<size>;

 

查看PGA建議視圖

SELECT trunc(pga_target_for_estimate / 1024 / 1024) pga_target_for_estimate,
       to_char(pga_target_factor * 100, '999.9') || '%' pga_target_factor,
       trunc(bytes_processed / 1024 / 1024) bytes_processed,
       trunc(estd_extra_bytes_rw / 1024 / 1024) estd_extra_bytes_rw,
       to_char(estd_pga_cache_hit_percentage, '999') || '%' estd_pga_cache_hit_percentage,
       estd_overalloc_count
  FROM v$pga_target_advice;

 

 

參考 http://www.2cto.com/database/201309/242229.html

相關文章
相關標籤/搜索