每個 Oracle 實例由一組背景進程(DBWR, LGWR, SMON, PMON 等)與一個 SGA(System Global Area)記憶體區組成。背景進程自動讀寫資料檔,系統效能主要受兩大因素影響:SGA 分配效率與I/O 與鎖爭用。
包含庫快取(共享 SQL/PL/SQL 區)、資料字典快取與會話資訊(MTS 架構)。這些資訊高頻存取,命中率至關重要。
SELECT gethitratio FROM v$librarycache 應 > 90%;SELECT SUM(reloads)/SUM(pins) FROM v$librarycache 應 < 1%。SELECT SUM(getmisses)/SUM(gets) FROM v$rowcache 應 < 15%。常見問題與對策:
SELECT * FROM v$sqlarea WHERE command_type=47 AND LENGTH(sql_text)>500 找出問題 SQL,改寫為預存程序。EXEC dbms_shared_pool.keep('object_name') 釘住記憶體。存放熱門資料塊與修改後的髒塊,採 LRU 演算法淘汰。命中率查詢:
SELECT 1 - (phy.value / (cur.value + con.value))
FROM v$sysstat cur, v$sysstat con, v$sysstat phy
WHERE cur.name = 'db block gets'
AND con.name = 'consistent gets'
AND phy.name = 'physical reads';
若命中率 < 0.85,建議增加 db_block_buffers(或 10g+ 的 db_cache_size)。小型常用編碼表可用 ALTER TABLE ... CACHE 強制駐留。
暫存 DML/DDL 的重做項。空間不足會導致用戶進程等待 log buffer space 事件,需適度調大 log_buffer 參數。
資料量增長後,原本高效的 SQL 可能退化。需定期查詢 v$sql、v$sql_plan 找出全表掃描、索引失效的語句,透過建立索引、改寫 SQL、收集統計資訊修正。
調整初始化參數如 db_block_lru_latches、dml_locks 等,依實際爭用熱點(查詢 v$latch, v$lock)微調,降低並發等待。
掌握 SGA 內部運作機制與關鍵指標監控,是從「會用」進階到「會優」的分水嶺。持續觀測、量化分析、精準調整,方能榨乾硬體效能。