首页 > 数据库 > Oracle > AWR的Snapshots讲解
1 Snapshots(快照)
前面操作报表生成时,snap 这个关键字已经出现过黑多黑多次了,想必你对它充满了 疑惑,这个东西是哪尬来的咋来的谁让它来的呢?事实上,Snap 是 Snapshot 的简写,这正 是 AWR 在自动性方面的体现,虽然你没有创建,但是 AWR 自动帮你创建了(当然也可以手 动创建 snapshot),并且是定时(每小时)创建,定期清除(保留最近 7 天)。
Snapshots 是一组某个时间点时历史数据的集合,这些数据就可被 ADDM(Automatic Database Diagnostic Monitor)用来做性能对比。默认情况下,AWR 能够自动以每小时一次的 频率生成 Snapshots 性能数据, 并保留 7 天,,如果需要的话, DBA 可以通过
DBMS_WORKLOAD_REPOSITORY 过程手动创建、删除或修改 snapshots。 提示:调用 DBMS_WORKLOAD_REPOSITORY 包需要拥有 DBA 权限。
1 手动创建 Snapshots
手动创建 Snapshots,通过 DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT
过程,例如:
SQL> exec dbms_workload_repository.create_snapshot();
PL/SQL procedure successfully completed.
然后可以通过 DBA_HIST_SNAPSHOT 视图查看刚刚创建的 Snapshots 信息。
2 手动删除 Snapshots
删 除 Snapshots 是使用 DBMS_WORKLOAD_REPOSITORY 包的另一个过程: DROP_SNAPSHOT_RANGE,该过程在执行时可以通过指定 snap_id 的范围的方式一次删除 多个 Snapshots,例如:
SQL> select count(0) from dba_hist_snapshot where snap_id between 7509 and 7518;
COUNT(0)
----------
10
SQL> begin
2 dbms_workload_repository.drop_snapshot_range(
3 low_snap_id => 7509,
4 high_snap_id => 7518,
5 dbid => 3812548755);
6 end;
7 /
PL/SQL procedure successfully completed.
SQL> select count(0) from dba_hist_snapshot where snap_id between 7509 and 7518;
COUNT(0)
----------
0
注意当 snapshots 被删除的话,与其关联的 ASH 记录也会级联删除。
3 修改 Snapshots 设置
通过 MODIFY_SNAPSHOT_SETTINGS 过程,DBA 可以调整包括快照收集频率、快照 保 存 时 间 、 以 及 捕 获 的 SQL 数 量 三 个 方 面 的 设 置 。 分 别 对 应
MODIFY_SNAPSHOT_SETTINGS 的三个参数:
? Retention:设置快照保存的时间,单位是分钟。可设置的值最小为 1 天,最大为 100 年。设置该参数值为 0 的话,就表示永久保留收集的快照信息。
? Interval:设置快照收集的频率,以分钟为单位。可设置的值最小为 10 分钟,最大
为 1 年。如果设置该参数值为 0,就表示禁用 AWR 特性。
? Topnsql:指定收集的比较占用资源的 SQL 数量,可设置的值最小为 30,最大不超
过 100000000。
查看当前快照收集的相关设置,可以通过 DBA_HIST_WR_CONTROL 视图查看,例如:
|
SQL> select * from dba_hist_wr_control; |
|
|
|
DBID SNAP_INTERVAL |
RETENTION |
TOPNSQL |
|
---------- ------------------------ -------------------- ---------- |
|
|
|
3812548755 +00000 01:00:00.0 |
+00007 00:00:00.0 |
DEFAULT |
又比如通过 MODIFY_SNAPSHOT_SETTTINGS 过程修改 snap_intrval 的设置:
SQL> exec dbms_workload_repository.modify_snapshot_settings(interval=>120);
PL/SQL procedure successfully completed.
SQL> select * from dba_hist_wr_control;
|
DBID SNAP_INTERVAL |
RETENTION |
TOPNSQL |
|
---------- ------------------------ -------------------- ---------- |
|
|
|
3812548755 +00000 02:00:00.0 |
+00007 00:00:00.0 |
DEFAULT |
2 Baselines(基线)
Baseline,直译的话叫做基线,顾名思义的方式理解,就是用于比较的基本线。因为 Baseline 中包含指定时间点时的性能数据,因此就可以用来与其它时间点时的状态数据做对 比,以分析性能问题。
创建 Baseline 时,Snapshots 是做为其中的一个组成部分存在,因此一般来说当 AWR 自动维护快照时,如果定义过 baseline,与 baseline 相关的快照不会被删除,即使是过期的 快照,这样就相当于手动保留了一份统计数据的历史信息,DBA 可以在适当的时间将其与 现有的快照进行对比,以生成相关的统计报表。
用户可以通过 DBMS_WORKLOAD_REPOSITORY 包中的相关过程,手动的创建或删
除 Baseline。
1 创建 Baseline
创建 Baseline 使用 CREATE_BASELINE 过程,执行该过程时分别指定开始和结果的 snap_id,然后为该 baseline 定义一个名称即可,例如:
SQL> BEGIN
2 DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(start_snap_id =>
7550,
|
3 |
end_snap_id => 7660, |
|
4 |
baseline_name => 'am_baseline'); |
5 END;
6 /
PL/SQL procedure successfully completed.
SQL> select dbid,baseline_name,start_snap_id,end_snap_id from dba_hist_baseline;
|
DBID BASELINE_NAME |
START_SNAP_ID END_SNAP_ID |
|
|
---------- -------------------- ------------- ----------- |
|
|
|
3812548755 am_baseline |
7550 |
7660 |
2 删除 Baseline
删除 Baseline 使用 DROP_BASELINE 过程,删除时可以通过 cascade 参数选择是否将
|
其关联的 Snapshots 级别进行删除,例如: |
|
|
|
SQL> BEGIN |
|
|
|
2 |
DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(baseline_name => |
|
|
'am_baseline', |
|
|
|
3 |
cascade |
=> true); |
4 END;
5 /
PL/SQL procedure successfully completed.
SQL> select * from dba_hist_baseline;
no rows selected
SQL> select * from dba_hist_snapshot where snap_id between 7550 and 7660;
no rows selected
如上例中所示,删除时指定了 cascade 参数值为 true,对应的 snap 也被级联删除了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1700919/viewspace-2120780/ ,如需转载,请注明出处,否则将追究法律责任。