共享池是 SGA 中負責 SQL/PLSQL 解析、編譯、執行的記憶體區域,包含三大子組件:
| 子組件 | 功能 | 關鍵內容 |
|---|---|---|
| Library Cache (庫緩衝區) | 快取 SQL/PLSQL 解析樹、執行計畫 | SQL 文本、解析碼、執行計畫 |
| Data Dictionary Cache (資料字典緩衝區) | 快取字典元資料 | 表/欄定義、權限、同義詞等 |
| User Global Area (用戶全局區) | MTS/Shared Server 會話資訊 | Session 狀態、套件變數等 |
SHARED_POOL_SIZE (Bytes)SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME LIKE '%SIZE'、SHOW PARAMETER SHARED_POOL_SIZE-- 總計成功/失敗次數
SELECT SUM(GETS) "DICTIONARY_GETS",
SUM(GETMISSES) "DICTIONARY_GETMISSES"
FROM V$ROWCACHE;
-- 詳細分類命中率
SELECT PARAMETER, GETS, GETMISSES,
GETMISSES/(GETMISSES+GETS)*100 "MISS_RATIO",
(1 - SUM(GETMISSES)/SUM(GETMISSES+GETS))*100 "HIT_RATIO"
FROM V$ROWCACHE
WHERE GETS+GETMISSES <> 0
GROUP BY PARAMETER, GETS, GETMISSES;
SELECT SUM(PINS) "TOTAL_PINS",
SUM(RELOADS) "TOTAL_RELOADS",
SUM(RELOADS)/SUM(PINS)*100 "LIBRARY_CACHE_MISS_RATIO"
FROM V$LIBRARYCACHE;
PINS:物件被釘住在記憶體中的次數RELOADS:物件被踢出後重新載入次數SHARED_POOL_SIZELIBRARY_CACHE_MISS_RATIO,超過 1% 考慮擴大共享池或檢查未使用綁定變數導致的硬解析過多SGA_TARGET),讓 Oracle 動態平衡各組件大小SHOW SGA
SELECT * FROM V$SGA;
共享池是 SQL 執行效能的核心。透過 V$ROWCACHE 與 V$LIBRARYCACHE 監控字典與 Library Cache 命中率,配合綁定變數使用、適度設定 SHARED_POOL_SIZE 或啟用 SGA_TARGET 自動管理,能有效降低硬解析、提升系統吞吐量。