首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 性能調優五大核心工具實戰指南

     編輯:Oracle 資料庫基礎

工具全景:從底層到頂層的診斷體系

Oracle 性能調優非單一工具可盡,需構建 **「作業系統層 → 數據庫內核層 → SQL 應用層 → 管理平台層」** 立體診斷體系。五大核心工具各司其職,互為補充。

1. Oracle 線上數據字典 — 內核視角的「X 光片」

核心動態視圖 (V$ / GV$) 分類速查

領域關鍵視圖核心用途
實例與會話V$INSTANCE, V$DATABASE實例狀態、數據庫模式、角色、啟動時間
V$SESSION, V$SESSION_WAIT, V$SESSION_EVENT當前會話、等待事件、歷史等待統計 — **定位會話級瓶頸首選**
V$PROCESS, V$BGPROCESS前台/後台進程映射,關聯 OS PID 排查系統層資源爭用
內存與 SGAV$SGA, V$SGASTAT, V$SGAINFOSGA 組件大小、自由內存、調整歷史
V$BH, V$BUFFER_POOL_STATISTICS緩存命中率、LRU 鏈狀態、對象在緩存分布 — **調優 db_cache_size 關鍵**
V$LIBRARYCACHE, V$ROWCACHE共享池/字典緩存命中率、重載率、釘住對象 — **調優 shared_pool_size 關鍵**
V$PGASTAT, V$PROCESS_MEMORYPGA 聚合統計、進程級內存分佈 — **調優 pga_aggregate_target 關鍵**
I/O 與存儲V$FILESTAT, V$TEMPSTAT, V$DATAFILE數據文件/臨時文件讀寫延遲、吞吐、熱點文件 — **I/O 瓶頸定位**
V$ASM_DISK, V$ASM_DISKGROUPASM 磁盤組平衡度、磁盤性能、重平衡進度
V$IOSTAT_FILE, V$IOSTAT_FUNCTION11g+ 統一 I/O 統計,按功能/文件類型劃分延遲分布
SQL 與優化器V$SQL, V$SQLAREA, V$SQLSTATS游標級/語句級執行統計:解析次數、執行次數、Elapsed Time、CPU Time、Buffer Gets、Disk Reads、Rows Processed — **Top SQL 發掘源頭**
V$SQL_PLAN, V$SQL_PLAN_STATISTICS_ALL執行計劃與實時統計 (A-Rows, A-Time, Buffers) — **計劃驗證金標準**
V$SQL_OPTIMIZER_ENVSQL 執行時優化器環境參數 (OPTIMIZER_MODE, _OPTIMIZER_* 隱藏參數)
V$SQL_BIND_CAPTURE, V$SQL_BIND_DATA綁定變量窺探值 — **解決綁定變量窺探失效/計劃翻轉**
鎖與併發V$LOCK, V$LOCKED_OBJECT當前鎖持有/等待、阻塞鏈 — **死鎖/阻塞實時排查**
V$ENQUEUE_STAT, V$ENQUEUE_STATISTICS鎖類型級等待統計 (TM, TX, HW, ST 等)
V$SESSION_BLOCKERS (12c+)直接顯示阻塞會話鏈,簡化阻塞排查

實戰查詢模板:Top 10 Buffer Gets SQL

SELECT * FROM (
    SELECT sql_id, executions, buffer_gets, buffer_gets/executions gets_per_exec,
           cpu_time/1e6 cpu_sec, elapsed_time/1e6 ela_sec,
           sql_text
    FROM v$sqlstats
    WHERE executions > 0
    ORDER BY buffer_gets DESC
) WHERE ROWNUM <= 10;

2. 作業系統工具 — 基礎設施視角的「體檢儀」

數據庫運行於 OS 之上,OS 瓶頸 (CPU 飽和、內存交換、I/O 隊列、網絡擁塞) 直接投射為數據庫性能劣化。**必備工具鏈** :

  • Linux/Unix:
    • vmstat 1 10 — 內存/交換/CPU/上下文切換/中斷 實時流
    • iostat -xmt 1 — 磁盤設備級利用率 (%util)、服務時間 (await)、隊列長度、吞吐
    • mpstat -P ALL 1 — 每 CPU 核心利用率,識別單核瓶頸/中斷風暴
    • pidstat -p -d -u -w 1 — Oracle 進程級 CPU/內存/I/O/上下文切換
    • perf top -p — 函數級熱點分析 (需內核支持)
    • sar -n DEV 1 / sar -n TCP,ETCP 1 — 網絡接口/TCP 重傳/錯誤統計
  • Windows:
    • Performance Monitor (perfmon.msc) — 收集器集:Processor, Memory, PhysicalDisk, Network, Process (oracle.exe)
    • Resource Monitor (resmon.exe) — 實時磁盤/網絡/CPU/內存關聯進程
    • Windows Performance Analyzer (WPA) + xperf — 深度 ETW 追蹤

關鍵指標閾值參考

  • CPU Run Queue (vmstat `r`) 持續 > 2×CPU 核心數 → CPU 飽和
  • Memory `si`/`so` (swap in/out) 非零持續 → 內存壓力觸發交換,**嚴禁生產庫發生交換**
  • Disk `%util` > 80% 或 `await` > 20ms (SSD) / 50ms (HDD) → I/O 瓶頸
  • Network `retransmits` / `tcpRetransSegs` 增長 → 網絡擁塞/丟包

3. SQL Trace (10046 Event) & TKPROF — SQL 級別的「顯微鏡」

啟用方式

-- 會話級啟用 (含綁定變量、等待事件、計劃統計)
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';
-- 或使用 DBMS_MONITOR (推薦,10g+)
EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id => 123, serial_num => 456, waits => TRUE, binds => TRUE, plan_stat => 'ALL_EXECUTIONS');
-- 執行目標 SQL...
-- 關閉
EXEC DBMS_MONITOR.SESSION_TRACE_DISABLE(session_id => 123, serial_num => 456);

TKPROF 分析報告核心欄位解讀

欄位含義異常信號
count解析/執行/獲取次數Parse/Execute 比例高 → 繼續解析 (未用綁定變量/游標未共享)
cpuCPU 時間 (秒)CPU 高但 Elapsed 低 → 純計算密集;CPU 低 Elapsed 高 → 等待主導
elapsed墻鐘時間 (秒)總耗時基準
disk物理讀塊數Disk/Query 高 → 緩存未命中/全表掃描/索引失效
query一致性獲取 (邏輯讀)Query 高 → 訪問路徑低效 (索引範圍掃描過廣/嵌套循環過深)
current當前塊獲取 (DML 修改)Current 高 → 大量 DML/鎖爭用
rows處理行數Rows=0 但 Query 高 → 過濾條件極不選擇性

Trace 文件定位

# 1. 查詢 trace 文件路徑
SELECT value FROM v$diag_info WHERE name = 'Default Trace File';
# 2. 或查詢會話 tracefile
SELECT tracefile FROM v$process p JOIN v$session s ON p.addr = s.paddr WHERE s.sid = 123;
# 3. 運行 tkprof
tkprof ora_ora_12345.trc output.txt explain=user/pass sys=no sort=prsela,exeela,fchela

4. Oracle Enterprise Manager (OEM) / Cloud Control — 圖形化的「指揮中心」

核心性能頁面

  • Performance Hub (12c+):實時 ASH 分析、負載圖、Top SQL/Session/Wait/Object/File,支持歷史時段回溯 (AWR/ASH 數據)。
  • SQL Tuning Advisor:輸入 SQL_ID 或 SQL Text,自動推薦索引、統計信息、Profile、重寫建議,可一鍵實施 SQL Profile。
  • SQL Access Advisor:負載工作負載 (SQL Tuning Set / AWR),推薦索引/物化視圖/分區/日志組建議。
  • Memory Advisors:SGA/PGA 目標建議曲線 (V$SGA_TARGET_ADVICE, V$PGA_TARGET_ADVICE 可視化)。
  • Segment Advisor / Undo Advisor:碎片回收、Undo 保留建議。
  • Real-Time ADDM (12c+):即時分析當前性能問題,無需等待 AWR 快照。

