ITPub博客

首页 > 数据库 > Oracle > 使用AWR生成报表

使用AWR生成报表

原创 Oracle 作者:静以致远√团团 时间:2014-07-17 17:44:27 0 删除 编辑

AWR 生成报表

 

AWR介绍

AWR(Automatic Workload Repository)是Oracle Database 10g 提供的一个新的工具,用来采集与性能相关的统计数据,并从那些统计数据中导出性能量度,以跟踪潜在的问题(10g之前使用的是Statspack)。

AWR生成的快照由MMON后台进程及其从进程自动地每小时采集一次。为了节省空间,采集的数据在 天后自动清除。快照频率和保留时间都可以由用户修改。它产生两种类型的输出:文本格式(类似于 Statspack 报表的文本格式但来自于AWR信息库)和默认的 HTML 格式(拥有到部分和子部分的所有超链接),从而提供了非常用户友好的报表。

AWR 使用几个表来存储采集的统计数据,所有的表都存储在新的名称为SYSAUX的特定表空间中的SYS模式下,并且以WRM$_*WRH$_*的格式命名。前一种类型存储元数据信息(如检查的数据库和采集的快照),后一种类型保存实际采集的统计数据。H代表历史数据 (historical)”M代表元数据 (metadata)”

在这些表上构建了几种带前缀 DBA_HIST_ 的视图,这些视图可以用来编写您自己的性能诊断工具。视图的名称直接与表相关;例如,视图DBA_HIST_SYSMETRIC_SUMMARY 是在WRH$_SYSMETRIC_SUMMARY 表上构建的。

AWR 的使用

 

启用AWR

在默认情况下,Oracle启用数据库统计收集这项功能(即启用AWR)。是否启用AWR由初始化参数STATISTICS_LEVEL控制。通过SHOW PARAMETER命令可以显示STATISTICS_LEVEL的当前值:

 

SQL> show parameter statistics_level

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

statistics_level                     string      TYPICAL

 

AWR的行为受到参数STATISTICS_LEVEL的影响。这个参数有三个值:

*BASICawr统计的计算和衍生值关闭.只收集少量的数据库统计信息

*TYPICAL:默认值.只有部分的统计收集.他们代表需要的典型监控oracle数据库的行为

*ALL : 所有可能的统计都被捕捉,并且有操作系统的一些信息,这个级别的捕捉应该在很少的情况下,比如你要更多的sql诊断信息的时候才使用

 

注意:

statistics_level 默认是typical,在10g中表监控是激活的,强烈建议在10g中此参数的值是typical。如果STATISTICS_LEVEL设置为basic,不仅不能监控表,而且将禁掉一些10g的新功能ASH(Active Session History)、ASSM(Automatic Shared Memory Management)、AWR(Automatic Workload Repository)、ADDM(Automatic Database Diagnostic Monitor)。

 

查看快照的频率和保留时间,默认为每1小时采样一次,采样信息保留时间为7

 

SQL> select * from dba_hist_wr_control;

 

      DBID SNAP_INTERVAL        RETENTION            TOPNSQL

---------- -------------------- -------------------- ----------

 870750245 +00000 01:00:00.0    +00007 00:00:00.0    DEFAULT

1370299695 +00000 01:00:00.0    +00007 00:00:00.0    DEFAULT

 

SQL> select dbid,snap_interval,snapint_num,retention from wrm$_wr_control;

 

      DBID SNAP_INTERVAL        SNAPINT_NUM RETENTION

---------- -------------------- ----------- --------------------

 870750245 +00000 01:00:00.0           3600 +00007 00:00:00.0

1370299695 +00000 01:00:00.0           3600 +00007 00:00:00.0

 

 

 

修改快照的频率和保留时间

 

SQL> exec dbms_workload_repository.modify_snapshot_settings(interval=>60,retention=>7*24*60);

PL/SQL procedure successfully completed.

 

 

手工取样生成快照

 

SQL> begin

  2  dbms_workload_repository.create_snapshot();

  3  end;

  4  /

PL/SQL procedure successfully completed.

 

通过dba_hist_snapshot可以查找产生的快照

  1  select

  2  snap_id,

  3  dbid,

  4  to_char(startup_time,'yy-mm-dd hh24:mi:ss') db_start_time,

  5  to_char(begin_interval_time,'yy-mm-dd hh24:mi:ss') interval_start,

  6  to_char(end_interval_time,'yy-mm-dd hh24:mi:ss') interval_end

  7  from dba_hist_snapshot

  8* where end_interval_time > (sysdate - 60/1440)

SQL> /

 

   SNAP_ID       DBID DB_START_TIME     INTERVAL_START    INTERVAL_END

---------- ---------- ----------------- ----------------- -----------------

       154  870750245 14-07-17 09:07:05 14-07-17 14:07:00 14-07-17 15:07:00

       155  870750245 14-07-17 09:07:05 14-07-17 15:07:00 14-07-17 15:07:39

 

2 rows selected.

 

 

wrh$_active_session_history和dba_hist_active_sess_history记录着更加详细的信息

 

SQL> select count(*) from wrh$_active_session_history;

 

  COUNT(*)

