分类: Oracle
AWR报告的生成和分析

自动工作负载库(Automatic Workload Repository,AWR)自动工作负载库报告是我们进行日常数据库性能评定、问题SQL发现的重要手段。
AWR的由来:

10g之前的oracle:用户的连接将产生会话,当前会话记录保存在v$session中;处于等待状态的会话会被复制一份放在v$session_wait中。当该连接断开后,其原来的连接信息在v$session和v$session_wait中就会被删除;oracle10g及之后保留下了v$session_wait中的这些信息,并多了v$active_session_history(ASH)视图,记录每个活动session在v$session_wait中最近10次的等待事件。

ASH的采样数据是保存在内存中。而分配给ASH的内存空间是有限的,当所分配空间占满后,旧的记录就会被覆盖掉;而且数据库重启后,所有的这些
ASH信息都会消失。这样,对于长期检测oracle的性能是不可能的。在Oracle10g中,提供了永久保留ASH信息的方法,这就是AWR。

由于全部保存ASH中的信息是非常耗费时间和空间的,AWR采用的策略是:每小时对v$active_session_history进行采样一次,并将信息保存到磁盘
中,并且保留7天,7天后旧的记录才会被覆盖。这些采样信息被保存在视图wrh$_active_session_history中。而这个采样频率(1小时)和保留时间
(7天)是可以根据实际情况进行调整的,这就给DBA们提供了更加有效的系统监测工具。

1.AWR的启用

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

SQL> SHOW PARAMETER STATISTICS_LEVEL 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
statistics_level                     string      TYPICAL

如果STATISTICS_LEVEL的值为TYPICAL或者 ALL,表示启用AWR;如果STATISTICS_LEVEL的值为BASIC,表示禁用AWR。

初始化参数statistics_level介绍:

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

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

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

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

快照(SNAPSHOT)

每隔一小时,内存监控进程(MMON)自动地采集一次统计信息,并把这些信息存放到负载库中,一次采样就是一个快照。为了节省空间,采集的数据在

7天后自动清除。快照的频率和保留时间可以由用户修改。

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

 select * from dba_hist_wr_control;
 select DBID, SNAP_INTERVAL, SNAPINT_NUM, RETENTION from wrm$_wr_control;

--修改 快照的频率和保留时间(单位用分钟)

exec dbms_workload_repository.modify_snapshot_settings(interval=>60, retention=>72460);

用户也可以使用下面的命令手工采样(手工生成快照):

    BEGIN  
    DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();  
    END; 
    exec dbms_workload_repository.create_snapshot;

手工删除指定范围的快照

  begin
  dbms_workload_repository.drop_snapshot_range(low_snap_id => 3965, high_snap_id => 3966, dbid => 3437504306);
  end;

查看有多少个快照

 select count(1) from wrh$_active_session_history;
 select count(1) from dba_hist_active_sess_history;

通过查询视图DBA_HIST_SNAPSHOT,可以知道系统中产生了哪些快照。

select * from DBA_HIST_SNAPSHOT;

手工刷出快照
默认情况下 Oracle 的快照每一小时生成一次,也就是说 AWR 分析的是一小时以内这一段时间的负载情况。
用这个默认的不够灵活,而且浪费调试时间——我们总不能压一小时才能看结果吧?一般取压力高峰时的两个快照之间的几分钟就可以了。
数据库 DBA 用户登录 SQL shell(或者直接用 Oracle 客户端打开 sql 执行窗,如 SQL Developer),执行以下 sql:

SQL> exec dbms_workload_repository.create_snapshot();
匿名块已完成

隔几分钟后再执行一次,生成俩快照。
这个间隔时间越长约好,越能说明问题。

AWR报告其实就是一张数据库健康体检表,它显示了数据库健康的各项指标。 有针对整个数据库的AWR报告,有针对某个实例的AWR报告(在集群环境),有针对单条SQL语句的AWR报告。通过运行Oracle自带的SQL脚本产生AWR报告,只是产生不同的AWR报告,需要运行不同的脚本。

产生整个数据库的AWR报告,运行脚本awrrpt.sql

@$ORACLE_HOME/rdbms/admin/awrrpt.sql 

