Oracle Awr Tables

http://blog.sina.com.cn/s/blog_70179c420100m61k.html
AWR的使用 (2009-07-23 11:12:57)转载▼
标签: 杂谈 分类: MSN搬家
以前在看Oracle方面的书籍时,总会将新特性部分的章节快速跳过,以至于10G以后有了AWR这个诊断工具都不知道,功能类似于statspack,但使用起来比statspack要简化了很多。接触AWR之前,先看一下10G以后会话信息的保存发生了哪些改变,在10G以前,用户的连接会话信息v$session中,处于等待状态的会话信息会被复制一份放在v$session_wait中,当连接断开后,那么这些信息就会在v$session和v$session_wait中删除。普通会话的信息对于DBA来讲没有太大的兴趣,可是如果当时的活动会话占据了很多的系统资源,那就会成为被关注的焦点了,此时如果信息丢失了,那么对于DBA来讲,很难评测系统当时的状况。
10G以后出现了v$session_wait_history,这个视图保存每个session在v$session_wait中最近10次的等待事件,其实对于诊断一段时期的数据库来讲,10次仍然是不够的,10G以后还引入了一个视图,v$active_session_history,简称ASH,ASH的策略是保存处于等待状态的活动session信息,每秒从v$session_wait中采样一次并保存在内存中,但保存在内存中的信息当内存被占满,或者在数据库重启后都会消失,因而无法永久保留。
接下来要进入正题了,AWR(Auto Workload Repository)的出现解决了session信息保存的问题,AWR的策略是每小时对ASH进行采样一次,并将信息保存在磁盘中,保留7天,这些采样信息记录在wrh$_active_session_history中,1小时和7天都是默认的,可以进行调整,可以使用包dbms_workload_repository进行定义。
总结一下,ASH保存了系统最新的处于等待的会话记录,可以用来诊断数据库的当前状态,AWR中的信息最长有1小时的延迟,所以不能诊断当前状态,但可以作为一段时期内数据库性能评测的参考。
AWR保存的信息存放于sysaux表空间,并非只有wrh$_active_session_history这一个视图,还包含很多以wrh$或wrm$开头的视图,例如
select table_name from dba_tables where table_name like 'WRM%' or table_name like 'WRH%'
TABLE_NAME


WRH$_FILESTATXS_BL
WRH$_TEMPSTATXS
WRH$_DATAFILE
WRH$_TEMPFILE
……
WRH$_TABLESPACE_STAT
WRH$_SERVICE_STAT
WRH$_SERVICE_WAIT_CLASS
WRH$_INTERCONNECT_PINGS

121 rows selected.

但是当sysaux表空间占满后,AWR将自动覆盖掉旧的信息,并在alert.log里记录一条相关信息:
ORA-1688: unable to extend table SYS.WRH$_ACTIVE_SESSION_HISTORY……in tablespace SYSAUX

采样频率和保留时间可以查询dba_hist_wr_control或wrm$_wr_control获得,AWR的行为受初始化参数statistics_level控制,参数有3个值,分别为:
basic:awr统计的计算和衍生值关闭,只收集少量的数据库统计信息;
typical:默认值,只有部分的统计收集,代表需要的典型监控oracle数据库的行为;
all:所有可能的统计都捕捉,并且有操作系统的一些信息。

例如:
SQL> show parameter statistics_level

NAME TYPE VALUE
-------- --- ------
statistics_level string TYPICAL

AWR由oracle自动产生快照,也可以通过dbms_workload_repository包手工创建、删除和修改,例如:
SQL> begin
2 dbms_workload_repository.create_snapshot();
3 end;
4 /

SQL> begin
2 dbms_workload_repository.drop_snapshot_range(low_snap_id => 96, high_snap_id => 96, dbid => 1160732652);
3 end;
4 /

修改采集时间和统计信息保留时间,可以修改interval和retention参数,例如:
SQL> exec dbms_workload_repository.modify_snapshot_settings(interval=>30, retention=>5*24*60);
这样就修改为半小时生成一次快照,保留周期为5天。

最后该到生成AWR报告的时候了,与statspack非常类似,使用脚本awrrpt.sql或awrrpti.sql,都存放于$ORACLE_HOME/rdbms/admin/目录中,可以存为html或文本文件,当不止一个实例,而需要指定DBID时,使用awrrpti.sql,其余情况使用awrrpt.sql。