Oracle数据库AWR的使用实例详解

Oracle数据库AWR的使用实例详解

http://database.51cto.com/art/201108/282863.htm

2011-08-11 16:55 frankfan126 ChinaUnix博客 字号:T | T
一键收藏,随时查看,分享好友!

本文我们主要介绍一下Oracle数据库AWR的使用实例,包括创建删除快照、修改采集时间和统计信息保留时间、设置基线和删除基线的操作,希望能够对您有所帮助。

AD:51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验

上次我们介绍了:Oracle数据库AWR的组成及工作原理的详细介绍,本文我们详细介绍一下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;


请使用浏览器的分享功能分享到微信等