Oracle資料庫AWR的使用例項詳解

不一樣的天空w發表於2017-04-05

Oracle資料庫AWR的使用例項詳解

2011-08-11 16:55 frankfan126 ChinaUnix部落格 字號: |
一鍵收藏,隨時檢視,分享好友!

本文我們主要介紹一下Oracle資料庫AWR的使用例項,包括建立刪除快照、修改採集時間和統計資訊保留時間、設定基線和刪除基線的操作,希望能夠對您有所幫助。

AD:

上次我們介紹了:,本文我們詳細介紹一下AWR的使用,接下來就讓我們來一起了解一下這部分內容。

AWR由ORACLE自動產生,但是也可以透過DBMS_WORKLOAD_REPOSITORY包來手工建立、刪除和修改。可以使用desc命令檢視該包中的過程。下面只介紹幾個常用的:

--預設的AWR是每小時執行一次,並且保留8天
SQL> select * from dba_hist_wr_control;

   DBID SNAP_INTERVAL                   RETENTION                                                                   TOPNSQL        CON_ID
---------- ---------------------------------------------------------------------------
2478546149 +00000 01:00:00.0                                                           +00008 00:00:00.0                                                           DEFAULT             0
可以透過dbms_workload_repository.modify_snapshot_settings來修改收集的時間間隙,和AWR報告的保留時間。如果收集時間間隔引數設定為0會停止所有統計資料的收集。

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>




==========================================

--如果需要的話DBA可以透過DBMS_WORKLOAD_REPOSITORY過程手動建立、刪除或修改snapshots.
--提示:呼叫DBMS_WORKLOAD_REPOSITORY包需要擁有DBA許可權。
--1.手動建立Snapshots 即透過DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT建立過程
--例如
exec dbms_workload_repository.create_snapshot();

-- 然後可以透過 DBA_HIST_SNAPSHOT 檢視檢視剛剛建立的Snapshots資訊。
SELECT * FROM DBA_HIST_SNAPSHOT;

-- 2手動刪除Snapshots
--刪除Snapshots是使用DBMS_WORKLOAD_REPOSITORY包的另一個過程?DROP_SNAPSHOT_RANGE 該過程在執行時可以透過指定snap_id的範圍的方式一次刪除多個Snapshot
--例如?
select count(0) from dba_hist_snapshot where snap_id between 6770 and 6774;

select max(snap_id) from dba_hist_snapshot;
select dbid from v$database;
exec dbms_workload_repository.drop_snapshot_range(low_snap_id => 6770,high_snap_id => 6774,dbid => 4059638244);
--或者
begin
dbms_workload_repository.drop_snapshot_range(
low_snap_id => 6770,
high_snap_id => 6774,
dbid => 4059638244);
end;

select count(0) from dba_hist_snapshot where snap_id between 6770 and 6774;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2136663/,如需轉載,請註明出處,否則將追究法律責任。

相關文章