----------

      1198

 

SQL> select count(*) from dba_hist_active_sess_history;

 

  COUNT(*)

----------

       472

 

删除指定范围内的快照,此处把生成的snap_id154155快照删除

 

SQL> begin

  2  dbms_workload_repository.drop_snapshot_range(low_snap_id=>154,high_snap_id=>155,dbid=>870750245);

  3  end;

  4  /

 

SQL> select

  2  snap_id,

  3  dbid,

  4  to_char(startup_time,'yy-mm-dd hh24:mi:ss') db_start_time,

  5  to_char(begin_interval_time,'yy-mm-dd hh24:mi:ss') interval_start,

  6  to_char(end_interval_time,'yy-mm-dd hh24:mi:ss') interval_end

  7  from dba_hist_snapshot

  8  where end_interval_time > (sysdate - 60/1440)

  9  /

 

no rows selected

 

获取采样数据存放位置

采样数据都存储在SYSAUX表空间中,并且以WRM$_*WRH$_*的格式命名。前一种类型存储元数据信息(如检查的数据库和采集的快照),后一种类型保存实际采集的统计数据。当SYSAUX表空间满后,AWR将自动覆盖掉旧的信息,并在警告日志中记录一条相关信息

SQL> select table_name from dba_tables where table_name like 'WRM$_%';

 

TABLE_NAME

------------------------------

WRM$_WR_CONTROL

WRM$_SNAP_ERROR

WRM$_SNAPSHOT

WRM$_DATABASE_INSTANCE

WRM$_BASELINE

 

5 rows selected.

 

基线(baseline)是一种机制,这样你可以在重要时间的快照信息集做标记。一个基线定义在一对快照之间,快照通过他们的快照序列号识别。每个基线有且只有一对快照。一次典型的性能调整实践从采集量度的基准线集合、作出改动、然后采集另一个基准线集合开始。可以比较这两个集合来检查所作的改动的效果。在 AWR 中,对现有的已采集的快照可以执行相同类型的比较。

比如五分钟前对一个SQL进行了优化,想看一下优化后的效果,期间我做了三次快照:

  1  select

  2  snap_id,

  3  dbid,

  4  to_char(startup_time,'yy-mm-dd hh24:mi:ss') db_start_time,

  5  to_char(begin_interval_time,'yy-mm-dd hh24:mi:ss') interval_start,

  6  to_char(end_interval_time,'yy-mm-dd hh24:mi:ss') interval_end

  7  from dba_hist_snapshot

  8* where end_interval_time > (sysdate - 5/1440)

SQL> /

 

   SNAP_ID       DBID DB_START_TIME     INTERVAL_START    INTERVAL_END

---------- ---------- ----------------- ----------------- -----------------

       161  870750245 14-07-17 09:05:11 14-07-17 16:14:24 14-07-17 16:15:35

       162  870750245 14-07-17 09:05:11 14-07-17 16:15:35 14-07-17 16:17:41

       160  870750245 14-07-17 09:05:11 14-07-17 16:11:22 14-07-17 16:14:24

 

SQL优化时间如果是在16:14开始,我们不妨在16:14之前(即id159-160之间)设置一个基线sql_adjust_begin:

SQL> exec dbms_workload_repository.create_baseline(159,160,'sql_adjust_begin');

 

PL/SQL procedure successfully completed.

 

如果SQL优化时间在16:15就结束,那再在结束后找个时间设置一个基线sql_adjust_end,这样,就可以通过对比两个基线相关的快照,来确定优化的效果。

 

SQL> exec dbms_workload_repository.create_baseline(161,162,'sql_adjust_end');

 

PL/SQL procedure successfully completed.

 

查看基线信息

 

SQL> select * from wrm$_baseline;

 

      DBID BASELINE_ID BASELINE_NAME        START_SNAP_ID END_SNAP_ID

---------- ----------- -------------------- ------------- -----------

 870750245           1 sql_adjust_begin               159         160

 870750245           2 sql_adjust_end                 161         162

 

dba_hist_baseline中也记录着基线的信息

SQL> desc dba_hist_baseline;

 Name                                      Null?    Type

 ----------------------------------------- -------- ----------------------------

 DBID                                      NOT NULL NUMBER

 BASELINE_ID                               NOT NULL NUMBER

 BASELINE_NAME                                      VARCHAR2(64)

 START_SNAP_ID                                      NUMBER

 START_SNAP_TIME                                    TIMESTAMP(3)

 END_SNAP_ID                                        NUMBER

 END_SNAP_TIME                                      TIMESTAMP(3)

 

删除基线

分析之后使用drop_baseline()来删除基准线;快照将保留(也可级联删除)。此外,当清除例程开始删除旧的快照时,与基准线相关的快照不会被清除,从而允许进行进一步的分析。

 

SQL> exec dbms_workload_repository.drop_baseline(baseline_name=>'sql_adjust_begin',cascade=>false);

 

PL/SQL procedure successfully completed.

 

如果cascade设置成true将连通快照一起删除

 

SQL> exec dbms_workload_repository.drop_baseline(baseline_name=>'sql_adjust_end',cascade=>true);

PL/SQL procedure successfully completed.

  1  select

  2  snap_id,

  3  dbid,

  4  to_char(startup_time,'yy-mm-dd hh24:mi:ss') db_start_time,

  5  to_char(begin_interval_time,'yy-mm-dd hh24:mi:ss') interval_start,

  6  to_char(end_interval_time,'yy-mm-dd hh24:mi:ss') interval_end

  7  from dba_hist_snapshot

  8* where snap_id > 155

SQL> /

 

   SNAP_ID         DBID DB_START_TIME     INTERVAL_START    INTERVAL_END

---------- ------------ ----------------- ----------------- -----------------

       156    870750245 14-07-17 09:05:11 14-07-17 15:39:01 14-07-17 16:10:01

       157    870750245 14-07-17 09:05:11 14-07-17 16:10:01 14-07-17 16:10:12

       158    870750245 14-07-17 09:05:11 14-07-17 16:10:12 14-07-17 16:11:14

       159    870750245 14-07-17 09:05:11 14-07-17 16:11:14 14-07-17 16:11:22

       160    870750245 14-07-17 09:05:11 14-07-17 16:11:22 14-07-17 16:14:24

5 rows selected.

此时有关基线sql_adjust_end的连个快照161162已经被删除

 

产生AWR报告

 

AWR报告其实就是一张数据库健康体检表,它显示了数据库健康的各项指标。Oracle可以产生两种类型的AWR报告:文本格式和HTML 格式。HTML格式的报告更受欢迎。

AWR报告也分很多种,有针对整个数据库的AWR报告,有针对某个实例的AWR报告(在集群环境),有针对单条SQL语句的AWR报告。通过运行Oracle自带的SQL脚本产生AWR报告,只是产生不同的AWR报告,需要运行不同的脚本。

 

比如生成整库的报告需要执行awrrpt.sql 脚本

SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql 

Current Instance

~~~~~~~~~~~~~~~~

 

   DB Id    DB Name      Inst Num Instance

----------- ------------ -------- ------------

  870750245 ORCL_DUP            1 orcl_dup

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'

Enter value for report_type: html  //此处输入报告的类型

Instances in this Workload Repository schema

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

   DB Id     Inst Num DB Name      Instance     Host

------------ -------- ------------ ------------ ------------

  1370299695        1 ORCL         orcl         localhost.lo

                                                caldomain

* 870750245         1 ORCL_DUP     orcl_dup     localhost.lo

                                                caldomain

* 870750245         1 ORCL_DUP     orcl_dup     node1

 

Using  870750245 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.

 

Enter value for num_days: 1 //设置分析的报告时间范围

 

Listing the last day's Completed Snapshots

                                                        Snap

Instance     DB Name        Snap Id    Snap Started    Level

------------ ------------ --------- ------------------ -----

orcl_dup     ORCL_DUP           146 17 Jul 2014 09:15      1

                                147 17 Jul 2014 10:00      1

                                148 17 Jul 2014 10:52      1

                                149 17 Jul 2014 11:13      1

                                150 17 Jul 2014 11:16      1

                                151 17 Jul 2014 12:00      1

                                152 17 Jul 2014 13:00      1

                                153 17 Jul 2014 14:00      1

                                156 17 Jul 2014 16:10      1

                                157 17 Jul 2014 16:10      1

                                158 17 Jul 2014 16:11      1

                                159 17 Jul 2014 16:11      1

                                160 17 Jul 2014 16:14      1

                                163 17 Jul 2014 17:00      1

 

Specify the Begin and End Snapshot Ids

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enter value for begin_snap: 153 //选择开始的snap序号

Begin Snapshot Id specified: 153

Enter value for end_snap: 156    //选择结束快照序号

End   Snapshot Id specified: 156

 

Specify the Report Name

~~~~~~~~~~~~~~~~~~~~~~~

The default report file name is awrrpt_1_153_156.html.  To use this name,

press  to continue, otherwise enter an alternative.

 

Enter value for report_name: 

Enter value for report_name: awr_report_2014-07-17_153-156_01.rep //报告名

 

会在当前路径下生成报表,将报表用浏览器打开即可

[oracle@node1 ~]$ ls

afiedt.buf  awr_report_2014-07-17_153-156_01.rep

 

 

 

生成其他的AWR报告执行不同的脚本即可:

awrrpt.sql :生成指定快照区间的统计报表;

awrrpti.sql :生成指定数据库实例,并且指定快照区间的统计报表;

awrsqlrpt.sql :生成指定快照区间,指定SQL语句(实际指定的是该语句的SQLID)的统计报表;

awrsqrpi.sql :生成指定数据库实例,指定快照区间的指定SQL语句的统计报表;

awrddrpt.sql :指定两个不同的时间周期,生成这两个周期的统计对比报表;

awrddrpi.sql :指定数据库实例,并指定两个的不同时间周期,生成这两个周期的统计对比报表;

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29320885/viewspace-1221355/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 学会 Shared Pool
请登录后发表评论 登录
全部评论
每个人都有梦想,去实现吧!

注册时间:2013-11-14

  • 博文量
    164
  • 访问量
    2103733