AWR 是Oracle 10g 版本推出的新特性,全称叫Automatic Workload Repository-自动负载信息库, AWR 是通过对比两次快,照(snapshot)收集到的统计信息,来生成报表数据,生成的报表包括多个部分。
设置AWR采样保留策略和采集频率
的采样历史数据默认保留7天,并且默认每1小时收集一次.
当前采样快照保留策略和采集频率可以通过下面的语句进行查询.下面显示的是 7 days and 1 hour
SQL> select to_char(snap_interval,’DD’),to_char(retention,’DD’) FROM dba_hist_wr_control;
TO_CHAR(SNAP_INTER TO_CHAR(RETENTION,
—————— ——————
+00000 01:00:00.0 +00007 00:00:00.0;
我们通过下面的方式来改变设置, 设置快照采集时间间隔为每 20 分钟一次 保留2天的历史数据. 参数指定的都是分钟.
begin
dbms_workload_repository.modify_snapshot_settings (
interval => 20,
retention => 2*24*60
);
end;
AWR相关的表
元数据 (WRM$)
历史数据 (WRH$)
AWR 报告相关的建议方法 (WRI$)
Oracle 11g 新特性的AWR相关信息(WRR$)
Workload Repository Reports
Oracle提供两个主要的脚本生产AWR报告 (awrrpt.sql and awrrpti.sql). 他们的格式和 statspack 报告非常相似, 提供 HTML 和 text 两种格式. 两个报告输出相同的格式但是 awrrpti.sql允许选择单个实例:
@$ORACLE_HOME/rdbms/admin/awrrpt.sql
@$ORACLE_HOME/rdbms/admin/awrrpti.sql
下面是经常使用到的脚本:
REPORT NAME SQL Script
Automatic Workload Repository Report awrrpt.sql
Automatic Database Diagnostics Monitor Report addmrpt.sql
ASH Report ashrpt.sql
AWR Diff Periods Report awrddrpt.sql
AWR Single SQL Statement Report awrsqrpt.sql
AWR Global Report awrgrpt.sql
AWR Global Diff Report awrgdrpt.sql
导出和导入 AWR 快照数据
AWR 数据存储在SYSAUX表空间的 WRH$ 和 DBA_HIST 表中 . 如果表增长的非常大,数据保存的时间长会影响数据库性能,因此默认只保留7天的历史数据.
一个比较好的解决方案是把AWR的数据转移到另一资料存储数据库中心, Oracle 提供了两个脚本 awrextr.sql and awrload.sql scripts可以把AWR数据迁移到
另一个数据库中。在 $ORACLE_HOME/rdbms/admin 目录下可以找到这两个脚本.
– in source db
SQL> @?/rdbms/admin/awrextr.sql
– in target db
SQL>@?/rdbms/admin/awrload.sql
或者
使用 oracle 内部包
dbms_swrf_internal.AWR_EXTRACT
DBMS_SWRF_INTERNAL.AWR_LOAD
DBMS_SWRF_INTERNAL.MOVE_TO_AWR
DBMS_SWRF_INTERNAL.CLEAR_AWR_DBID
清除 AWR
exec dbms_swrf_internal.unregister_database();
dbms_workload_repository.DROP_SNAPSHOT_RANGE;
禁用 Oracle AWR
如果想禁用AWR ,可以使用下面的方式禁用AWR,下面列出了详细的操作步骤.
1,设置 STATISTICS_LEVEL 参数为 BASIC.
2,执行 CATNOAWR.sql脚本删除相关的awr表. 这个脚本执行存储过程 procedure dbms_swrf_internal.remove_wr_control, 删除wrm$_wr_control 相关的数据和所有AWR 相关的表.
3,执行 DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(interval=>0):
4,从Metalink上下载 dbms_awr.plb 脚本, 执行 DBMS_AWR.DISABLE_AWR() [脚本参见 Metalink note 436386.1].
5,如果数据库是通过手工创建的,不是使用DBCA创建的不需要执行 CATAWRTB.sql .
6,设置_awr_restrict_mode = TRUE
重建 AWR
Oracle 建议我们重建 AWR,数据保存在 SYSAUX 表空间下:
alter system set sga_target=0 scope=spfile;
alter system set statistics_level = basic scope=both;
alter system set cluster_database=false;
shutdown immediate
startup restrict
– in 10g begin —
@?/rdbms/admin/catnoawr.sql
alter system flush shared_pool;
@?/rdbms/admin/catsvrm.sql –in the script had calls catawrtb.sql
– in 10g end —
– in 11g begin—
SQL> @?/rdbms/admin/catnoawr.sql
SQL> alter system flush shared_pool;
SQL> @?/rdbms/admin/catawr.sql
SQL> @?/rdbms/admin/utlrp.sql
sql> @?/rdbms/admin/execsvrm.sql
– in 11g end—
Then re-enable the AWR statistics gathering as required, by setting STATISTICS_LEVEL back to its original value, and restart the instance normally
Tip:
When SYSAUX tablespace is keep growing,you can check the V$SYSAUX_OCCUPANTS View to find out who/what is occupying space in SYSAUX.
: