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。
-
BEGIN
-
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
-
END;
-
/
2.2.3 删除snapshot
默认情况,AWR中的snapshot超过8天后会自动删除,但也可以手动删除,如下:
-
BEGIN
-
DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(
-
low_snap_id => 22,
-
high_snap_id => 32,
-
dbid => 3310949047);
-
END;
-
/
2.2.4 修改snapshot设置
可以修改产生快照的时间间隔、保留期限、Top Sql的数量(interval、retention、topnsql),同时注意,修改后会影响oracle诊断工具的精度。如果要设置保留30天(43200分钟)、间隔30分钟、topsql取前100,如下所示:
-
BEGIN
-
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
-
retention => 43200,
-
interval => 30,
-
topnsql => 100,
-
dbid => 3310949047);
-
END;
-
/
通过
DBA_HIST_WR_CONTROL视图可以查看修改后的结果。
-
SQL> select snap_interval, retention from DBA_HIST_WR_CONTROL;
-
SNAP_INTERVAL RETENTION
-
---------------------------------------
-
+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视图中选取。
-
BEGIN
-
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE (
-
start_snap_id => 270,
-
end_snap_id => 280,
-
baseline_name => 'peak baseline',
-
dbid => 3310949047,
-
expiration => 30);
-
END;
-
/
2.3.4 删除baseline
为了节约磁盘空间,可以手工删除baseline,已经生成的baseline可以通过DBA_HIST_BASELINE视图查看。下面例子中删除peak baseline,保留相应的snapshot,如果要删除相关的snapshot,设置cascade为true。
-
BEGIN
-
DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE (baseline_name => 'peak baseline',
-
cascade => FALSE,
-
dbid => 3310949047);
-
END;
-
/
2.3.5 重命名baseline
-
BEGIN
-
DBMS_WORKLOAD_REPOSITORY.RENAME_BASELINE (old_baseline_name => 'peak baseline',
-
new_baseline_name => 'peak mondays',
-
dbid => 3310949047);
-
END;
-
/
2.3.6 重置移动窗口基线窗口大小
移动窗口基线默认窗口大小与AWR保留期限相同,但也可以修改,但是不能超过AWR保留期限。下面例子将窗口设置为30天。
-
BEGIN
-
DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE (window_size => 30,
-
dbid => 3310949047);
-
END;
-
/
2.3.7 创建单一基线模板
下面的例子比较简单,不做说明了。
-
BEGIN
-
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
-
start_time => to_date('2018-07-02 17:00:00','yyyy-mm-dd hh34:mi:ss'),
-
end_time => to_date('2018-07-02 20:00:00','yyyy-mm-dd hh34:mi:ss'),
-
baseline_name => 'baseline_180702',
-
template_name => 'template_180702',
-
expiration => 30,
-
dbid => 3310949047);
-
END;
-
/
2.3.8 创建重复基线模板
下面的例子是从2018年7月2日17点开始,每周周一的17点至20点(duration=3)创建一个baseline,2018年12月02日20点template结束,不再创建以此为模板的baseline,创建的baseline失效期为30天。
-
BEGIN
-
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
-
day_of_week => 'monday',
-
hour_in_day => 17,
-
duration => 3, expiration => 30,
-
start_time => to_date('2018-07-02 17:00:00','yyyy-mm-dd hh34:mi:ss'),
-
end_time => to_date('2018-12-02 20:00:00','yyyy-mm-dd hh34:mi:ss'),
-
baseline_name_prefix => 'baseline_2018_mondays_',
-
template_name => 'template_2018_mondays',
-
dbid => 3310949047);
-
END;
-
/
2.3.9 删除基线模板
基线模板名字可以冲DBA_HIST_BASELINE_TEMPLATE视图中选取。
-
BEGIN
-
DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE_TEMPLATE (
-
template_name => 'template_180702',
-
dbid => 3310949047);
-
END;
-
/
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