1.创建DBMS_WORKLOAD_REPOSITORY系统包
- 查看DBMS_WORKLOAD_REPOSITORY系统包启用状态
SQL> SELECT SF_CHECK_AWR_SYS;LINEID SF_CHECK_AWR_SYS
---------- ----------------
1 0
SF_CHECK_AWR_SYS 返回值
0:未启用;1:已启用
- 删除DBMS_WORKLOAD_REPOSITORY系统包
SQL> SP_INIT_AWR_SYS(0);
DMSQL executed successfullySQL> SELECT SF_CHECK_AWR_SYS;LINEID SF_CHECK_AWR_SYS
---------- ----------------
1 0
- 创建DBMS_WORKLOAD_REPOSITORY系统包
SQL> SP_INIT_AWR_SYS(1);
DMSQL executed successfully
SQL> SELECT SF_CHECK_AWR_SYS;LINEID SF_CHECK_AWR_SYS
---------- ----------------
1 1
用户在使用 DBMS_WORKLOAD_REPOSITORY 包之前,需要提前调用系统过程 SP_INIT_AWR_SYS(1)创建包。DM 数据库在创建该包时,默认创建一个名为 SYSAUX 的表空间,对应的数据文件为 SYSAWR.DBF,该表空间用于存储该包生成快照的数据。如果该包被删除,那么 SYSAUX 表空间也对应地被删除。
SQL> select tablespace_name from dba_tablespaces;LINEID TABLESPACE_NAME
---------- ---------------
1 SYSTEM
2 ROLL
3 TEMP
4 MAIN
5 SYSAUX
6 MAIN6 rows gotSQL> select * from SYS.WRM$_WR_CONTROL;LINEID DBID SNAP_INTERVAL RETENTION TOPNSQL STATUS_FLAG
---------- ----------- ---------------------------------------- ---------------------------------------- ----------- -----------
1 NULL INTERVAL '0 1:0:0.0' DAY(5) TO SECOND(1) INTERVAL '8 0:0:0.0' DAY(5) TO SECOND(1) 30 0
STATUS_FLA
AWR 状态(1:开启;0:关闭)
AWR 功能默认是关闭的,如果需要开启,则调用 DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL 过程设置快照的间隔时间。DBMS_WORKLOAD_REPOSITORY 包还负责 snapshot(快照)的管理。
2.开启AWR功能
- 调用 DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL 过程设置快照的间隔时间
STATUS_FLA值为变为1。即为开启AWR功能。
SQL> CALL DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL(10);
DMSQL executed successfullySQL> select * from SYS.WRM$_WR_CONTROL;LINEID DBID SNAP_INTERVAL RETENTION TOPNSQL STATUS_FLAG
---------- ----------- ----------------------------------------- ---------------------------------------- ----------- -----------
1 NULL INTERVAL '0 0:10:0.0' DAY(5) TO SECOND(1) INTERVAL '8 0:0:0.0' DAY(5) TO SECOND(1) 30 1
AWR_INTERVAL
时间间隔。单位分钟,取值范围为 10~525600,缺省值为 60。参数为 0 时,关闭快照(关闭时参数值为 57816000 分钟(110 年),是一个无效的值)。
RETENTION
快照保留时间由快照信息管理表 WRM$_WR_CONTROL 中 RETENTION 列决定,RETENTION 列默认为 8 天,可以使用 MODIFY_SNAPSHOT_SETTINGS 接口进行修改。每次创建新的快照创建新的分区子表前对当前所有快照进行扫描,找到已过期的快照。
3.调整AWR快照保留时间(可选)
默认snapshot 的保留时间为 8 天、间隔时间为 60分钟。
修改 snapshot 的保留时间为 1 天(1440分钟)、间隔时间为 30 分钟。参数单位均为分钟。
SQL> CALL DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(1440,30);
DMSQL executed successfullySQL> SELECT * FROM SYS.WRM$_WR_CONTROL;LINEID DBID SNAP_INTERVAL RETENTION TOPNSQL STATUS_FLAG
---------- ----------- ----------------------------------------- ---------------------------------------- ----------- -----------
1 NULL INTERVAL '0 0:30:0.0' DAY(5) TO SECOND(1) INTERVAL '1 0:0:0.0' DAY(5) TO SECOND(1) 30 1
4.创建AWR快照
- 手动创建快照:
SQL> DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
DMSQL executed successfullySQL> SELECT * FROM SYS.WRM$_SNAPSHOT;LINEID SNAP_ID DBID INSTANCE_NUMBER STARTUP_TIME BEGIN_INTERVAL_TIME END_INTERVAL_TIME SNAP_LEVEL
---------- ----------- ----------- --------------- -------------------------- ------------------- -------------------------- -----------
1 1 NULL 1 2025-01-14 11:32:07.000000 NULL 2025-01-15 18:16:25.000000 1
2 2 NULL 1 2025-01-14 11:32:07.000000 NULL 2025-01-15 18:19:13.000000 1
5.收集AWR报告
两种收集AWR方式
- DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML
查看 snapshot 的 id 在 1~2 范围内的 AWR 分析报告的带 html 格式的内容。
然后复制到文本文件中,保存成 html 格式即可查看。
SQL> set pages 5000
SQL> SELECT * FROM TABLE (DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(1,2));
- SYS.AWR_REPORT_HTML(推荐,方便)
把 snapshot 的 id 在 1~2 范围内的 AWR 分析报告生成到/home/dmdba/DM_AWR_1_2.HTML 文件。
SQL> SYS.AWR_REPORT_HTML(1,2,'/home/dmdba','dm_awr_1_2.html');
DMSQL executed successfully
6.清理AWR快照
- 过期快照定期删除
快照保留时间由快照信息管理表 WRM$_WR_CONTROL 中 RETENTION 列决定,RETENTION 列默认为 8 天,可以使用 MODIFY_SNAPSHOT_SETTINGS 接口进行修改。每次创建新的快照创建新的分区子表前对当前所有快照进行扫描,找到已过期的快照。
2.指定快照范围删除
删除快照范围之前创建的 snapshot
SQL> CALL DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(1,2);
DMSQL executed successfully
上述删除快照的方式均会将待删除快照存入中间表 SYS.WRM_SNAPSHOT_D,并立即对SYS.WRM_SNAPSHOT 表中待删除快照的数据进行 DELETE。
每间隔 11min 会对中间表 SYS.WRM_SNAPSHOT_D中存储的快照ID对应的快照信息表中的分区子表进行DROP,且经过系统purge时间后对应空间会真正释放。DROP操作结束后将已删除的快照从中间SYS.WRM_SNAPSHOT_D 中进行 DELETE。
3.对全部快照进行删除
调用接口 AWR_CLEAR_HISTORY,对全部快照信息表先进行 TRUNCATE 操作释放空间,再对表进行 DROP 操作。删除后再执行对全部信息表的重建操作,同时对中间表 SYS.WRM_SNAPSHOT_D与SYS.WRM_SNAPSHOT 表进行数据清理。
SQL> CALL DBMS_WORKLOAD_REPOSITORY.AWR_CLEAR_HISTORY();
DMSQL executed successfully
SQL> SELECT * FROM SYS.WRM$_SNAPSHOT;
no rows
SQL> CALL DBMS_WORKLOAD_REPOSITORY.AWR_CLEAR_HISTORY();
DMSQL executed successfully
SQL> SELECT * FROM SYS.WRM$_SNAPSHOT;
no rows