5. 自動診斷引擎三驾馬車:AWR / ASH / ADDM

這是 Oracle 10g+ 核心差異化優勢,**無需額外授權** (屬於 Diagnostics Pack,EE 需單獨購買授權)** 。

AWR (Automatic Workload Repository) — 歷史負載「飛行記錄儀」

  • 默認 60 分鐘快照,保留 8 天 (可調)。
  • 核心報告:`awrrpt.sql` (整體)、`awrsqrpt.sql` (SQL 級)、`awrgrpt.sql` (RAC 全局)。
  • 關鍵章節:**Load Profile** (吞吐/並發基線)、**Top Timed Events** (等待事件佔比)、**Instance Efficiency** (緩存命中/解析/執行效率)、**Top SQL** (各維度消耗 TOP)、**Segment Statistics** (熱點對象)。
  • 差異報告** (`awrddrpt.sql`):對比兩個時段 (如故障前 vs 正常),精準定位變化點。

ASH (Active Session History) — 秒級會話採樣「高速攝影」

  • 每秒採樣一次活躍會話 (V$ACTIVE_SESSION_HISTORY 內存環形緩存,持久化至 DBA_HIST_ACTIVE_SESS_HISTORY)。
  • 核心視圖:`V$ACTIVE_SESSION_HISTORY` (實時)、`DBA_HIST_ACTIVE_SESS_HISTORY` (歷史)。
  • 實戰查詢:最近 15 分鐘 Top 等待事件
    SELECT event, COUNT(*) samples, ROUND(COUNT(*)/SUM(COUNT(*)) OVER()*100,2) pct
    FROM v$active_session_history
    WHERE sample_time > SYSDATE - INTERVAL '15' MINUTE
      AND session_state = 'WAITING'
    GROUP BY event
    ORDER BY samples DESC;
    

ADDM (Automatic Database Diagnostic Monitor) — 自動診斷「AI 醫生」

  • 每次 AWR 快照後自動運行,分析 Top 症狀 → 根因 → 影響量化 → 建議 (含預估收益)。
  • 查看報告:`addmrpt.sql` 或 OEM Performance Hub → ADDM Findings。
  • 核心優勢:**量化影響 (DB Time 減少百分比)**,避免主觀臆測。

工具選型決策樹 (實戰速查)

  1. 系統級告警/基線異常 → OS 工具 (vmstat/iostat) + AWR Load Profile + ADDM Finding 確認是否 DB 內部問題。
  2. 用戶反饋具體業務慢 → 獲取 SQL_ID (V$SESSION / 應用日志) → SQL Trace (10046) + TKPROF 深度分析執行計劃/等待/綁定變量 → SQL Tuning Advisor 輔助建議。
  3. 疑似 Top SQL 消耗資源 → AWR/ASH 歷史分析 Top SQL (Buffer Gets/Elapsed/CPU/Executions) → V$SQL_PLAN_STATISTICS_ALL 驗證實時計劃 → 索引/統計/重寫/Profile 干預。
  4. 併發鎖爭用/阻塞 → V$SESSION_BLOCKERS / V$LOCK 實時阻塞鏈 → 定位阻塞 SQL → 業務邏輯/索引/提交頻率優化。
  5. 內存調優 (SGA/PGA) → V$SGA_TARGET_ADVICE / V$PGA_TARGET_ADVICE + AWR Memory Advisor 章節 → 調整參數觀察曲線拐點。
  6. I/O 熱點 → V$FILESTAT / V$IOSTAT_FILE 定位熱點文件/對象 → ASM 重平衡/文件分離/緩存/索引優化。

總結

工具無優劣,唯**場景與組合**決定成效。資深 DBA 的核心競爭力在於:**熟練掌握各工具數據源、采樣頻率、粒度、保留策略、授權依賴,並能在壓力下快速組合定位根因**。建議建立個人「調優知識庫」,沉澱常用查詢腳本、TKPROF 分析模板、AWR 關鍵章節解讀筆記,實現從「會用工具」到「駕馭工具」的躍升。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved