如何使用AWR?

AWR由ORACLE自動產生,可是也能夠經過DBMS_WORKLOAD_REPOSITORY包來手工建立、刪除和修改。可使用desc命令查看該包中的過程。下面只介紹幾個經常使用的:
1. 手工建立一個快照
SQL> select count(*) from wrh$_active_session_history;
COUNT(*)
317
SQL> begin
2 dbms_workload_repository.create_snapshot;
3 end;
4 /
PL/SQL 過程已成功完成。
SQL> select count(*) from wrh$_active_session_history;
COUNT(*)
320
2. 手工刪除指定範圍的快照
SQL> select * from wrh$_active_session_history where snap_id = 96;
SNAP_ID DBID INSTANCE_NUMBER SAMPLE_ID SAMPLE_TIME
96 1160732652 1 236930 06-10月-07 11.26.04.562 上午
96 1160732652 1 236930 06-10月-07 11.26.04.562 上午
96 1160732652 1 236930 06-10月-07 11.26.04.562 上午
SQL> begin
2 dbms_workload_repository.drop_snapshot_range(low_snap_id => 96, high_snap_id => 96, dbid => 1160732652);
3 end;
4 /
PL/SQL 過程已成功完成。
SQL> select * from wrh$_active_session_history where snap_id = 96;
未選定行
3. 修改採集時間和統計信息保留時間
PROCEDURE MODIFY_SNAPSHOT_SETTINGS
參數名稱 類型 輸入/輸出默認值?
------ --------
RETENTION NUMBER IN DEFAULT
INTERVAL NUMBER IN DEFAULT
TOPNSQL NUMBER IN DEFAULT
DBID NUMBER IN DEFAULT
經過修改retention參數能夠修改awr信息的保留期限。默認的是七天,最小的值是一天。若是把retention設置爲零,自動清除就關閉了.若是awr發現sysaux空間不夠,它經過刪除那些最老部分的快照來從新使用這些空間.同時,也會給dba發一條警告,告訴sysaux空間不夠了(在警告日誌中).
經過修改interval參數能夠修改awr信息的採樣頻率。最小的值是10分鐘,默認的是60分鐘.典型的值是10,20,30,60,120等等。把interval設爲0則關閉自動捕捉快照.如將收集間隔時間改成30 分鐘一次。而且保留5天時間(注:單位都是爲分鐘):
SQL> select *from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
1160732652 +00000 01:00:00.0 +00007 00:00:00.0 DEFAULT
SQL> exec dbms_workload_repository.modify_snapshot_settings(interval=>30, retention=>5*24*60);
PL/SQL 過程已成功完成。
SQL> SELECT *from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
1160732652 +00000 00:30:00.0 +00005 00:00:00.0 DEFAULT
SQL>
4. 設置基線
基線(baseline)是一種機制,這樣你能夠在重要時間的快照信息集作標記。一個基線定義在一對快照之間,快照經過他們的快照序列號識別.每一個基線有且只有一對快照。
一次典型的性能調整實踐從採集量度的基準線集合、做出改動、而後採集另外一個基準線集合開始。能夠比較這兩個集合來檢查所做的改動的效果。在 AWR 中,對現有的已採集的快照能夠執行相同類型的比較。
假定一個名稱爲 apply_interest 的高度資源密集的進程在下午 1:00 到 3:00 之間運行,對應快照 ID 95 到 98。咱們能夠爲這些快照定義一個名稱爲 apply_interest_1 的基準線:
SQL> select *From dba_hist_baseline;
未選定行
SQL> select * from wrm$_baseline;
未選定行
SQL> exec dbms_workload_repository.create_baseline(95, 98, 'apply_interest_1');
PL/SQL 過程已成功完成。
這一操做將快照從 95 到 98 編號,做爲上面指定的基準線的一部分。查看現有的基準線:
SQL> select *from dba_hist_baseline;
DBID BASELINE_ID BASELINE_NAME START_SNAP_ID START_SNAP_TIME END_SNAP_ID END_SNAP_TIME
1160732652 1 apply_interest_1 95 06-10月-07 11.00.05.375 上午 98 06-10月-07 01.44.58.062 下午
SQL> select *from wrm$_baseline;
DBID BASELINE_ID BASELINE_NAME START_SNAP_ID END_SNAP_ID
1160732652 1 apply_interest_1 95 98
SQL>
在一些調整步驟以後,咱們能夠建立另外一個基準線 — 假設名稱爲 apply_interest_2,而後只爲那些與這兩條基準線相關的快照比較量度。
SQL> exec dbms_workload_repository.create_baseline(92, 94, 'apply_interest_2');
PL/SQL 過程已成功完成。
像這樣把快照分隔在僅僅幾個集合中有助於研究調整對於性能量度的影響。您能夠在分析以後使用 drop_baseline 來刪除基準線;快照將保留(也可級聯刪除)。此外,當清除例程開始刪除舊的快照時,與基準線相關的快照不會被清除,從而容許進行進一步的分析。
5. 刪除基線
若是要刪除一個基準線:
SQL> exec dbms_workload_repository.drop_baseline(baseline_name=>'apply_interest_1', cascade=>false);
PL/SQL 過程已成功完成。
SQL> select *from wrh$_active_session_history where snap_id in (95,96,97,98);
SNAP_ID DBID INSTANCE_NUMBER SAMPLE_ID SAMPLE_TIME
95 1160732652 1 235360 06-10月-07 10.56.29.872 上午
95 1160732652 1 235230 06-10月-07 10.54.19.857 上午
95 1160732652 1 233130 06-10月-07 10.19.19.478 上午
95 1160732652 1 232830 06-10月-07 10.14.18.859 上午
95 1160732652 1 232250 06-10月-07 10.04.38.481 上午
97 1160732652 1 238600 06-10月-07 12.33.08.420 下午
97 1160732652 1 238600 06-10月-07 12.33.08.420 下午
97 1160732652 1 238600 06-10月-07 12.33.08.420 下午
97 1160732652 1 238600 06-10月-07 12.33.08.420 下午
97 1160732652 1 238600 06-10月-07 12.33.08.420 下午
97 1160732652 1 238600 06-10月-07 12.33.08.420 下午
SNAP_ID DBID INSTANCE_NUMBER SAMPLE_ID SAMPLE_TIME
97 1160732652 1 238420 06-10月-07 11.50.55.686 上午
97 1160732652 1 238230 06-10月-07 11.47.45.687 上午
98 1160732652 1 239140 06-10月-07 01.42.00.976 下午
98 1160732652 1 239140 06-10月-07 01.42.00.976 下午
98 1160732652 1 239140 06-10月-07 01.42.00.976 下午
98 1160732652 1 239140 06-10月-07 01.42.00.976 下午
98 1160732652 1 239140 06-10月-07 01.42.00.976 下午
98 1160732652 1 239130 06-10月-07 01.27.04.161 下午
98 1160732652 1 239130 06-10月-07 01.27.04.161 下午
98 1160732652 1 239130 06-10月-07 01.27.04.161 下午
已選擇21行。
SQL> exec dbms_workload_repository.drop_baseline(baseline_name=>'apply_interest_2', cascade=>true);
PL/SQL 過程已成功完成。
SQL> select *from wrh$_active_session_history where snap_id in (92,93,94);
未選定行
SQL>
6. 生成報表
awr有個報表生成機制,能夠對存儲在workload資料庫的統計產生彙總報表。這個分析對一段時間的統計作的。這個報表生成機制很像statspack。
可使用腳本awrrpt.sql或awrrpti.sql來查看AWR報告(很是相似statspack中的spreport.sql),這兩個腳本都在目錄$ORACLE_HOME/rdbms/admin中。Awrrpt.sql腳本能夠顯示指定快照id範圍的診斷信息,報告能夠保存爲文本文件或HTML文件;awrrpti.sql腳本與awrrpt.sql相似,惟一的不一樣就是在awrrpti.sql腳本中,你能夠指定數據庫ID和實例ID(做爲參數)。報告包括以下診斷信息:
[1] Report summary
[1] Wait events statistics
[1] SQL statistics
[1] Instance activity statistics
[1] I/O statistics
[1] Buffer pool statistics
[1] Advisory statistics
[1] Wait statistics
[1] Undo statistics
[1] Latch statistics
Segment statistics
[1] Dictionary cache statistics
[1] Library cache statistics
[1] SGA statistics
[1] Resource limit statistics
[1] init.ora parameters
經過運行$ORACLE_HOME/rdbms/admin目錄中的awrrpt.sql腳本,AWR的功能能夠當即經過它從採集的統計數據和量度中生成的報表獲得最好的說明。這個腳本顯示全部的現有AWR快照並請求兩個特定的快照做爲時間間隔邊界。它產生兩種類型的輸出:文本格式(相似於Statspack報表的文本格式但來自於AWR信息庫)和默認的HTML格式(擁有到部分和子部分的全部超連接),從而提供了很是用戶友好的報表。
運行這個腳本必需要select any dictionary權限.這個腳本提示你輸入選項如怎麼和在哪裏生成這個報表:
*首先,你須要指明你要生成html仍是text格式的
*要選擇快照的天數:輸入天數,和你最近的快照,可選的,你可使用dba_hist_snapshot表來看你要用哪一個snap_id.
*開始snap_id和終止snap_id,這個快照對定義你的報表產生的時間間隔.
*文件名稱,報告寫的用戶指定的文件.
如今運行該腳本以查看報表,從而對AWR的報表功能有一個直觀的瞭解。
SQL> @D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\awrrpt.sql
Current Instance
~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance
--------
1160732652 ORCL 1 orcl
Specify the Report Type
Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
輸入 report_type 的值:
Type Specified: html
Instances in this Workload Repository schema
DB Id Inst Num DB Name Instance Host
--------
* 1160732652 1 ORCL orcl YUECHAOTIAN
Using 1160732652 for database Id
Using 1 for instance number
Specify the number of days of snapshots to choose from
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed. Pressing without
specifying a number lists all completed snapshots.
輸入 num_days 的值: 4
Listing the last 4 days of Completed Snapshots
Snap
Instance DB Name Snap Id Snap Started Level
--------- -----
orcl ORCL 81 04 10月 2007 07:24 1
83 05 10月 2007 13:34 1
84 05 10月 2007 16:19 1
85 05 10月 2007 17:00 1
86 05 10月 2007 18:00 1
87 05 10月 2007 19:10 1
88 05 10月 2007 20:00 1
89 05 10月 2007 21:00 1
90 05 10月 2007 22:00 1
91 05 10月 2007 23:00 1
95 06 10月 2007 11:00 1
97 06 10月 2007 13:27 1
98 06 10月 2007 13:44 1
99 06 10月 2007 14:00 1
100 06 10月 2007 14:30 1
101 06 10月 2007 15:00 1
102 06 10月 2007 15:30 1
Specify the Begin and End Snapshot Ids
輸入 begin_snap 的值: 100
Begin Snapshot Id specified: 100
輸入 end_snap 的值: 102
End Snapshot Id specified: 102
Specify the Report Name
The default report file name is awrrpt_1_100_102.html. To use this name,
press to continue, otherwise enter an alternative.
輸入 report_name 的值:
Using the report name awrrpt_1_100_102.html
……(省略結果)
End of Report
Report written to awrrpt_1_100_102.html
SQL>
將產生的HTML腳本粘貼出來,用IE打開看看:一個指定時間段的完整的數據庫性能報告就展示在咱們面前了。下面是部分截圖:
圖2 AWR報告截圖
7. statspack和awr
在過去,你能夠手工的使用statspack來得到歷史數據.你也能夠繼續在oracle10g中使用statspack,可是若是你要使用workload資料庫,那你須要更改你的應用程序代碼。statspack用戶應該轉到10g的workload 資料庫。
這裏不支持數據從statspack移植到workload資料庫.一樣,也沒有視圖來模擬statspack.
在rac環境,每一個快照包含集羣的全部的節點.每一個節點的快照數據有相同的snap_id,但靠實例id來區分。通常地,rac中的快照是在同一時間捕捉的。
你也可使用db control來進行手工的快照。手工的快照支持系統產生的自動快照。手工的快照能夠自定義在你要捕捉的系統行爲的兩個時間點跟自動的不一致的時候,從而擁有更大的靈活性。
相關文章
相關標籤/搜索