Oracle 資料庫伺服器是系統核心,其效能直接決定整體吞吐量。調優需從作業系統層面、記憶體配置、SGA 結構三大維度切入。
盡量將伺服器資源(CPU、記憶體、磁碟 I/O 頻寬)最大化分配給 Oracle 進程,避免與其他應用爭搶資源。
作業系統用虛擬記憶體(磁碟分頁)模擬大記憶體,會引發大量磁碟 I/O,嚴重拖慢效能。必須加大實體記憶體,確保 SGA 完全駐留實體記憶體。
Oracle 所有前背景進程(DBWR、LGWR、PMON、SMON、用戶進程)執行同等重要工作,不可人為調整優先級,安裝時保持預設值即可。
SGA = 共享池 + 資料庫緩衝區快取。三大核心快取:
查詢 V$LIBRARYCACHE:
SELECT SUM(pins), SUM(reloads) FROM V$LIBRARYCACHE;
PINS:SQL/PLSQL/物件定義被存取總次數。RELOADS:隱式解析或重載發生的錯誤次數。SUM(reloads)/SUM(pins) ≈ 0 為佳;> 1% 需增大 SHARED_POOL_SIZE。查詢 V$ROWCACHE:
SELECT SUM(gets), SUM(getmisses) FROM V$ROWCACHE;
GETS:請求次數;GETMISSES:快取未命中次數。GETMISSES/GETS < 10%~15%;超過需增大 SHARED_POOL_SIZE。查詢 V$SYSSTAT:
SELECT name, value FROM V$SYSSTAT
WHERE name IN ('db block gets','consistent gets','physical reads');
命中率公式:Hit Ratio = 1 - (physical reads / (db block gets + consistent gets))
DB_BLOCK_BUFFERS(舊版)或 DB_CACHE_SIZE(新版)。init.ora/SPFILE 後需重啟資料庫。SELECT name, value FROM V$PARAMETER WHERE name = 'db_block_size';
緩衝區總位元組 = DB_BLOCK_BUFFERS * DB_BLOCK_SIZE。