很多朋友把AWR报告发过来让我帮忙分析Oracle数据库的性能,但很多报告都有一个共同的缺陷:就是这些报告覆盖的时间范围太广,导致性能问题的数据被严重稀释。
英文原文:Script: Generating Focused AWR Reports
为了解决这个问题,我开发了下面的脚本。如果您没有明确需求指定特定的诊断时间段,可以使用此脚本从两个维度缩小诊断时间范围:
- 只覆盖高峰时段: 该脚本自动识别出工作负载最高的快照ID,并生成覆盖这个快照的AWR报告。通过聚焦于负载最高的时间段,可以更清晰地查看潜在的性能问题。
- 单实例报告: 在多实例环境中,该脚本为每个实例单独生成AWR报告,而不是生成覆盖所有实例的单个数据库范围报告。这种方法有助于定位特定于每个实例的问题,这些问题在查看聚合报告时可能会被掩盖。
这个脚本自动生成的AWR报告会保存在/tmp目录下,文件名中包括实例名和生成时间便于识别。
-- This script generates AWR reports for the peak time over the past back_days (defaulted to 7 days).
-- Dated July 2024
-- Author: Yuan Yao
CREATE OR REPLACE DIRECTORY tmp AS '/tmp/';DECLAREback_days NUMBER := 7; -- Customize the number of back days herepeak_id NUMBER;my_dbid NUMBER;today VARCHAR2(30);awr_dir VARCHAR2(40) := 'TMP';awr_file UTL_FILE.FILE_TYPE;awr_file_name VARCHAR2(60);
BEGIN-- Get the peak snap_idSELECT snap_idINTO peak_idFROM (SELECT snap_id, average, end_timeFROM dba_hist_sysmetric_summaryWHERE average = (SELECT MAX(average)FROM dba_hist_sysmetric_summaryWHERE metric_name = 'Average Active Sessions'AND end_time > SYSDATE - back_days))WHERE ROWNUM = 1;-- Get the DBIDSELECT dbidINTO my_dbidFROM v$database;-- Get the current date and timeSELECT TO_CHAR(SYSDATE, 'YYYY_MON_DD_HH24_MI')INTO todayFROM dual;-- Loop through each instance in the RAC environmentFOR instance_rec IN (SELECT instance_number, instance_name FROM gv$instance) LOOPawr_file_name := 'awr_' || today || '_' || instance_rec.instance_name || '.html';awr_file := UTL_FILE.FOPEN(awr_dir, awr_file_name, 'w');-- Generate the AWR report in HTML format for each instanceFOR curr_awr IN (SELECT outputFROM TABLE(dbms_workload_repository.awr_report_html(my_dbid,instance_rec.instance_number,peak_id - 1, peak_id,0)))LOOPUTL_FILE.PUT_LINE(awr_file, curr_awr.output);END LOOP;UTL_FILE.FCLOSE(awr_file);END LOOP;EXCEPTIONWHEN OTHERS THENIF UTL_FILE.IS_OPEN(awr_file) THENUTL_FILE.FCLOSE(awr_file);END IF;RAISE;
END;
/
下面的例子是为两个实例的数据库生成的AWR报告:
[oracle@rac19c1 tmp]$ ls -lrt
...
-rw-r--r-- 1 oracle asmadmin 1084024 Jul 31 10:43 awr_2024_JUL_31_10_42_orcl2.html
-rw-r--r-- 1 oracle asmadmin 1117641 Jul 31 10:43 awr_2024_JUL_31_10_42_orcl1.html
号主在certview.oracle.com网站上面的证书截屏: