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.8155354811:09 180023 30 21 35 28 5.91543912 ... and so on ...
下面我們看看 CPU 時間是如何消耗的(以厘秒為單位)。標準差加入到了我們的分析中,它有助于確定平均數字是否反映了實際的工作負載。在第一條記錄中,平均值是每秒消耗 CPU 時間 3 厘秒,但標準差是 9.81,這意味著平均值 3 不能反映工作負載。在第二個例子中,平均值為 28,標準差為 5.9,這更具有代表性。這種類型的信息趨勢有助于了解幾個環境參數對性能量度的影響。使用統計數據 迄今為止,我們看到了 AWR 所采集的內容,現在讓我們看看它將如何處理數據。 大多數性能問題并不是孤立存在的,而留有指示性的跡象,這些跡象將通向問題最終的根源。讓我們使用一個典型的調整實踐來說明這一點:您注重到系統很慢,于是決定查看等待的原因。您檢查發現“緩沖區忙等待”非常高。問題可能出在哪里呢?有幾種可能:可能有一個單調增加的索引,可能一個表太滿了,以至于要求將單個數據塊非常快速地加載到內存中,或其它一些因素。無論在哪種情況下,您都首先要確定存在問題的段。假如它是一個索引段,那么您可以決定重新構建它,把它修改為一個反向鍵索引,或把它轉換成一個在 Oracle Database 10g 中引進的散列分區索引。假如它是一個表,您可以考慮修改存儲參數來使它不那么密集,或者利用自動段空間治理把它轉移到一個表空間中。 您的處理計劃一般是有規律的,并且通常基于您對各種事件的了解和您處理它們的經驗。現在設想相同的事情由一個引擎來完成,這個引擎采集量度并根據預先確定的邏輯來推出可能的計劃。您的工作不就變得更輕松了嗎? 現在在 Oracle Database 10g 中推出的這個引擎稱為自動數據庫診斷監控程序 (ADDM)。為了作出決策,ADDM 使用了由 AWR 采集的數據。在上面的討論中,ADDM 可以看到發生了緩沖區忙等待,然后取出相應的數據來查看發生緩沖區忙等待的段,評估其特性和成分,最后為數據庫治理員提供解決方案。在 AWR 進行的每一次快照采集之后,調用 ADDM 來檢查量度并生成建議。因此,實際上您擁有了一個一天二十四小時工作的自動數據庫治理員,它主動地分析數據并生成建議,從而把您解放出來,使您能夠關注更具有戰略意義的問題。 要查看 ADDM 建議和 AWR 信息庫數據,請使用在名稱為 DB Home 的頁面上的新的 EnterPRise Manager 10g 控制臺。要查看 AWR 報表,您可以從治理轉至工作負載信息庫,然后轉至 Snapshots 來查看它們。在以后的部分中,我們將更具體地討論 ADDM。 您還可以指定根據特定的情況來生成警報。這些警報稱為服務器生成警報,它們被推送到高級隊列中,在其中它們可以被任意監聽它的客戶端使用。一個這樣的客戶端是 Enterprise Manager 10g,在其中警報被突出顯示。 時間模型 當您有性能問題時,要縮短響應時間您最先想到的是什么?很明顯,您希望消除(或減少)增加時間的因素的根源。您如何知道時間花費在哪里 — 不是等待,而是真正在進行工作? Oracle Database 10g 引進了時間模型,以確定在各個地方花費的時間。花費的總的系統時間記錄在視圖 V$SYS_TIME_MODEL 中。下面是查詢和輸出結果。
STAT_NAME VALUE ------------------------------------- -------------- DB time 58211645 DB CPU 54500000 background cpu time 254490000 sequence load elapsed time 0 parse time elapsed 1867816 hard parse elapsed time 1758922 sql execute elapsed time 57632352 connection management call elapsed time 288819 failed parse elapsed time 50794 hard parse (sharing criteria) elapsed time 220345 hard parse (bind mismatch) elapsed time 5040 PL/SQL execution elapsed time 197792 inbound PL/SQL rpc elapsed time 0 PL/SQL compilation elapsed time