微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ORACLE AWRAWR、SNAPSHOT、BASELINE


1. AWR是什么?

    AWR(Automatic Workload Repository)是存放oracle数据库历史性能数据的信息库,包含系统、session、sql等大量的统计数据,存放在SYSAUX表空间里,信息库包含很多表,都是以“WR”开头:WR元数据(WRM$),历史、可变数据(WRH$、WRR$和WRI$),顾问(advisor)功能相关的AWR表(WRI$)。另外,还可以通过DBA_HIST开头的视图访问AWR数据。
    最新的AWR信息存放在SGA中,认MMON进程每隔一小时启动slave进程m00x创建AWR snapshot,将数据保存在SYSAUX表空间。

2. 如何管理AWR?

2.1 启用AWR

    设置STATISTICS_LEVEL为TYPICAL或者ALL。
    如果STATISTICS_LEVEL为BASIC,AWR功能不会启用,但是可以通过使用DBMS_WORKLOAD_REPOSITORY包手工抓取AWR统计数据。

2.2 管理snapshot

2.2.1 关于snapshot

    AWR的数据是通过snapshot获取的。快照就是某一时刻系统的状态。认情况,数据库1小时收集一次snapshot,并在WR(Workload Repository)中保留8天(11g之后)。当然也可以手动创建和删除snapshot,主要使用DBMS_WORKLOAD_REPOSITORY包实现。

2.2.2 创建snapshot

    执行DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT()生成新的snapshot,通过DBA_HIST_SNAPSHOT视图可以查看已经存在的snapshot。

  1. BEGIN
  2. DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
  3. END;
  4. /

2.2.3 删除snapshot

认情况,AWR中的snapshot超过8天后会自动删除,但也可以手动删除,如下:

  1. BEGIN
  2. DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(
  3. low_snap_id => 22,
  4. high_snap_id => 32,
  5. dbid => 3310949047);
  6. END;
  7. /

2.2.4 修改snapshot设置

可以修改产生快照的时间间隔、保留期限、Top sql数量(interval、retention、topnsql),同时注意,修改后会影响oracle诊断工具的精度。如果要设置保留30天(43200分钟)、间隔30分钟、topsql取前100,如下所示:

  1. BEGIN
  2. DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
  3. retention => 43200,
  4. interval => 30,
  5. topnsql => 100,
  6. dbid => 3310949047);
  7. END;
  8. /
通过DBA_HIST_WR_CONTROL视图可以查看修改后的结果。

  1. sql> select snap_interval, retention from DBA_HIST_WR_CONTROL;
  2. SNAP_INTERVAL RETENTION
  3. ---------------------------------------
  4. +00000 01:00:00.0 +00008 00:00:00.0

2.3 管理baseline

2.3.1 关于baseline

baseline是一段特定时间内的snapshot的集合,当异常发生时,使用异常时间段的snapshot和baseline进行对比。baseline中的snapshot不受AWR retention的限制。

2.3.2 三类baseline

1.fixed baselines

固定基线就是由一段连续的固定的时间段内的快照生成的基线,所以选取的时间段应该是系统最优时段,代表系统最优水平,来作为性能对比的基准。
       2. moving window baselines
移动窗口基线包含AWR retention内的所有AWR数据,即由保留期内的所有快照生成。这对于自适应阈值有用,因为这样数据库可以使用AWR保留期内的所有数据来计算阈值。
oracle自动维护移动窗口基线,认窗口大小为当前AWR保留期。窗口大小可以重置,但必须小于等于AWR保留期,如果要增大移动窗口,AWR保留期也必须相应增大。所以,在使用自适应阈值时,可以设置为30天,以获得更准确的阈值。
       3. baseline templates
所谓基线模板,就是以后的基线都根据模板的配置生成,比如指定未来某个时间段,或者未来某个时期内的每周一的10:00-11:00。基线模板又分为单一基线模板(产生一次基线)、重复基线模板(产生多次基线)。
单一基线模板的例子:下周六09:00-11:00做测试,创建单一基线模板,到时自动收集AWR数据。
重复基线模板的例子:未来3个月每周周一上午09:00-11:00创建1个baseline。

