AWR,自动工作负载信息库,是Oracle 10g内置的类似Statspack的信息采集和性能分析工具。AWR的使用非常简单方便,还可以导出采集数据至其他数据库进行分析。虽然使用上很简单, 但作为一个性能分析利器,它丝毫不逊于Statspack。唯一遗憾的是AWR没有well-documented,Oracle的官方文档并没有给出详 细的说明。这里介绍一下简单的用法。

要使用AWR必须设置STATISTICS_LEVEL参数,共有三个:BASIC,TYPICAL,ALL。如果设为BASIC将禁用许多特性,如ADDM。安装Oracle 10g后,默认值是TYPICAL。

AWR的统计数据默认保留7天,并且每小时获取一次快照。

SQL> col snap_interval for a30
SQL> col retention for a30
SQL> select snap_interval, retention
2  from   dba_hist_wr_control;

SNAP_INTERVAL                  RETENTION
------------------------------ ------------------------------
+00000 01:00:00.0              +00007 00:00:00.0

当然,你可以修改快照时间和保留时间:

begin
dbms_workload_repository.modify_snapshot_settings (
interval => 20,
retention => 2*24*60
);
end;

你也可以手工运行快照,或者删除快照,具体可以参考DBMS_WORK_LOAD_REPOSITORY的使用说明。Oracle已经提供几个SQL用于分析,常用的有:

$ORACLE_HOME/rdbms/admin/addmrpt.sql
$ORACLE_HOME/rdbms/admin/awrinfo.sql
$ORACLE_HOME/rdbms/admin/awrrpt.sql
$ORACLE_HOME/rdbms/admin/awrrpti.sql
$ORACLE_HOME/rdbms/admin/awrinput.sql

其中awrinfo.sql提供AWR的基本信息,如大小,数据分布等。它不是设计用来分析实例运行情况的,已经有专门的程序来提供这些功能,如awrrpt.sql。AWR的采集数据可以导出成data pump文件,用于传输到其他数据库进行分析。比如客户将采集数据提交给专业人士进行分析。

begin
DBMS_SWRF_INTERNAL.AWR_EXTRACT (
dmpfile   => 'awr_data.dmp',
dmpdir    => 'TMP_DIR',
bid       => 302,
eid       => 305
);
end;

begin
DBMS_SWRF_INTERNAL.AWR_LOAD (
SCHNAME => 'ARUP',
dmpfile => 'awr_data.dmp',
dmpdir  => 'TMP_DIR'
);
end;

也可以使用Oracle提供的两个脚本进行导出/导入:

$ORACLE_HOME/rdbms/admin/awrextr.sql
$ORACLE_HOME/rdbms/admin/awrload.sql

较之于Statspack,AWR是Oracle推荐的性能分析工具,应该好好利用。