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

Oracle 性能診斷全景指南:從伺服器到 SQL 的系統性定位法

     編輯:Oracle 資料庫基礎

診斷思維:由整體至局部、由面到點

性能問題千頭萬緒,切忌上來就調 SQL。標準流程四步驟:

  1. 蒐集用戶痛點:操作慢、並發高 CPU/記憶體滿載、死鎖等。
  2. 釐清最迫切問題:優先解決業務影響最大者。
  3. 根因分析:唯有找到根因,調優才有的放矢。
  4. 驗證與固化:調整後壓測確認,納入變更管理。

第一層:伺服器層面(硬體 + OS)

硬體資源檢查

  • CPU:top、vmstat、mpstat 觀察 run queue、context switch、steal time。
  • 記憶體:free -h、vmstat 關注 swap 活動、page in/out。
  • 儲存:iostat -xmt 5 監控 %util、await、svctm;專用工具測試磁碟頻寬。

若硬體瓶頸明確(如 I/O 等待持續 > 20ms、CPU 長期飽和),優先擴容或調整架構,資料庫層面調優效果有限。

作業系統調校

  • Linux:核心參數 vm.swappiness、vm.dirty_ratio、hugepages、檔案描述符限制、/etc/security/limits.conf。
  • Windows:效能監視器觀察 Pages/sec、Available MBytes、Pool Nonpaged Bytes。

第二層:資料庫整體架構規劃

儲存規劃

  • 資料檔、索引檔、控制檔、Redo Log 多路徑分離不同磁碟/ASM 磁碟組。
  • 應用系統獨立表空間,大物件 (LOB) 獨立表空間。

記憶體規劃

實例參數審視

  • 優化器模式:OPTIMIZER_MODE、統計收集頻率 (DBMS_STATS 排程)。
  • Cursor Sharing:CURSOR_SHARING = FORCE/SIMILAR 權衡。
  • Pre-page SGA:PRE_PAGE_SGA 避免啟動期分頁錯誤。

第三層:統合診斷工具 — Statspack / AWR

安裝 Statspack 或啟用 AWR(需診斷包授權),設定擷取間隔(建議 30~60 分鐘)。報告關注:

  • Load Profile:每秒交易、邏輯讀、物理讀、Redo 大小。
  • Instance Efficiency:緩衝命中率、Library Cache 命中率、Soft Parse %。
  • Top 5 Wait Events:系統級等待熱點。
  • Top SQL:按 Elapsed Time、Buffer Gets、Executions 排序的問題 SQL。

第四層:局部 SQL 與應用層定位

  1. 依用戶回報操作,啟用 SQL TRACE (10046) 或 DBMS_MONITOR 擷取執行計畫與等待事件。
  2. TKPROF 格式化 Trace 檔,聚焦高耗時 SQL。
  3. 分析執行計畫:Cardinality 偏差、存取路徑、Join Order、Partition Pruning。
  4. 索引檢查:是否缺索引?是否有未用索引 (ALTER INDEX ... MONITORING USAGE)?
  5. 並發問題:死鎖 Trace (10047)、隔離等級、ITL 等待、熱塊競爭。

常見遺漏檢查項

  • 優化器模式是否為 CBO?統計資訊是否最新?直方圖是否收集?
  • 索引監控是否發現長期未用索引?
  • 應用端連線池設定是否導致 Session 暴增?

結語

性能診斷如醫生問診:先量體溫、血壓(伺服器/OS),再看血液報告(AWR/Statspack),最後針對病灶開刀(SQL/索引/應用)。跳過前兩層直奔 SQL,往往治標不治本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
元件建議
SGA_TARGET / MEMORY_TARGET啟用自動共享記憶體管理 (ASMM/AMM)
DB_CACHE_SIZE盡量佔大頭,提升緩衝命中率
PGA_AGGREGATE_TARGET排序/雜湊密集系統適當加大
SHARED_POOL80M~300M 視 CPU 核心數而定,多核可適度減小
JAVA_POOL, LARGE_POOL各 32M 通常足夠