Oracle 效能惡化癥狀統一:使用者回應時間過長。但根因極其多元:CPU、記憶體、I/O、鎖競爭、SQL 悪寫、統計缺失、參數錯配、架構缺陷... 本文建立「設計階段 → 運行階段 → 專項專題」三維調優框架,覆蓋 OS、實例、SQL、應用、存儲全棧,提供可落地的方法論與工具鏈。
使用者回應時間 = 系統服務時間 + 使用者等待時間
調優雙引擎:降低服務時間(優化 SQL、索引、記憶體命中)+ 降低等待時間(消除熱塊、優化鎖、調整提交頻率)。
| 架構 | 資料庫連接模式 | 資源消耗特徵 | 調優重點 |
|---|---|---|---|
| 傳統 C/S (兩層) | 專用伺服器,長連接 | PGA 壓力大、Process 佔用多、連接數受限 | 共享伺服器 (MTS)、連接池 |
| B/S 三層 (Web/App/DB) | 連接池,短連接 | 高併發、頻繁硬解析、Statement Cache 關鍵 | Cursor Sharing、Bind Variable、Connection Pool 調校 |
UNDO_RETENTION),防「ORA-01555」。| 區域 | 關鍵參數 | 調校目標 | 監控指標 |
|---|---|---|---|
| 共享池 | SHARED_POOL_SIZE / SGA_TARGET | 硬解析率 < 1%、Library Cache Hit Ratio > 99% | V$LIBRARYCACHE, V$SGASTAT |
| 資料緩衝區 | DB_CACHE_SIZE / SGA_TARGET | Buffer Cache Hit Ratio > 95% (OLTP)、> 99% (DW) | V$BUFFER_POOL_STATISTICS |
| Redo Log Buffer | LOG_BUFFER | Log Buffer Space 等待為 0 | V$SYSSTAT 'redo log space requests' |
| PGA | PGA_AGGREGATE_TARGET / PGA_AGGREGATE_LIMIT | 工作區最佳執行 (Optimal) > 90%、單次排序/雜湊不落盤 | V$PGA_TARGET_ADVICE, V$SQL_WORKAREA_ACTIVE |
11g+ 建議:啟用 MEMORY_TARGET (AMM) 或 SGA_TARGET + PGA_AGGREGATE_TARGET (ASMM),僅在特殊負載下人工固定元件大小。
工具鏈:EXPLAIN PLAN、DBMS_XPLAN.DISPLAY_CURSOR、SQL Tuning Advisor、SQL Monitoring、TKPROF、SQL Trace (10046)。
核心清單:
CURSOR_SHARING=FORCE 為最後手段)。OFFSET ... FETCH (12c+) 或 ROWNUM 技巧,禁用 MIN/MAX 掃描全表。NOT IN 子查詢 (改 NOT EXISTS/LEFT JOIN ... IS NULL)。| 等待事件 | 典型根因 | 對策 |
|---|---|---|
| enq: TX - row lock contention | 長事務、缺乏索引導致全表鎖、應用邏輯死鎖 | 縮短事務、外鍵加索引、應用層鎖順序化 |
| latch: cache buffers chains | 熱塊 (熱門索引根塊、小表全掃描) | 增加 _DB_BLOCK_HASH_BUCKETS、索引反向鍵、分區表 |
| log file sync | 頻繁 COMMIT、Redo Log 寫入慢 | 批次提交、Redo Log 多路鏡像至低延遲存儲 |
| db file scattered read | 全表掃描過多、索引缺失 | SQL 調優、建立適當索引、物化視圖 |
sar -u/mpstat 觀察 Run Queue > CPU 核心數 → CPU 瓶頸。關閉不必要服務、調整並行度、SQL 調優降低 CPU。vmstat/free 觀察 Swap 發生 → 物理記憶體不足。增大記憶體、縮減 SGA/PGA、關閉 MTS。iostat -xmt 5 觀察 %util > 80%、await > 20ms → I/O 瓶頸。ASM 磁碟組均衡、增加磁碟、調整多路徑、Flash Cache。netstat -s 觀察重傳率、ping 延遲。SDU 大小調整 (8K/16K)、TCP_NODELAY、InfiniBand/RoCE。UNDO_RETENTION、TRANSACTIONS、SESSIONS、PROCESSES、OPEN_CURSORS。LOG_CHECKPOINT_INTERVAL 控制檢查點頻率。PARALLEL_DEGREE_POLICY=AUTO、PARALLEL_MAX_SERVERS、資源管理器限制並行度。COMPRESS FOR QUERY HIGH (Hybrid Columnar Compression)、ROW STORE COMPRESS ADVANCED。| 工具 | 類別 | 核心價值 |
|---|---|---|
| OEM / Cloud Control | 圖形化管理 | 全棧監控、性能頁面、ADDM/ASH 報告、SQL Tuning Advisor 一鍵調優 |
| EXPLAIN PLAN / DBMS_XPLAN | 計劃分析 | 顯示真實/預估執行計劃、Predicate/Projection/Outline/Note 完整資訊 |
| SQL Trace (10046) + TKPROF | 深度追蹤 | Wait 事件、Row Source 執行統計、綁定變量值、遞歸 SQL |
| ASHT Report / AWR Report | 負載剖析 | Top SQL、Wait Events、Instance Activity、Segment Statistics |
| OS Tools: vmstat, iostat, sar, pidstat, perf | 系統層面 | CPU/記憶體/I/O/網路/上下文切換/系統調用 |
| Oratop / MOATS / eDB360 | 第三方輕量 | 即時 Top SQL、歷史負載離線分析、健康檢查報告 |
效能調優無終點,唯有將「被動救火」轉化為「主動管理」,構建「監控 → 分析 → 優化 → 驗證 → 沉澱」閉環,才能在業務增長中守住 SLA 底線。