签到成功

知道了

CNDBA社区CNDBA社区

DM7 达梦数据库 快照管理 及 生成 AWR 报告

2019-09-04 10:32 397 0 原创 DM 达梦
作者: Dave

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 包。https://www.cndba.cn/dave/article/3616

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:https://www.cndba.cn/dave/article/3616

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 结尾。https://www.cndba.cn/dave/article/3616

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;https://www.cndba.cn/dave/article/3616

方法 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

语法如下:https://www.cndba.cn/dave/article/3616

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 的属性值。

语法如下:https://www.cndba.cn/dave/article/3616

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
);

参数详解https://www.cndba.cn/dave/article/3616

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 之间。目前该参数不起作用。

https://www.cndba.cn/dave/article/3616

DBID:表示 SNAPSHOT 所在的 DB 唯一标识,默认为 NULL,表示当前 DB。目前该参数不起作用。https://www.cndba.cn/dave/article/3616

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:已启用https://www.cndba.cn/dave/article/3616

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>

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Dave

Dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 1750
    原创
  • 2
    翻译
  • 389
    转载
  • 97
    评论
  • 访问:2256272次
  • 积分:2618
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by ZhiXinTech · 皖ICP备19020168号·

        QQ交流群