产生某个实例的AWR报告,运行脚本awrrpti.sql

@$ORACLE_HOME/rdbms/admin/awrrpti.sql 

产生某条SQL语句的AWR报告,运行脚本awrsqrpt.sql

@$ORACLE_HOME/rdbms/admin/awrsqrpt.sql 

$ORACLE_HOME代表Oracle的主目录直接echo即可显示路径

[oracle@pldb2 ~]$ echo $ORACLE_HOME
/oracle/app/oracle/product/11.2.0/dbhome_1
SQL> @/oracle/app/oracle/product/11.2.0/dbhome_1/rdbms/admin/awrrpt.sql

Current Instance
DB Id DB Name Inst Num Instance
----------- ------------ -------- ------------
3391761643 POWERDES 1 powerdes

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

Type Specified:  html


Instances in this Workload Repository schema
DB Id Inst Num DB Name Instance Host
------------ -------- ------------ ------------ ------------

3391761643 1 POWERDES powerdes pldb2
Using 3391761643 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 <return> without
specifying a number lists all completed snapshots.


Enter value for num_days: 2

Listing the last 2 days of Completed Snapshots

                                                        Snap
Instance     DB Name        Snap Id    Snap Started    Level
------------ ------------ --------- ------------------ -----
powerdes     POWERDES         38642 25 Dec 2017 00:00      1
                              38643 25 Dec 2017 01:00      1
                              38644 25 Dec 2017 02:00      1
                              38645 25 Dec 2017 03:00      1
                              38646 25 Dec 2017 04:00      1
                              38647 25 Dec 2017 05:00      1
                              38648 25 Dec 2017 06:00      1
                              38649 25 Dec 2017 07:00      1
                              38650 25 Dec 2017 08:00      1
                              38651 25 Dec 2017 09:00      1
                              38652 25 Dec 2017 10:00      1
                              38653 25 Dec 2017 11:00      1
                              38654 25 Dec 2017 12:01      1
                              38655 25 Dec 2017 13:00      1
                              38656 25 Dec 2017 14:01      1
                              38657 25 Dec 2017 15:00      1
                              38658 25 Dec 2017 16:00      1
                              38659 25 Dec 2017 17:00      1
                              38660 25 Dec 2017 18:00      1
                              38661 25 Dec 2017 19:00      1
                              38662 25 Dec 2017 20:00      1
                              38663 25 Dec 2017 21:00      1
                              38664 25 Dec 2017 22:00      1
                              38665 25 Dec 2017 23:00      1
                              38666 26 Dec 2017 00:00      1
                              38667 26 Dec 2017 01:00      1
                              38668 26 Dec 2017 02:00      1
                              38669 26 Dec 2017 03:00      1
                              38670 26 Dec 2017 04:00      1
                              38671 26 Dec 2017 05:00      1
                              38672 26 Dec 2017 06:00      1
                              38673 26 Dec 2017 07:00      1
                              38674 26 Dec 2017 08:00      1
                              38675 26 Dec 2017 09:00      1
                              38676 26 Dec 2017 10:00      1
                              38677 26 Dec 2017 11:00      1
                              38678 26 Dec 2017 12:00      1
                              38679 26 Dec 2017 13:00      1
                              38680 26 Dec 2017 14:00      1
                              38681 26 Dec 2017 15:00      1
                              38682 26 Dec 2017 16:00      1



Specify the Begin and End Snapshot Ids
Specify the Begin and End Snapshot Ids

Enter value for begin_snap: 38680
Begin Snapshot Id specified: 38680

Enter value for end_snap: 38682

Specify the Report Name
The default report file name is awrrpt_1_38680_38682.html. To use this name,
press <return> to continue, otherwise enter an alternative.

Enter value for report_name:
Using the report name awrrpt_1_38680_38682.html

查看14---16点的记录、输入文件名、也可直接回车,默认会产生以SnapId为名字的文件,回车以后会产生报表文件,位置在/home/oracle下面;

注意:输入报告名后回车出现 ORA-00904:: invalid identified value
解决办法:用sys用户来执行或者对用户进行授权

grant all on dbms_workload_repository to perfstat;


相关博文:

发表新评论