【正确答案】AWR(Automatic Workload Repository,自动负载信息库)是Oracle 10g引入的一个重要组件。在AWR里面存储着近一段时间内(Oracle 10g默认是7天,Oracle 11g及其之后的版本默认是8天)数据库活动状态的详细信息。
AWR报告是对AWR视图进行查询而得到的一份自动生成的报告,它用于显示两个快照或者两个时间点之间捕提到的数据。AWR报告其实就是一张数据库健康体检表,它显示了数据库健康的各项指标。通过AWR报告,DBA可以容易地获知数据库最近的活动状态,数据库的各种性能指标的变化趋势曲线,数据库最近可能存在的异常,分析数据库可能存在的性能瓶颈,从而对数据库进行优化。AWR使用几个表来存储采集的统计数据,所有的表都存储在新的名称为SYSAUX的特定表空间中的SYS模式下,并且以WRM$*和WRH$*的格式命名。前一种类型存储元数据信息(如检查的数据库和采集的快照),后一种类型保存实际采集的统计数据。H代表“历史数据(Historical)”,M代表“元数据(Metadata)”。在这些表上构建了几种带前缀DBA_HIST_*的视图,这些视图可以用来编写自己的性能诊断工具。视图的名称直接与表相关;例如,视图DBA_HIST_SYSMETRIC_SUMMARY是在WRH$_SYSMETRIC_SUMMARY表上构建的。AWR报告所有的数据来源于AWR视图,即以DBA_HIST开头的所有系统表。
AWR的前身是Statspack,Statspack在Oracle 10g和Oracle 11g中也有提供,同时和AWR一起进行了同步更新,而且Statspack是公开源代码的,因此,关于Statspack的资料和源代码,都是理解AWR的一个有用的辅助工具。
AWR主要是由MMON(Manageability Monitor Process,可管理性监视器进程)和它的slave进程(Mnnn)来维护的。MMON执行很多关于AWR的任务和各种与可管理性相关的后台任务,具体包括以下功能:
1)启动slave进程Mnnn去做AWR快照。
2)当某个测量值(metrics)超过了其度量阀值(threshold value)时发出alert告警。
3)为最近改变过的SQL对象捕获指标信息。
若系统不能自动生成AWR快照,则可以从以下几个方面去检查:
①参数STATISTICS_LEVEL的值必须设置为TYPICAL或者ALL。
②在“SELECT SNAP_INTERVAL FROM DBA_HIST_WR_CONTROL;”的查询结果中,SNAP_NTERVAL的值不能无穷大,一般为1h,可以通过执行如下的SQL语句来修改自动生成AWR快照的时间间隔:EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS (NTERVAL=>60);。
③在SQL语句“SELECT D.rNSTANCE_NUMBER, (SYSDATE-D.END_INTERVAL_TIME) INTERVAL FROM DBA_HIST_SNAPSHOT D WHERE D.SNAP_ID=(SELECT MAX(SNAP_ID) FROM DBA_HIST_SNAPSHOT);”的查询结果中,NTERVAL列的值需大于0,若小于0,则可以手动生成几次快照来解决这个问题,SQL语句为:EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();。需要注意的是,在RAC环境下该命令会对数据库的所有节点都生成一次快照。
④检查MMON进程是否HANG住,若MMON进程暂停,则AWR不可用。
【答案解析】