【原】oracle11G AWR使用及分析


作者:david_zhang@sh 【轉載時請以超鏈接形式標明文章】

鏈接:http://www.cnblogs.com/david-zhang-index/archive/2012/08/21/2649252.html 

1.先看一張圖片,描述awr和ash的一些基礎信息

 

 

 1 SQL> conn /as sysdba
 2   Connected.
 3   SQL> @?/rdbms/admin/awrrpt.sql
 4   
 5   Current Instance
 6   ~~~~~~~~~~~~~~~~
 7   
 8   DB Id DB Name Inst Num Instance
 9   ----------- ------------ -------- ------------
10   3918594034 ORCL 1 orcl
11   
12   
13   Specify the Report Type
14   ~~~~~~~~~~~~~~~~~~~~~~~
15   Would you like an HTML report, or a plain text report?
16   Enter 'html' for an HTML report, or 'text' for plain text
17   Defaults to 'html'
18   Enter value for report_type: html
19   
20   Type Specified: html
21   
22   
23   Instances in this Workload Repository schema
24   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25   
26   DB Id Inst Num DB Name Instance Host
27   ------------ -------- ------------ ------------ ------------
28   * 3918594034 1 ORCL orcl DCMSBDM
29   
30   Using 3918594034 for database Id
31   Using 1 for instance number
32   
33   
34   Specify the number of days of snapshots to choose from
35   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36   Entering the number of days (n) will result in the most recent
37   (n) days of snapshots being listed. Pressing <return> without
38   specifying a number lists all completed snapshots.
39   
40   
41   Enter value for num_days: 2
42   
43   Listing the last 2 days of Completed Snapshots
44   
45   Snap
46   Instance DB Name Snap Id Snap Started Level
47   ------------ ------------ --------- ------------------ -----
48   kobra KOBRA 1227 20 Aug 2012 00:00 1
49   1228 20 Aug 2012 01:00 1
50   1229 20 Aug 2012 02:00 1
51   1230 20 Aug 2012 03:00 1
52   1231 20 Aug 2012 04:00 1
53   ...
54   1263 21 Aug 2012 12:00 1
55   1264 21 Aug 2012 13:00 1
56   1265 21 Aug 2012 14:00 1
57   1266 21 Aug 2012 15:00 1
58   
59   
60   Specify the Begin and End Snapshot Ids
61   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62   Enter value for begin_snap: 1227
63   Begin Snapshot Id specified: 1227
64   
65   Enter value for end_snap: 1265
66   End Snapshot Id specified: 1265
67   
68   
69   Specify the Report Name
70   ~~~~~~~~~~~~~~~~~~~~~~~
71   The default report file name is awrrpt_1_1227_1265.html. To use this name,
72   press <return> to continue, otherwise enter an alternative.
73   
74   Enter value for report_name:
75   
76   Using the report name awrrpt_1_1227_1265.html
77   
78   <html><head><title>AWR Report for DB: KOBRA, Inst: kobra, Snaps: 1227-1265</title>
79   
80   ...
81   
82   End of Report
83   </body></html>
84   Report written to awrrpt_1_1227_1265.html
85   
86   SQL> exit

2.AWR報告分析

2.1CPU負載分析

如果關注數據庫的性能,那么當拿到一份AWR報告的時候,最想知道的第一件事情可能就是系統資源的利用情況了,而首當其沖的,就是CPU。而細分起來,CPU可能指的是:

1. OS級的User%,Sys%, Idle%
2. DB所占OS CPU資源的Busy%
3. DB CPU又可以分為前台所消耗的CPU和后台所消耗的CPU

如果數據庫的版本是11g,那么很幸運的,這些信息在AWR報告中一目了然:

分析上面的圖片,我們可以得出下面的結論:

OS級的User%,Sys%,Idle%:
OS級的%User為3.4,%Sys為0.4,%Idle為96.1,所以%Busy應該是100-96.1=3.9

