Oracle中自動工作負載資訊庫(AWR)介紹

season0891發表於2009-07-20
作為一個資料庫管理員,您可能已經投資購買了第三方工具或使用自己開發的工具來在資料庫執行期間採集詳細的統計資料,並從這些統計資料中匯出獲得效能量度。在緊急的情況下,您可以訪問這些量度來與當前的情況作比較。再度檢視這些過去的事件可以給當前的問題帶來一些啟發,因此不斷採集相關的統計資料對於效能分析變得很重要。

一段時間以來,Oracle 在這個領域中的解決方案是它內建的工具 Statspack。雖然某些情況下證明它是非常有價值的,但常常缺少效能故障診斷實踐所需的強健性。Oracle Database 10g 提供了一個顯著改進的工具:自動工作負載資訊庫 (AWR)。AWR 和資料庫一起安裝,不但採集統計資料,還採集匯出的量度。

快速測試驅動程式

透過執行 $ORACLE_HOME/rdbms/admin 目錄中的 awrrpt.sql 指令碼,AWR 的功能可以立即透過它從採集的統計資料和量度中生成的報表得到最好的說明。這個指令碼從外觀和感覺上類似於 Statspack,它顯示所有的現有 AWR 快照並請求兩個特定的快照作為時間間隔邊界。它產生兩種型別的輸出:文字格式(類似於 Statspack 報表的文字格式但來自於 AWR 資訊庫)和預設的 HTML 格式(擁有到部分和子部分的所有超連結),從而提供了非常使用者友好的報表。現在執行該指令碼以檢視報表,從而對 AWR 的功能有一個瞭解。

實施

現在,讓我們來看看 AWR 是如何設計和構建的。AWR 實質上是一個 Oracle 的內建工具,它採集與效能相關的統計資料,並從那些統計資料中匯出效能量度,以跟蹤潛在的問題。與 Statspack 不同,快照由一個稱為 MMON 的新的後臺程式及其從程式自動地每小時採集一次。為了節省空間,採集的資料在 7 天后自動清除。快照頻率和保留時間都可以由使用者修改。要檢視當前的設定,您可以使用下面的語句:

  
  select snap_interval, retention
  from dba_hist_wr_control;
  
  SNAP_INTERVAL    RETENTION
  ------------------- -------------------
  +00000 01:00:00.0  +00007 00:00:00.0
  

這些 SQL 語句顯示快照每小時採集一次,採集的資料保留 7 天。要修改設定 — 例如,快照時間間隔為 20 分鐘,保留時間為兩天 — 您可以發出以下命令。引數以分鐘為單位。
  
  begin
    dbms_workload_repository.modify_snapshot_settings (
     interval => 20,
     retention => 2*24*60
    );
  end;
  

AWR 使用幾個表來儲存採集的統計資料,所有的表都儲存在新的名稱為 SYSAUX 的特定表空間中的 SYS 模式下,並且以 WRM$_* 和 WRH$_* 的格式命名。前一種型別儲存後設資料資訊(如檢查的資料庫和採集的快照),後一種型別儲存實際採集的統計資料。(您可能已經猜到,H 代表“歷史資料 (historical)”而 M 代表“後設資料 (metadata)”。)在這些表上構建了幾種帶字首 DBA_HIST_ 的檢視,這些檢視可以用來編寫您自己的效能診斷工具。檢視的名稱直接與表相關;例如,檢視 DBA_HIST_SYSMETRIC_SUMMARY 是在WRH$_SYSMETRIC_SUMMARY 表上構建的。

  AWR 歷史表採集的資訊比 Statspack 多許多,這些資訊包括表空間使用率、檔案系統使用率、甚至作業系統統計資料。這些表的完整的列表可以透過以下命令從資料字典中看到:

  
  select view_name from user_views where
view_name like 'DBA\_HIST\_%' escape '\';

  

檢視 DBA_HIST_METRIC_NAME 定義 AWR 採集到的重要的量度、它們所屬的組和採集它們的單位。例如,下面是一個記錄(豎直格式):

  
  DBID         : 4133493568
  GROUP_ID       : 2
  GROUP_NAME      : System Metrics Long Duration
  METRIC_ID       : 2075
  METRIC_NAME      : CPU Usage Per Sec
  METRIC_UNIT      : CentiSeconds Per Second

  

它顯示一個量度“每秒 CPU 使用率”以“每秒的釐秒數”為單位進行測量,並且該量度屬於一個量度組 “System Metrics Long Duration”。這條記錄可以和其它的表(如 DBA_HIST_SYSMETRIC_SUMMARY)結合,以獲得資料庫的活動資訊,形式如下:

  
select begin_time, intsize, num_interval,
minval, maxval, average, standard_deviation sd
from dba_hist_sysmetric_summary where metric_id = 2075;
  
BEGIN  INTSIZE NUM_INTERVAL  MINVAL MAXVAL AVERAGE      SD
----- ---------- ------------  ------- ------- -------- ----------
11:39   179916      30     0   33    3 9.81553548
11:09   180023      30    21   35    28 5.91543912
  
... and so on ...

  

下面我們看看 CPU 時間是如何消耗的(以釐秒為單位)。標準差加入到了我們的分析中,它有助於確定平均數字是否反映了實際的工作負載。在第一條記錄中,平均值是每秒消耗 CPU 時間 3 釐秒,但標準差是 9.81,這意味著平均值 3 不能反映工作負載。在第二個例子中,平均值為 28,標準差為 5.9,這更具有代表性。這種型別的資訊趨勢有助於瞭解幾個環境引數對效能量度的影響。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-609701/,如需轉載,請註明出處,否則將追究法律責任。

相關文章