生成系统正常期间内和故障期间内的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