1.1 AWR的使用
AWR 是Oracle一個內置工具,它採集性能相關的統計數據,並從那些統計數據中導出Oracle性能度量,以及跟蹤潛在的問題。(想知道其原理可以百度)。
AWR由Oracle的MMon的後臺進程自動的固定時間採集一次,保存一定的時間。
1.1.1 查看快照保存時間
查看快照保存時間:
select * fromdba_hist_wr_control;
以上結果表示,每小時產生一個SNAPSHOT,保留9天。
1.1.2 快照相關調整
登錄Oracle用戶;
oracle@linux162:~> sqlplus / as sysdba
調整AWR產生snapshot的頻率和保留策略,如將收集間隔時間改爲30 分鐘一次。並且保留5天時間(單位都是分鐘):
SQL> execdbms_workload_repository.modify_snapshot_settings(interval=>30,retention=>5*24*60);
關閉AWR,把interval設爲0則關閉自動捕捉快照:
SQL> execdbms_workload_repository.modify_snapshot_settings(interval=>0);
手工創建一個快照
SQL> execDBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
每次測試之前爲了不影響結果,需要手動創建一個快照,以此快照爲起點。
1.1.3 生成報告
生成報告
SQL>@?/rdbms/admin/awrrpt.sql
其實是:opt/oracle/product/11.2/db/rdbms/admin/awrrpt.sql
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plaintext report?
Enter 'html' for an HTML report, or 'text'for plain text
Defaults to 'html'
輸入 report_type的值:
Type Specified: html
Specify the number of days of snapshots tochoose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will resultin the most recent
(n) days of snapshots being listed. Pressing <return> without
specifying a number lists all completedsnapshots.
輸入 num_days 的值: 1 #可以爲空
Listing the last day's Completed Snapshots
Snap
Instance DB Name Snap Id Snap Started Level
------------ ------------ --------------------------- -----
orcl10g ORCL10G 142 03 7月 2009 08:11 1
143 03 7月 2009 09:00 1
144 03 7月 2009 10:00 1
145 03 7月 2009 11:00 1
146 03 7月 2009 12:01 1
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
輸入 begin_snap 的值: 142
Begin Snapshot Id specified: 142 輸入的起始快照開始時間
輸入 end_snap 的值: 146
End Snapshot Id specified: 146 輸入的起始快照結束時間
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name isawrrpt_1_142_146.html. To use this name,
press <return> to continue, otherwiseenter an alternative.
輸入 report_name的值: /home/oracle/awr_test.html
Report written to D:/awrrpt_1_142_146.html
1.1.4 報告分析
1、SQL ordered by Elapsed Time
記錄了執行總和時間的TOP SQL(請注意是監控範圍內該SQL的執行時間總
和,而不是單次SQL執行時間ElapsedTime = CPU Time + Wait Time)。
Elapsed Time(S): SQL語句執行用總時長,此排序就是按照這個字段進行的。
注意該時間不是單個SQL跑的時間,而是監控範圍內SQL執行次數的總和時間。
單位時間爲秒。Elapsed Time = CPU Time + Wait Time
CPU Time(s): 爲SQL語句執行時CPU佔用時間總時長,此時間會小於等於
Elapsed Time時間。單位時間爲秒。
Executions: SQL語句在監控範圍內的執行次數總計。
Elap per Exec(s): 執行一次SQL的平均時間。單位時間爲秒。
% Total DB Time: 爲SQL的Elapsed Time時間佔數據庫總時間的百分比。
SQL ID: SQL語句的ID編號,點擊之後就能導航到下邊的SQL詳細列表中,
點擊IE的返回可以回到當前SQLID的地方。
SQL Module: 顯示該SQL 是用什麼方式連接到數據庫執行的,如果是用
SQL*Plus或者PL/SQL鏈接上來的那基本上都是有人在調試程序。一般用前臺
應用鏈接過來執行的sql該位置爲空。
2、 SQL ordered by CPU Time:
記錄了執行佔CPU時間總和時間最長的TOP SQL(請注意是監控範圍內該
SQL的執行佔CPU時間總和,而不是單次SQL執行時間)。
3、 SQL ordered by Gets:
記錄了執行佔總buffer gets(邏輯IO)的TOP SQL(請注意是監控範圍內該SQL
的執行佔Gets總和,而不是單次SQL執行所佔的Gets)。
4、SQL ordered by Reads:
記錄了執行佔總磁盤物理讀(物理IO)的TOP SQL(請注意是監控範圍內該
SQL的執行佔磁盤物理讀總和,而不是單次SQL執行所佔的磁盤物理讀)。
5、SQL ordered by Executions:
記錄了按照SQL的執行次數排序的TOP SQL。該排序可以看出監控範圍內
的SQL執行次數。
6、SQL ordered by Parse Calls:
記錄了SQL的軟解析次數的TOP SQL。說到軟解析(soft prase)和硬解析(hard
prase),就不能不說一下Oracle對sql的處理過程。
7、SQL ordered by Sharable Memory:
記錄了SQL佔用librarycache的大小的TOP SQL。Sharable Mem (b):佔用
library cache的大小,單位是byte。
8、SQL ordered by Version Count:
記錄了SQL的打開子游標的TOP SQL。
1.1.5 AWR查看DB負載
【福建promotion】黑名單2000萬數據,SQL調整之前生成的WAR報告。
這個是我的一個測試數據,其中有Elapsed 和 DB Time. 通過這2個數據,
就可以計算出DB 的負載情況。
DBTime 指cpu time+wait time(不包含空閒等待)。即db time記錄的是服
務器花在數據庫運算(非後臺進程)和等待(非空閒等待)上的時間。
Elapsed:指的是整個時間,如果有多個CPU,總時間就是Elapsed*CPU個
數(linux241 爲8cpu)。
測試數據DB的負載:
1771.37/(212.13*8)=104%
即在整個DB 運行期間,有104%的時間是在處理事務信息。(爲何會超過100%我也不知,數據不包含DB 後臺進程的時間)。此數據看出問題很嚴重。
通過AWR報告,可以找出可能存在問題的SQL語句,或者數據庫嚴重負載的原因。
還有很多數據庫基本情況,可以判斷出是否存在問題。深入瞭解的話可以參考其他文檔。
http://blog.csdn.net/huiyang23/article/details/6926218