DB所占OS CPU資源的Busy%:
DB占了OS CPU資源的3.7,%Busy CPU則可以通過上面的數據得到: %Busy CPU = %Total CPU/(%Busy) * 100 =3.7/3.9 * 100 = 94.87,應該和報告的95.3相吻合,這里有出入,我也不知道原因。

Host CPU的結果來源於DBA_HIST_OSSTAT,AWR 報告里已經幫忙整出了這段時間內的絕對數據(這里的時間單位是centi second,也就是1/100秒)

 

%User = USER_TIME/ (BUSY_TIME+IDLE_TIME)*100 = 1,850,185/ (2,147,757+52,550,299)*100 = 3.38

%Sys = SYS_TIME/ (BUSY_TIME+IDLE_TIME)*100=234,229/ (2,147,757+52,550,299)*100=0.4

%Idle = IDLE_TIME/ (BUSY_TIME+IDLE_TIME)*100=52,550,299/ (2,147,757+52,550,299)*100=96.1

值得注意的,這里已經隱含着這個AWR報告所捕捉的兩個Snapshot之間的時間長短了。有下面的公式:
BUSY_TIME + IDLE_TIME = ELAPSED_TIME * CPU_COUNT

注意:正確的理解這個公式可以對系統CPU資源的使用及其度量的方式有更深一步的理解。

因此ELAPSED_TIME = (2,147,757+52,550,299)/6/100 = 91163.42 seconds

Total DB CPU = DB CPU + Background CPU time = 20,108.16 + 357.62 = 20465.78 centi seconds

Total DB CPU除以總的 BUSY_TIME + IDLE_TIME可得出% Total CPU

% Total CPU = 20465.78/54698056 =3.7%,這剛好與上面Report的值相吻合。

其實,在Load Profile部分,我們也可以看出DB對系統CPU的資源利用情況。

用DB CPU per Second除以CPU Count就可以得到DB在前台所消耗的CPU%了。這里 0.2/6 = 3.3 %比3.7%稍小,說明DB在后台也消耗了大約0.4%的CPU,這是不是一個最簡單的方法了呢?

3 DB Time – 進程消耗時間分析

DB CPU是一個用於衡量CPU的使用率的重要指標。假設系統有N個CPU,那么如果CPU全部處於繁忙狀態的話,一秒鍾內的DB CPU就是N秒。
如何去表征一個系統的繁忙程度呢?除了利用CPU進行計算外,數據庫還會利用其它計算資源,如網絡、硬盤、內存等等,這些對資源的利用同樣可以利用時間進行度量。假設系統有M個Session在運行,同一時刻,有的Session可能在利用CPU,有的Session可能在訪問硬盤,那么,在一秒鍾內,所有Session的時間加起來就可以表征系統在這一秒內的繁忙程度,一般的,這個和的最大值應該為M。這其實就是Oracle提供的另一個重要指標:DB Time,它用以衡量前端進程所消耗的總時間。 對除CPU以外的計算資源的訪問,Oracle用等待事件進行描述。同樣地,和CPU可分為前台消耗CPU和后台消耗CPU一樣,等待事件也可以分為前台等待事件和后台等待事件。 DB Time一般的應該等於DB CPU + 前台等待事件所消耗時間的總和。等待時間通過V$SYSTEM_EVENT視圖進行統計,DB Time和DB CPU則是通過同一個視圖,即V$SYS_TIME_MODEL進行統計。 Load Profile一節就有了對DB Time的描述:

這個系統的CPU個數是6,因此我們可以知道前台進程用了系統CPU的0.2/6=3.3%。DB Time/s為0.2,可以看出這個系統是CPU不繁忙的。里面CPU占了0.2,則其它前台等待事件占了0.2 – 0.2 = 0 Wait Time/s。DB CPU占DB Time的比重呢? 0.2/0.2= 100%

Top 5 Timed Events,或許很多人都對它有所耳聞,按照CPU/等待事件占DB Time的比例大小,這里列出了Top 5。如果一個工作負載是CPU繁忙型的話,那么在這里應該可以看到 DB CPU的影子。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM