Oracle的snapshot用来某一时刻数据库的CPU使用、内存使用、I/O读写等状态,Oracle 11g后,snapshot默认每1小时生成一次,在SYSAUX表空间中保留8天时间。
一、snapshot设置
通过 DBA_HIST_WR_CONTROL 视图可以看到当前 snapshot 的设置,
DBID:当前数据库ID号
SNAP_INTERVAL:快照生成间隔时间,如图为1小时生成一次
RETENTION:快照在SYSAUX表空间中维持时间,如图为8天
TOPNQL:快照中对性能消耗的排序取多少条SQL,DEFUAT为10条
调用 dbms_workload_repository.modify_shapshot_settings 可以对快照进行设置
(如图,修改snapshot维持时间为10天,每30分钟生成一次,注意单位都是min)
二、snapshot创建和删除
执行 exec dbms_workload_repository.create_snapshot() 可以手动创建snapshot;
创建完可以通过 dba_hist_snapshot 查看系统历史产生的 snapshot 和手动创建的 snapshot ;
执行 exec dbms_workload_repository.drop_shotsnap_range(low_snap_id=>XXX,high_snap_id=>XXX);
删除指定范围的shotsnap:
(如图删除snap_id为373的shotsnap)
三、BASELINE(基线)
BASELINE指一个快照范围,这个范围可以作为一个数据库状态的标准,用来产生AWR与数据库在其他
状态下的AWR作对比,创建baseline:
exec DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(start_snap_id=>XXX,end_snap_id=>XXX,
baseline_name=>XXX,dbid=>XXX, expiration=>XXX);
(只有一个实例可以不指定dbid,不指定expiration表示baseline永不过期)
通过查询 dba_hist_baseline可以查询创建的 baseline
删除baseline:
exec DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(baseline_name=>XXX,dbid=>XXX
casecade=>TURE or FLASE)
(当casecade为TURE时,删除baseline的同时删除baseline包含的shotsnap,
为FALSE或不指定时删除baseline,保留shotsnap)