2.3.3 创建baseline

认情况,oracle自动维护移动窗口基线,我们可以手工创建固定基线。如下。snap_id可以从DBA_HIST_SNAPSHOT视图中选取。

  1. BEGIN
  2. DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE (
  3. start_snap_id => 270,
  4. end_snap_id => 280,
  5. baseline_name => 'peak baseline',
  6. dbid => 3310949047,
  7. expiration => 30);
  8. END;
  9. /

2.3.4 删除baseline

为了节约磁盘空间,可以手工删除baseline,已经生成的baseline可以通过DBA_HIST_BASELINE视图查看。下面例子中删除peak baseline,保留相应的snapshot,如果要删除相关的snapshot,设置cascade为true。

  1. BEGIN
  2. DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE (baseline_name => 'peak baseline',
  3. cascade => FALSE,
  4. dbid => 3310949047);
  5. END;
  6. /

2.3.5 重命名baseline


  1. BEGIN
  2. DBMS_WORKLOAD_REPOSITORY.RENAME_BASELINE (old_baseline_name => 'peak baseline',
  3. new_baseline_name => 'peak mondays',
  4. dbid => 3310949047);
  5. END;
  6. /

2.3.6 重置移动窗口基线窗口大小

移动窗口基线认窗口大小与AWR保留期限相同,但也可以修改,但是不能超过AWR保留期限。下面例子将窗口设置为30天。

  1. BEGIN
  2. DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE (window_size => 30,
  3. dbid => 3310949047);
  4. END;
  5. /

2.3.7 创建单一基线模板

下面的例子比较简单,不做说明了。

  1. BEGIN
  2. DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
  3. start_time => to_date('2018-07-02 17:00:00','yyyy-mm-dd hh34:mi:ss'),
  4. end_time => to_date('2018-07-02 20:00:00','yyyy-mm-dd hh34:mi:ss'),
  5. baseline_name => 'baseline_180702',
  6. template_name => 'template_180702',
  7. expiration => 30,
  8. dbid => 3310949047);
  9. END;
  10. /

2.3.8 创建重复基线模板

下面的例子是从2018年7月2日17点开始,每周周一的17点至20点(duration=3)创建一个baseline,2018年12月02日20点template结束,不再创建以此为模板的baseline,创建的baseline失效期为30天。

  1. BEGIN
  2. DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
  3. day_of_week => 'monday',
  4. hour_in_day => 17,
  5. duration => 3, expiration => 30,
  6. start_time => to_date('2018-07-02 17:00:00','yyyy-mm-dd hh34:mi:ss'),
  7. end_time => to_date('2018-12-02 20:00:00','yyyy-mm-dd hh34:mi:ss'),
  8. baseline_name_prefix => 'baseline_2018_mondays_',
  9. template_name => 'template_2018_mondays',
  10. dbid => 3310949047);
  11. END;
  12. /

2.3.9 删除基线模板

基线模板名字可以冲DBA_HIST_BASELINE_TEMPLATE视图中选取。

  1. BEGIN
  2. DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE_TEMPLATE (
  3. template_name => 'template_180702',
  4. dbid => 3310949047);
  5. END;
  6. /

3. AWR报告是什么?

AWR报告就是利用两个snapshot来生成的一份数据库性能报告,包含的时两个snapshot之间的统计数据。当数据库出现性能问题时,可以用AWR报告进行分析定位。
生成不同AWR报告的脚本:

本实例AWR报告
@?/rdbms/admin/awrrpt  
RAC中选择实例号
@?/rdbms/admin/awrrpti   
AWR 比对报告
@?/rdbms/admin/awrddrpt
 RAC全局AWR报告
@?/rdbms/admin/awrgrpt


Reference:https://docs.oracle.com/en/database/oracle/oracle-database/18/tgdba/gathering-database-statistics.html#GUID-CBB1716F-2B20-4575-ADCE-94E33BEA53EF

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