1快照概述
数据库快照是一个只读的静态的数据库。DM 快照功能是基于数据库实现的,每个快照是基于数据库的只读镜像。通过检索快照,可以获取源数据库在快照创建时间点的相关数据信息。
为了方便管理自动工作集负载信息库 AWR(Automatic Workload Repository)的信息,系统为其所有重要统计信息和负载信息执行一次快照,并将这些快照存储在 AWR 中。
AWR 功能默认是关闭的,如果需要开启,则调用DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL 过程设置快照的间隔时间。DBMS_WORKLOAD_REPOSITORY 包还负责 snapshot(快照)的管理。
DM 数据库在创建该包时,默认创建一个名为 SYSAUX 的表空间,对应的数据文件为SYSAWR.DBF,该表空间用于存储该包生成快照的数据。如果该包被删除,那么 SYSAUX 表空间也对应地被删除。
DM MPP 环境下不支持 DBMS_WORKLOAD_REPOSITORY 包。
1.1 AWR 相关的方法
1.AWR_CLEAR_HISTORY():清理之前的所有 snapshot 记录。
2.AWR_SET_INTERVAL():设置生成 snapshot 的时间间隔。
语法:PROCEDURE AWR_SET_INTERVAL(AWR_INTERVAL IN INT DEFAULT 60);
这里就一个参数:AWR_INTERVAL: 时间间隔,单位分钟。有效范围为 [10, 525600],默认值为 60。参数为 0 时,关闭快照(关闭时参数值为 40150 分钟(110 年),是一个无效的值)。
3.AWR_REPORT_HTML:生成 html 格式的报告
方法 1:
FUNCTION AWR_REPORT_HTML(
START_SNAP_ID IN INT,
END_SNAP_ID IN INT)
RETURN AWRRPT_ROW_TYPE PIPELINED;
输入起始和终止ID即可,返回包含报告的全部 html 脚本信息的嵌套表类型 AWRRPT_ROW_TYPE。 把 awr 数据报表生成到指定路径的 html 文件。
方法 2:
PROCEDURE SYS.AWR_REPORT_HTML(
START_ID IN INT,
END_ID IN INT,
DEST_DIR IN VARCHAR(128),
DEST_FILE IN VARCHAR(128)
);
参数详解
START_ID 为起始 SNAPSHOT_ID。
END_ID 为终止 SNAPSHOT_ID。
DEST_DIR 为指定生成报告的目标路径。
DEST_FILE 为指定生成报告的目标文件名,文件名需要以.HTM 和.HTML 结尾。
4. AWR_REPORT_TEXT:生成 text 格式的报告
方法 1:
FUNCTION AWR_REPORT_TEXT(
START_SNAP_ID IN INT,
END_SNAP_ID IN INT
) RETURN AWRRPT_ROW_TYPE PIPELINED;
方法 2:
PROCEDURE SYS.AWR_REPORT_TEXT(
START_ID IN INT,
END_ID IN INT,
DEST_DIR IN VARCHAR(128),
DEST_FILE IN VARCHAR(128)
);
5. CREATE_SNAPSHOT:创建一次快照 snapshot
语法如下:
FUNCTION CREATE_SNAPSHOT(
FLUSH_LEVEL IN VARCHAR2 DEFAULT ‘TYPICAL’
) RETURN INT;
参数说明:
FLUSH_LEVEL:’TYPICAL’ OR ‘ALL’;如果为空,则默认为’TYPICAL’,该值会影响快照生成数据的大小,如果是’ALL’,则将全部历史数据保存,如果是’TYPICAL’则会刷部分数据。
6. DROP_SNAPSHOT_RANGE:删除 snapshot。
语法如下:
PROCEDURE DROP_SNAPSHOT_RANGE(
LOW_SNAP_ID IN INT,
HIGH_SNAP_ID IN INT,
DBID IN INT DEFAULT NULL
);
参数详解
LOW_SNAP_IDSNAP_ID 范围的起始值。 HIGH_SNAP_IDSNAP_ID 范围的结束值。 DBID 表示 SNAPSHOT 所在的 DB 唯一标识,默认为 NULL,表示当前 DB,目前该参数不起作用。
7. MODIFY_SNAPSHOT_SETTINGS:设置 snapshot 的属性值。
语法如下:
PROCEDURE MODIFY_SNAPSHOT_SETTINGS(
RETENTION IN INT DEFAULT NULL,
AWR_INTERVAL IN INT DEFAULT NULL,
TOPNSQL IN INT DEFAULT NULL,
DBID IN INT DEFAULT NULL
);PROCEDURE MODIFY_SNAPSHOT_SETTINGS(
RETENTION IN INT DEFAULT NULL,
AWR_INTERVAL IN INT DEFAULT NULL,
TOPNSQL IN VARCHAR2,
DBID IN INT DEFAULT NULL
);
参数详解
RETENTION:表示 SNAPSHOT 在数据库中保留的时间,以分钟为单位,最小值为 1 天,最大值为 100年;如果值为 0,则表示永久保留;如果值为 NULL,则表示本次设置的该值无效,保留以前的旧值。
AWR_INTERVAL:表示每次生成 SNAPSHOT 的间隔时间,以分钟为单位,最小值为 10 分钟,最大值为 1年;如果值为 0,则 SNAPSHOT 会失效。如果值为 NULL,则表示本次设置的该值无效,保留以前的旧值。TOPNSQL:如果为 NULL,则保留当前设置的值。
1)如果为 INT 类型,则表示按照 SQL 的衡量标准(执行时间,CPU 时间,消耗内存等)获取保存的 SQL 个数,最小值为 30,最大值为 50000。
2)如果为 VARCHAR2 类型,则可以设置如下 3 个值:DEFAULT、MAXIMUM 和 N。DEFAULT对应值为 100;MAXIMUM 对应值为 50000;值 N 是数字串,但要求转化为 INT 类型之后,值必须在 30 至 50000 之间。目前该参数不起作用。DBID:表示 SNAPSHOT 所在的 DB 唯一标识,默认为 NULL,表示当前 DB。目前该参数不起作用。
1.2 创建、检测、删除语句
1)SP_INIT_AWR_SYS(CREATE_FLAG int):创建或删除 DBMS_WORKLOAD_REPOSITORY 系统包。
参数CREATE_FLAG:为 1 时表示创建 DBMS_WORKLOAD_REPOSITORY 包;为 0 表示删除该系统包。2)SF_CHECK_AWR_SYS():系统的 DBMS_WORKLOAD_REPOSITORY 系统包启用状态检测。
返回值:0:未启用;1:已启用
2 操作示例
#查看AWR系统包的状态
[dave@www.cndba.cn ~]$ disql SYSDBA/SYSDBA
Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 9.303(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT
Connected to: DM 7.1.6.95
#返回为0,表示未启用:
SQL> Select SF_CHECK_AWR_SYS ();
LINEID SF_CHECK_AWR_SYS()
---------- ------------------
1 0
#创建DBMS_WORKLOAD_REPOSITORY包:
SQL> call sp_init_awr_sys(1);
DMSQL executed successfully
used time: 379.019(ms). Execute id is 4.
SQL>
#设置快照生成间隔时间,默认是60分钟,我这里设置成10分钟:
SQL> call dbms_workload_repository.awr_set_interval(10);
DMSQL executed successfully
used time: 15.603(ms). Execute id is 5.
SQL>
#手工创建快照:
SQL> call dbms_workload_repository.create_snapshot();
DMSQL executed successfully
used time: 53.258(ms). Execute id is 21.
SQL>
#查看快照信息d:
SQL> SELECT snap_id,startup_time FROM SYS.WRM$_SNAPSHOT;
LINEID SNAP_ID STARTUP_TIME
---------- ----------- ---------------------------
1 1 2029-03-07 09:51:33.000000
2 2 2029-03-07 09:51:33.000000
used time: 0.845(ms). Execute id is 31.
SQL>
#生成AWR报告:根据前面的说明有2种方法,一个是函数,一个是存储过程:
#1) 调用函数:返回的内容是网页的源码,需要自己将内容复制到html文件中,比较麻烦:
select * from table (dbms_workload_repository.awr_report_html(1,2));
#2)调用存储过程,直接生成html页面,推荐使用这种:
SQL> sys.awr_report_html(1,2,'/tmp','awr1_2.html');
DMSQL executed successfully
used time: 246.815(ms). Execute id is 35.
SQL>
[dave@www.cndba.cn ~]$ ll /tmp/awr1_2.html
-rw-r--r-- 1 dmdba dinstall 127240 Mar 7 10:14 /tmp/awr1_2.html
[dave@www.cndba.cn ~]$
#查看AWR属性值
SQL> select * from sys.wrm$_wr_control;
LINEID DBID SNAP_INTERVAL RETENTION TOPNSQL STATUS_FLAG
---------- ----------- ----------------------------------------------- ----------------------------------------------- ----------- -----------
1 NULL INTERVAL '00000 00:10:00.0' DAY(5) TO SECOND(1) INTERVAL '00008 00:00:00.0' DAY(5) TO SECOND(1) 30 1
used time: 1.377(ms). Execute id is 38.
SQL>
#删除快照
SQL> SELECT snap_id,startup_time FROM SYS.WRM$_SNAPSHOT;
LINEID SNAP_ID STARTUP_TIME
---------- ----------- ---------------------------
1 1 2029-03-07 09:51:33.000000
2 2 2029-03-07 09:51:33.000000
3 3 2029-03-07 09:51:33.000000
4 4 2029-03-07 09:51:33.000000
5 5 2029-03-07 09:51:33.000000
used time: 1.524(ms). Execute id is 42.
SQL> call dbms_workload_repository.drop_snapshot_range(4,5);
DMSQL executed successfully
used time: 22.015(ms). Execute id is 43.
SQL> SELECT snap_id,startup_time FROM SYS.WRM$_SNAPSHOT;
LINEID SNAP_ID STARTUP_TIME
---------- ----------- ---------------------------
1 1 2029-03-07 09:51:33.000000
2 2 2029-03-07 09:51:33.000000
3 3 2029-03-07 09:51:33.000000
used time: 0.790(ms). Execute id is 44.
SQL>
#修改 snapshot 的间隔时间为 30 分钟、保留时间为 1 天。
SQL> call dbms_workload_repository.modify_snapshot_settings(1440,30);
DMSQL executed successfully
used time: 8.918(ms). Execute id is 45.
SQL> select * from sys.wrm$_wr_control;
LINEID DBID SNAP_INTERVAL RETENTION TOPNSQL STATUS_FLAG
---------- ----------- ----------------------------------------------- ----------------------------------------------- ----------- -----------
1 NULL INTERVAL '00000 00:30:00.0' DAY(5) TO SECOND(1) INTERVAL '00001 00:00:00.0' DAY(5) TO SECOND(1) 30 1
used time: 2.813(ms). Execute id is 46.
SQL>
#清理全部 snapshot。
SQL> call dbms_workload_repository.awr_clear_history();
DMSQL executed successfully
used time: 28.080(ms). Execute id is 47.
SQL> SELECT snap_id,startup_time FROM SYS.WRM$_SNAPSHOT;
no rows
used time: 0.820(ms). Execute id is 48.
SQL>
#设置 snapshot 的间隔为 10 分钟。
SQL> call dbms_workload_repository.awr_set_interval(10);
DMSQL executed successfully
used time: 12.315(ms). Execute id is 49.
SQL> select * from sys.wrm$_wr_control;
LINEID DBID SNAP_INTERVAL RETENTION TOPNSQL STATUS_FLAG
---------- ----------- ----------------------------------------------- ----------------------------------------------- ----------- -----------
1 NULL INTERVAL '00000 00:10:00.0' DAY(5) TO SECOND(1) INTERVAL '00001 00:00:00.0' DAY(5) TO SECOND(1) 30 1
used time: 1.106(ms). Execute id is 50.
SQL>
版权声明:本文为博主原创文章,未经博主允许不得转载。