首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 進程導致 CPU 100% 根因分析與解決標準流程

     編輯:Oracle 資料庫相關知識

診斷標準流程 (AIX/Unix 環境)

1. 確認系統整體 CPU 狀態

sar -u 5 5   # 每 5 秒取樣 5 次

2. 定位高 CPU 進程

topas
ps -ef | grep ora   # 觀察第 4 欄 C (CPU 使用率,單位 100 per CPU)

3. 確認 CPU 核心數

/usr/sbin/bindprocessor -q
lsattr -El proc0

4. 判斷進程類型

  • Background Process (DBWR, LGWR, PMON, SMON 等);
  • User Process (前端連線、批次作業) — 最常見原因。

5. User Process 高 CPU 常見原因

  • 大型查詢 (Large Queries);
  • 程序編譯/執行 (Procedure Compilation/Execution);
  • 空間管理 (Space Management);
  • 排序操作 (Sorting)。

5.1 查詢 Session 級 CPU 使用

SELECT ss.sid, se.command, ss.value AS cpu_usage,
       se.username, se.program
FROM v$sesstat ss, v$session se
WHERE ss.statistic# = (
    SELECT statistic# FROM v$statname
    WHERE name = 'CPU used by this session'
)
  AND se.sid = ss.sid
  AND ss.sid > 6
ORDER BY ss.value DESC;

5.2 鎖定高 CPU Session 並檢視等待與 SQL

SELECT s.sid, w.event, w.wait_time, w.seq#, q.sql_text
FROM v$session_wait w, v$session s, v$process p, v$sqlarea q
WHERE s.paddr = p.addr
  AND s.sid = &target_sid
  AND s.sql_address = q.address;

5.3 分析執行計劃關鍵點

  • 是否出現 HASH JOIN 與 FULL TABLE SCAN → 建立/驗證索引有效性;
  • 是否存在並行查詢 → 關閉並行 (parallel_min/max_servers=0) 並移除 Hint;
  • InterMedia 索引過大 → 限制 Wordlist 範圍減小索引體積。

6. 即時長作業監控

v$session_longops 顯示正在執行/已完成的長作業,每 Process 完成刷新一次,可即時掌握進度,補足事後分析盲區。

7. 多進程均分 CPU 情況

若多進程平均佔用 CPU,極大機率執行相同 Package/Query。建議:

  • 高 CPU 期間跑多個 Statspack 快照;
  • 分析報告 Top SQL;
  • 使用 SQL_TRACE + TKPROF 深度追蹤;
  • 檢查 Buffer Cache 命中率是否 > 95%;
  • 關注報告中 table scans (long tables) 是否異常。

8. 關鍵參數檢查

參數建議值 (OLTP)說明
parallel_min_servers0關閉並行查詢
parallel_max_servers0關閉並行查詢
parallel_automatic_tuningFALSE關閉自動並行

並持續監控 SQL Hint 是否強制並行。

結語

CPU 100% 診斷鏈:OS 確認 → 進程定位 → Session 識別 → SQL/計劃分析 → 索引/統計/參數調整 → 長作業監控 → 並行查詢管控。建立標準化排查手冊,可將 MTTR 降至最低。

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