(7)AWR的幾個幫 |
[君三思] 2009-11-6 |
四、AWR的幾個幫4.1 Snapshots( 快照)前面操作報表生成時,snap這個關鍵字已經出現過黑多黑多次了,想必你對它充滿了疑惑,這個東西是哪尬來的咋來的誰讓它來的呢?事實上,Snap是Snapshot的簡寫,這正是AWR在自動性方面的體現,雖然你沒有創建,但是AWR自動幫你創建了(當然也可以手動創建snapshot),并且是定時(每小時)創建,定期清除(保留最近7天)。 Snapshots 是一組某個時間點時歷史數據的集合,這些數據就可被ADDM(Automatic Database Diagnostic Monitor)用來做性能對比。默認情況下,AWR能夠自動以每小時一次的頻率生成Snapshots性能數據,并保留7天,,如果需要的話,DBA可以通過DBMS_WORKLOAD_REPOSITORY過程手動創建、刪除或修改snapshots。
4.1.1 手動創建Snapshots手動創建Snapshots,通過DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT過程,例如: SQL> exec dbms_workload_repository.create_snapshot(); PL/SQL procedure successfully completed.然后可以通過DBA_HIST_SNAPSHOT 視圖查看剛剛創建的Snapshots信息。 4.1.2 手動刪除Snapshots刪除Snapshots是使用DBMS_WORKLOAD_REPOSITORY包的另一個過程:DROP_SNAPSHOT_RANGE,該過程在執行時可以通過指定snap_id的范圍的方式一次刪除多個Snapshots,例如: SQL> select count(0) from dba_hist_snapshot where snap_id between 7509 and 7518; COUNT(0) ---------- 10 SQL> begin 2 dbms_workload_repository.drop_snapshot_range( 3 low_snap_id => 7509, 4 high_snap_id => 7518, 5 dbid => 3812548755); 6 end; 7 / PL/SQL procedure successfully completed. SQL> select count(0) from dba_hist_snapshot where snap_id between 7509 and 7518; COUNT(0) ---------- 0注意當snapshots被刪除的話,與其關聯的ASH記錄也會級聯刪除。 4.1.3 修改Snapshots設置通過MODIFY_SNAPSHOT_SETTINGS過程,DBA可以調整包括快照收集頻率、快照保存時間、以及捕獲的SQL數量三個方面的設置。分別對應MODIFY_SNAPSHOT_SETTINGS的三個參數:
查看當前快照收集的相關設置,可以通過DBA_HIST_WR_CONTROL視圖查看,例如: SQL> select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL ---------- ------------------------ -------------------- ---------- 3812548755 +00000 01:00:00.0 +00007 00:00:00.0 DEFAULT又比如通過MODIFY_SNAPSHOT_SETTTINGS過程修改snap_intrval的設置: SQL> exec dbms_workload_repository.modify_snapshot_settings(interval=>120); PL/SQL procedure successfully completed. SQL> select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL ---------- ------------------------ -------------------- ---------- 3812548755 +00000 02:00:00.0 +00007 00:00:00.0 DEFAULT4.2 Baselines( 基線)Baseline ,直譯的話叫做基線,顧名思義的方式理解,就是用于比較的基本線。因為Baseline中包含指定時間點時的性能數據,因此就可以用來與其它時間點時的狀態數據做對比,以分析性能問題。 創建Baseline時,Snapshots是做為其中的一個組成部分存在,因此一般來說當AWR自動維護快照時,如果定義過baseline,與baseline相關的快照不會被刪除,即使是過期的快照,這樣就相當于手動保留了一份統計數據的歷史信息,DBA可以在適當的時間將其與現有的快照進行對比,以生成相關的統計報表。 用戶可以通過DBMS_WORKLOAD_REPOSITORY包中的相關過程,手動的創建或刪除Baseline。 4.2.1 創建Baseline創建Baseline使用CREATE_BASELINE過程,執行該過程時分別指定開始和結果的snap_id,然后為該baseline定義一個名稱即可,例如: SQL> BEGIN 2 DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(start_snap_id => 7550, 3 end_snap_id => 7660, 4 baseline_name => ¨am_baseline¨); 5 END; 6 / PL/SQL procedure successfully completed. SQL> select dbid,baseline_name,start_snap_id,end_snap_id from dba_hist_baseline; DBID BASELINE_NAME START_SNAP_ID END_SNAP_ID ---------- -------------------- ------------- ----------- 3812548755 am_baseline 7550 76604.2.2 刪除Baseline刪除Baseline使用DROP_BASELINE過程,刪除時可以通過cascade參數選擇是否將其關聯的Snapshots級別進行刪除,例如: SQL> BEGIN 2 DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(baseline_name => ¨am_baseline¨, 3 cascade => true); 4 END; 5 / PL/SQL procedure successfully completed. SQL> select * from dba_hist_baseline; no rows selected SQL> select * from dba_hist_snapshot where snap_id between 7550 and 7660; no rows selected |