接續設計階段調優,本文聚焦 資料庫運行階段 的效能調優,分為作業系統層級與資料庫層級雙軌並進。掌握系統資源監控、SGA 元件調校、I/O 與鎖競爭排查,是 DBA 從「會用」進階到「會調」的關鍵里程碑。
# 每 5 秒顯示系統摘要
vmstat 5
# 每 10 秒顯示 10 次分頁活動
sar -p 10 10
關注 swapping(交換)、paging(分頁)、磁碟 I/O、CPU 使用率。
vmstat 或 sar -p 監控SGA 是快速存取資料的關鍵,若頻繁釋放/配置將嚴重拖慢效能。需重新配置 UNIX 核心,調整共享記憶體相關參數(如 shmmax、shmall),確保 SGA 鎖定在實體記憶體中。
每個 Oracle 執行個體 = 後台進程群 + SGA 記憶體區。效能受 SGA 分配合理性、I/O 與鎖競爭影響。
-- Library Cache 命中率
SELECT gethitratio FROM v$librarycache;
-- Library Cache 重載率
SELECT SUM(reloads)/SUM(pins) FROM v$librarycache;
-- Data Dictionary Cache 缺失率
SELECT SUM(getmisses)/SUM(gets) FROM v$rowcache; -- 應 < 15%
優化手段:
command_type=47 且 LENGTH(sql_text) > 500)改寫為預存程序以重用DBMS_SHARED_POOL.KEEP('object_name') 釘住記憶體防被淘汰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(或 9i+ DB_CACHE_SIZE)。小型常用編碼表可用 ALTER TABLE ... CACHE 強制緩存。
過小導致 DML/DDL 等待寫入。監控 log buffer space 等待事件,適度調大 LOG_BUFFER。
db_block_lru_latches、dml_locks 等初始化參數降低 Latch/Lock 爭用utlbstat.sql / utlestat.sql:區間效能快照V$)與資料字典視圖:命中率、等待事件資料庫效能調優是系統工程,涉及 OS、網路、儲存、SQL、應用架構等多層面。沒有銀彈,只有持續的觀測、假設、驗證、迭代。DBA 需在大量實戰中累積經驗,建立直覺與方法論,才能讓 Oracle 高效可靠運行。