How to Generate AWR Differences Report

生成系统正常期间内和故障期间内的AWR性能数据比较报告,可能可以帮助我们更加简单的定位问题所在。

可以通过awrddrpt.sql脚本生成。

SQL> @?/rdbms/admin/awrddrpt.sql

脚本会要求输入需要比较的第一份和第二份AWR报告的起始结束Snap ID,生成的AWR报告基本上如下图所示。

在普通的AWR报告各个部分都增加了1st, 2nd以及%Diff,这表示第一份时,第二份时各自的情况以及两次的相差百分比。

如果我们因为某些原因(比如权限问题)无法读取awrddrpt.sql,那么也可以通过DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_TEXT函数来完成。

DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_TEXT(
   dbid1     IN NUMBER,
   inst_num1 IN NUMBER,
   bid1      IN NUMBER,
   eid1      IN NUMBER,
   dbid2     IN NUMBER,
   inst_num2 IN NUMBER,
   bid2      IN NUMBER,
   eid2      IN NUMBER)
  RETURN awrdrpt_text_type_table PIPELINED;

dbid通过以下SQL获取。

SQL> select DBID from v$database;
 
      DBID
----------
 777920305

inst_num通过以下SQL获得。

SQL> select instance_number from v$instance;
 
INSTANCE_NUMBER
---------------
              1

bid和eid分别是Begin Snap ID和End Snap ID,通过以下SQL获得。

SQL> select snap_id, end_interval_time
  2  from dba_hist_snapshot
  3  where end_interval_time > trunc(sysdate-1)
  4  order by snap_id;
 
   SNAP_ID END_INTERVAL_TIME
---------- --------------------------------------------------------------------------------
       377 25-FEB-10 01.10.10.657 PM
       378 25-FEB-10 02.00.21.884 PM
       379 25-FEB-10 04.49.00.861 PM

将上述获得值全部作为参数值传入AWR_DIFF_REPORT_TEXT函数,执行即可。由于输出结果较长,使用spool打印到文件中方便查看。

SQL>spool awrdiff_1_377_1_378.txt
SQL> select * from 
  2  TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_TEXT(777920305,1,377,378,
  3  777920305,1,378,379));
SQL>spool off

Leave a Reply

Your email address will not be published. Required fields are marked *