1.AWR信息的修改
缺省的,数据库每小时采样一次AWR数据,保留7天,这些定义是可以被修改的。DBA可以通过DBMS_WORKLOAD_REPOSITORY包来控制AWR的行为。
通过如下执行可以手工创建AWR采样点,在进行测试时,在测试前后进行手工采样可以帮助我们获得完善的测试性能数据:
SQL> exec dbms_workload_repository.create_snapshot(); PL/SQL procedure successfully completed.
复制
创建的采样点,可以通过DBA_HIST_SNAPSHOT视图来查询。
除了手工创建采样点之外,数据库也允许我们手工删除采样点,这可以通过DBMS_WORKLOAD_REPOSITORY 包中的DROP_SNAPSHOT_RANGE过程来实现,该过程需要一个采样范围输入,然后删除指定范围内的AWR采样信息:
SQL> select snap_id from DBA_HIST_SNAPSHOT where rownum < 6; SNAP_ID ---------- 3860 3886 3887 3888 3889 SQL> exec dbms_workload_repository.drop_snapshot_range(low_snap_id=>3860,high_snap_id=>3889); PL/SQL procedure successfully completed. SQL> select snap_id from DBA_HIST_SNAPSHOT where rownum < 6; SNAP_ID ---------- 3890 3891 3892 3893 3894
复制
通过MODIFY_SNAPSHOT_SETTINGS 过程,还可以调整包括快照采样频率、快照保存时间、以及捕获的SQL 数量等信息。MODIFY_SNAPSHOT_SETTINGS 主要包含三个输入参数:
PROCEDURE MODIFY_SNAPSHOT_SETTINGS Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- RETENTION NUMBER IN DEFAULT INTERVAL NUMBER IN DEFAULT TOPNSQL NUMBER IN DEFAULT DBID NUMBER IN DEFAULT
复制
其含义分别如下:
- Retention:设置快照保存的时间,单位是分钟,最小值为1 天,最大值为100年。如果该参数值设置为0 ,则表示永久保留快照信息。
- Interval:设置快照的收集频率,以分钟为单位,最小值为10 分钟,最大值为1 年。如果设置该参数值为0,就表示禁用AWR 特性。
- Topnsql:有两种方式指定该参数,如果给定值为NUMBER,则其含义为收集比较占用资源的SQL 数量,最小值为30,最大不超过100000000,这个设置会覆盖系统的statistics/flush 级别设置;如果这个参数设置为VARCHAR2,则允许的定义有: DEFAULT, MAXIMUM, N,这里的N同样指采样的Top SQL数量,DEFAULT参数受statistics level 影响,在TYPICAL设置下,采样Top 30,在ALL设置下采样Top 100 ,如果定义MAXIMUM 将引起系统采样和捕获所有的SQL。
如,修改采样间隔:
SQL> exec dbms_workload_repository.modify_snapshot_settings(interval=>120); PL/SQL procedure successfully completed. SQL> select * from dba_hist_wr_control; DBID SNAP_INTERVAL RETENTION TOPNSQL ---------- ------------------------------ -------------------- ---------- 2310943069 +00000 02:00:00.0 +00007 00:00:00.0 DEFAULT
复制
同时修改采样间隔为30分钟,保留周期15天(时间以分钟计算):
SQL> exec dbms_workload_repository.modify_snapshot_settings(interval=>30, retention=>15*24*60); PL/SQL procedure successfully completed.
复制
2.AWR报告的生成
根据AWR记录的数据,我们可以通过报告来展现这些信息。报告可以通过运行脚本生成类似statspack report的AWR报告,也可以通过Package直接输出。
脚本位于$ORACLE_HOME/rdbms/admin/awrrpt.sql,报表可以通过两种形式输出:TEXT和HTML。用脚本生成AWR报告的过程与生成Statspack报告非常类似,需要以sys用户执行这个脚本,执行过程需要选择报表类型、天数(用来决定显示那几天内的snapshot)、begin_snap、end_snap以及报表名称等5个参数。
如果不想手工输入参数,可以修改$ORACLE_HOME/rdbms/admin/awrrpti.sql文件,把需要用到的5个变量设置好,在执行过程中就不必再输入了,修改过的awrrpti.sql脚本可以用于自动生成报表。
以下是一个报告生成的简单示范过程,首先Oracle会要求我们指定报告类型:
SQL> @?/rdbms/admin/awrrpt Current Instance ~~~~~~~~~~~~~~~~ DB Id DB Name Inst Num Instance ----------- ------------ -------- ------------ 3243092624 SMSBOSS 1 smsboss 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: text Type Specified: text
复制
定义文件格式之后,数据库会要求输入报告包含采样的时间段:
Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host ------------ -------- ------------ ------------ ------------ * 3243092624 1 SMSBOSS smsboss db480-6 Using 3243092624 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
复制
如果定义为2天之内,则2天之内的采样都会被列出供用户选择:
Listing the last 2 days of Completed Snapshots Snap Instance DB Name Snap Id Snap Started Level ------------ ------------ --------- ------------------ ----- smsboss SMSBOSS 10735 15 Mar 2007 00:01 1 10736 15 Mar 2007 01:00 1 10737 15 Mar 2007 02:00 1 10738 15 Mar 2007 03:00 1 。。。。。。。。。。 10750 15 Mar 2007 15:00 1 10751 15 Mar 2007 16:00 1 10752 15 Mar 2007 17:00 1 10753 15 Mar 2007 18:00 1 Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enter value for begin_snap: 10735 Begin Snapshot Id specified: 10735 Enter value for end_snap: 10750 End Snapshot Id specified: 10750
复制
完成类似问题的回答后,报告生成。
awrrpt.sql脚本实际上是调用DBMS_WORKLOAD_REPOSITORY包来生成报表,这个包中主要有两个函数用于生成报表:
- DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT用于生成TEXT格式报表;
- DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML用于生成HTML格式报表。
例如,以下命令将和之前的定义等价:
select * from table(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(3243092624,1,10735,10756));
复制