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

Oracle 11g/12c/19c AWR 報告生成全流程:手動快照與自動報告

     編輯:Oracle 資料庫基礎

前置條件

  • 診斷包授權 (Diagnostic Pack) — Enterprise Edition 才包含。
  • 統計級別 STATISTICS_LEVEL = TYPICAL 或 ALL。
  • SYS/SYSDBA 權限。

方法一:手動創建快照生成報告 (適合指定時間窗口)

-- 1. 連接數據庫
sqlplus / as sysdba

-- 2. 創建開始快照 (FLUSH_LEVEL=ALL 確保全量刷新)
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT(flush_level => 'ALL');

-- 3. 運行業務負載 (建議 30-60 分鐘,覆蓋高峰期)
--    此處執行待分析的 SQL、批處理、應用壓測等

-- 4. 創建結束快照
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT(flush_level => 'ALL');

-- 5. 生成 AWR 報告 (文本/HTML)
@?/rdbms/admin/awrrpt.sql
-- 按提示選擇:報告類型(text/html)、開始快照ID、結束快照ID、報告名稱

方法二:直接使用現有自動快照 (無需手動創建)

AWR 默認每小時自動快照 (可通過 DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS 調整間隔/保留)。

@?/rdbms/admin/awrrpt.sql
-- 直接選擇已有的兩個快照 ID 即可

方法三:PL/SQL 程序化生成 (適合自動化巡檢)

DECLARE
  v_report CLOB;
BEGIN
  -- 文本報告
  v_report := DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(
    dbid => (SELECT dbid FROM v$database),
    inst_num => 1,
    bid => 1234,  -- 開始快照 ID
    eid => 1235   -- 結束快照 ID
  );
  -- 寫入文件或發送郵件
  DBMS_XSLPROCESSOR.CLOB2FILE(v_report, 'DATA_PUMP_DIR', 'awr_1234_1235.txt');
END;
/

關鍵報告章節解讀重點

章節關注指標異常閾值參考
Load ProfileDB Time/s, Redo/s, Logical Reads/sDB Time > 1.0 表示 CPU 壓力大
Top 5 Timed Events等待事件佔 DB Time %db file sequential read > 50% 關注索引/磁盤
SQL StatisticsElapsed Time, Executions, Buffer Gets單次 Elapsed > 1s 或 Buffer Gets > 100萬
Instance Activityparse count (hard), execute countHard Parse > 100/s 需綁定變量
Segments by Logical/Physical Reads熱塊對象前 5 段佔比 > 50% 考慮分區/緩存

常見問題與解決

  • 快照 ID 找不到:確認 DBA_HIST_SNAPSHOT 保留天數 (默認 8 天),必要時 MODIFY_SNAPSHOT_SETTINGS(retention => 43200) 設 30 天。
  • 報告生成極慢:AWR 表統計信息過期 → EXEC DBMS_STATS.GATHER_TABLE_STATS('SYS','WRH$_ACTIVE_SESSION_HISTORY') 等核心表。
  • RAC 環境:使用 awrrpti.sql 指定實例號,或 awrgrpt.sql 生成全叢集報告。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved