程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle 10g自動工作負載信息庫剖析

Oracle 10g自動工作負載信息庫剖析

編輯:Oracle數據庫基礎

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;

BEGININTSIZE NUM_INTERVAL  MINVAL MAXVAL AVERAGE  SD
----- ---------- ------------  ------- ------- -------- ----------
11:39 179916  30 0 333 9.81553548
11:09 180023  3021 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 CPU54500000
background cpu time  254490000
sequence load elapsed time0
parse time elapsed1867816
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 time220345
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 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved