欢迎留言: | Guestbook |

ASH、AWR及AWR信息库备份与加载

ASH和AWR

oracle 10g中,ASH利用MMNL进程以每秒钟一次的频率,从内存中收集active session信息。session的信息可以从v$session视图查到,处于等待事件的信息被复制到v$session_wait中。

MMNL进程将收集到的信息保存在shared pool的一块固定大小可重用的缓存( fixed sized circular buffer )ASH buffers中。ASHbuffer的大小可以从v$sgastat视图查看:
SQL>select * from v$sgastat where name = 'ASH buffers';
根据metalink [243132.1]ASH buffer计算公式为 :
Size of ASH Circular Buffer = Max [Min [ #CPUs * 2 MB, 5% of Shared Pool Size, 30MB ], 1MB ]
也就是说ASH buffer大小根据系统CPU和shared pool size,最大值为30M,最小值是1M。
ASH buffer会尽量保持1小时的active session数据。
这部分buffer每隔一定时间被MMON进程采样写入AWR负载库(Automatic Workload Repository),生成快照。
查看默认采样时间为:
select snap_interval from dba_hist_wr_control;
另外当ASH buffer达到66%满的时候也会触发MMNL进程,将buffer中数据写入AWR负载库,可以通过隐含参数得到这个阀值:
SQL> select i.ksppinm name,i.ksppdesc description, cv.ksppstvl value
From sys.x$ksppi i,sys.x$ksppcv cv
where
i.inst_id=userenv('Instance') and
cv.inst_id=userenv('Instance') and
i.indx=cv.indx and
i.ksppinm = '_ash_eflush_trigger';
可以通过WRH$_ACTIVE_SESSION_HISTOR视图查看awr的快照信息。
需要注意的是,并不是所有的ASH buffer信息都会别写入到AWR负载库,默认情况下只写出采样比率的10%,并且为了减少对数据库性能的影响,采用direct-path insert完成。也可以通过参数statistics_level控制采样的精度。

 

 

备份、加载AWR负载库

通过AWR收集的信息,可以能够方便的判断系统的负载情况,对数据库做出诊断,利用这些数据还可以对数据库一段时间内运行情况的趋势变化进行分析。由于默认情况下只保留7天,如果想增加保留时间,则要么更改默认保留策略,要么将数据导出。

更改AWR默认保留策略:

 

1、查看AWR保留策略

select * from dba_hist_wr_control;

2、调整AWR保留策略,比如:调整为30分钟收集一次,保留5天

exec dbms_workload_repository.modify_snapshot_settings(interval=>30, retention=>5*24*60);

 导出AWR负载库数据:

oracle提供了两种方式对AWR负载库进行备份:

  • 利用脚本 $ORACLE_HOME/rdbms/admin/awrextr.sql
  • 利用DBMS_SWRF_INTERNAL.AWR_EXTRACT

备份时,需要先创建一个目录:

SQL>create or replace directory DUMP as '/data/dump';

执行脚本:

SQL>@?/rdbms/admin/awrextr.sql

或者

 

Begin

DBMS_SWRF_INTERNAL.AWR_EXTRACT (

dmpfile   => 'awr_data',

dmpdir    => 'DUMP',

bid       => 1,

eid       =>18);

end;

/

备份后在DUMP目录生成一个以dmp为后缀的备份文件和一个log文件,通过日志可以看出导出了201个WRH$开头的表(10.2.0.1版本),而导出文件格式也是和数据泵导出的文件一羊的。

导入AWR负载库

同样,备份后在其他数据库中加载时也可以有两种方式,利用脚本awrload.sql或者利用DBMS_SWRF_INTERNAL。
导入分两个过程,首先将数据导入到一个临时的schema中,然后将导入的数据转移到sys schema中。
当利用脚本awrload的时候,执行过程中会要求输入临时schema的名称和数据表空间及临时表空间,然后脚本自动创建临时schema、导入数据、迁移数据到sys、最后自动删除临时schema。
而利用dbms_swrf_internal时,则需要手动执行这两个两个步骤,比如:
导入数据到hr这个临时schema:

begin

DBMS_SWRF_INTERNAL.AWR_LOAD (

SCHNAME => 'HR',

dmpfile => 'awr_data',

dmpdir => 'DUMP');

end;

然后迁移数据到sys:

exec DBMS_SWRF_INTERNAL.MOVE_TO_AWR (SCHNAME => 'HR');

同样导入也在相应的目录下生成一个.log文件。导入过程中可以看到,最终将临时schema中数据迁移到sys schema下时,用的是append,不同数据库的awr 负载库信息用dbid区分。
这样就可以利用awrrpti脚本指定要生成报告的DBID,在本地很方便的生成和分析其他数据库的awr报告了。
注意,不可将awr负载库信息导出后再导入到原数据库中,相同的DBID导入不允许的,当然如果实验的话,也可以用nid修改dbname和dbid,从而实现导入。

 

 

 

相关文章:

One Response to “ASH、AWR及AWR信息库备份与加载”

Leave a Reply

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  • 网站分类

  • 最近发表

  • 最近留言

  • 最新评论及回复