PGA(Program Global Area,程序全域區)是 Oracle 伺服器進程專用的私有記憶體區域,與共享的 SGA 形成鮮明對比。每個專用伺服器進程擁有獨立的 PGA,進程建立時分配、終止時回收。
在專用伺服器連線模式下,PGA 包含 UGA(User Global Area,用戶全域區)與作業區:
PGA = UGA + 排序區 + 雜湊區 + 位圖合併區
由 DBA 明確指定各作業區大小參數,所有連線使用相同固定值:
SORT_AREA_SIZE:排序操作最大記憶體SORT_AREA_RETAINED_SIZE:排序完成後保留在記憶體的資料量HASH_AREA_SIZE:雜湊操作記憶體關鍵行為:
啟用條件:
WORKAREA_SIZE_POLICY = AUTO
PGA_AGGREGATE_TARGET > 0
核心機制:
PGA_AGGREGATE_TARGET 為「目標值」而非硬性上限,Oracle 動態調整各進程分配| 場景 | 手動管理缺點 | 自動管理優勢 |
|---|---|---|
| 連線數少、閒置記憶體多 | 固定參數限制單操作記憶體,無法利用豐富資源 | 根據實際需求動態分配,充分利用閒置記憶體 |
| 連線數多、記憶體壓力大 | 固定參數 × 連線數可能遠超物理記憶體,導致交換 | 自動縮減單進程配額,總量相對可控 |
ALTER SYSTEM SET WORKAREA_SIZE_POLICY = AUTO;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 100000000;
ALTER SYSTEM SET SORT_AREA_SIZE = 65536 SCOPE = SPFILE;
ALTER SYSTEM SET HASH_AREA_SIZE = 65536 SCOPE = SPFILE;
ALTER SESSION SET WORKAREA_SIZE_POLICY = MANUAL;
ALTER SESSION SET SORT_AREA_SIZE = 104857600; -- 100MB
ALTER SESSION SET HASH_AREA_SIZE = 104857600;
-- 環境:PGA_AGGREGATE_TARGET = 100MB,單查詢上限 5MB
CREATE TABLE sorttable AS SELECT * FROM all_objects;
INSERT INTO sorttable SELECT * FROM sorttable; -- 重複擴充資料量
SET TIMING ON;
SET AUTOTRACE TRACEONLY;
SELECT * FROM sorttable ORDER BY object_id;
-- 觀察執行時間與臨時表空間使用情況
自動 PGA 管理是現代 Oracle 環境的標準配置,能在多數場景下自動平衡記憶體使用。掌握會話級手動切換技巧,可為特定高強度維護作業爭取最大效能紅利。建議配合 V$PGASTAT、V$SQL_WORKAREA、V$SQL_WORKAREA_ACTIVE 等視圖持續監控調優。