大家好,这里是公众号 DBA学习之路,分享一些学习国产数据库路上的知识和经验。
社群交流
为了给大家提供一些技术交流的平台,目前已成立的技术交流群:
- Oracle 数据库交流群
- 国产数据库交流群
- Linux 技术交流群
- ChatGPT 4o 免费体验群
需要进群(均已超过 200 人,需要邀请)可以添加号主微信:Lucifer-0622,备注对应的群名即可。
目录
前言
经常有人在群里问这个问题:DM 有类似于 Oracle 的 AWR(Automatic Workload Repository)分析报告吗?
答案是:有。
AWR 介绍
数据库快照是一个只读的静态的数据库。DM 快照功能是基于数据库实现的,每个快照是基于数据库的只读镜像。通过检索快照,可以获取源数据库在快照创建时间点的相关数据信息。
为了方便管理自动工作集负载信息库 AWR(Automatic Workload Repository) 的信息,系统为其所有重要统计信息和负载信息执行一次快照,并将这些快照存储在 AWR 中。
用户在使用 DBMS_WORKLOAD_REPOSITORY 包之前,需要提前调用系统过程 SP_INIT_AWR_SYS(1) 创建包。DM 数据库在创建该包时,默认创建一个名为 SYSAUX 的表空间,对应的数据文件为 SYSAWR.DBF,该表空间用于存储该包生成快照的数据。如果该包被删除,那么 SYSAUX 表空间也对应地被删除。
AWR 功能默认是关闭的,如果需要开启,则调用 DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL 过程设置快照的间隔时间。DBMS_WORKLOAD_REPOSITORY 包还负责 snapshot(快照)的管理。
若创建数据库时页大小选择为 4K,不支持 DBMS_WORKLOAD_REPOSITORY 包的相关方法;DM MPP 环境下不支持 DBMS_WORKLOAD_REPOSITORY 包。
AWR 是否开启
达梦数据库是否开启 AWR 功能,可以通过以下方式查看:
-- 检查数据库 DBMS_WORKLOAD_REPOSITORY 系统包的启用状态,0:未启用;1:已启用
SQL> select sf_check_awr_sys;
SF_CHECK_AWR_SYS
----------------
0
-- 查看 awr 快照信息,未开启则没有这个视图
SQL> select * from sys.wrm$_snapshot;
select * from sys.wrm$_snapshot;
第1 行附近出现错误[-2106]:无效的表或视图名[WRM$_SNAPSHOT].
-- 查看表空间信息,是否存在 SYSAUX 表空间
SQL> select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
---------------
SYSTEM
ROLL
TEMP
MAIN
MAIN
通过以上结果可以确定,当前数据库未开启 AWR 功能。
开启 AWR 功能
开启 AWR 需要先创建数据库 DBMS_WORKLOAD_REPOSITORY 系统包:
-- 值为 1 创建 DBMS_WORKLOAD_REPOSITORY 包,0 为关闭
SQL> sp_init_awr_sys(1);
DMSQL 过程已成功完成
-- 检查 sys.wrm$_snapshot 视图是否存在
SQL> desc sys.wrm$_snapshot;
NAME TYPE$ NULLABLE
---------------------- ---------------------------- --------
SNAP_ID INTEGER N
DBID INTEGER Y
INSTANCE_NUMBER INTEGER Y
STARTUP_TIME DATETIME(6) Y
BEGIN_INTERVAL_TIME DATETIME(6) Y
END_INTERVAL_TIME DATETIME(6) Y
FLUSH_ELAPSED INTERVAL DAY(5) TO SECOND(1) Y
SNAP_LEVEL INTEGER Y
STATUS INTEGER Y
ERROR_COUNT INTEGER Y
BL_MOVED INTEGER Y
SNAP_FLAG INTEGER Y
SNAP_TIMEZONE INTERVAL DAY(1) TO SECOND(0) Y
BEGIN_INTERVAL_TIME_TZ DATETIME(6) WITH TIME ZONE Y
END_INTERVAL_TIME_TZ DATETIME(6) WITH TIME ZONE Y
-- 检查 SYSAUX 表空间是否创建
SQL> select tablespace_name,file_name from dba_data_files where tablespace_name='SYSAUX';
TABLESPACE_NAME FILE_NAME
--------------- -------------------------
SYSAUX /dmdata/DAMENG/SYSAWR.DBF
SYSAUX 表空间用来存放该包生成的快照数据。
达梦数据库开启 AWR 功能,需要调用 dbms_workload_repository.awr_set_interval 过程设置快照间隔时间:
-- 快照间隔时间的有效范围为【10,525600】,默认为 60,单位为分钟,这里我设置为 30 分钟,关闭快照间隔值设定 0 即可
SQL> dbms_workload_repository.awr_set_interval(30);
DMSQL 过程已成功完成
-- 查看快照配置信息
SQL> select * from sys.wrm$_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL STATUS_FLAG
----------- ----------------------------------------- ---------------------------------------- ----------- -----------
NULL INTERVAL '0 0:30:0.0' DAY(5) TO SECOND(1) INTERVAL '8 0:0:0.0' DAY(5) TO SECOND(1) 30 1
-- 修改快照保留时间可以使用以下命令,半小时=30分钟 分钟,7 天=10800 分钟
SQL> dbms_workload_repository.modify_snapshot_settings(10800,30);
DMSQL 过程已成功完成
-- 手工创建快照
-- 创建快照有两种方法,一种是系统按照设定的快照属性自动生成,一种是手动生成,手动生成快照使用 create_snapshot 方法
-- 注意:dbms_workload_repository.create_snapshot(); 传入的参数为 FLUSH_LEVEL,值为 ALL 或者TYPICAL,默认为 TYPICAL,ALL 表示全部历史快照数据在创建快照是全部保存,而 TYPICAL 则只会保存部分数据。
SQL> dbms_workload_repository.create_snapshot();
DMSQL 过程已成功完成
-- 查看快照信息
SQL> select SNAP_ID,DBID,INSTANCE_NUMBER,STARTUP_TIME,BEGIN_INTERVAL_TIME,END_INTERVAL_TIME,status from sys.wrm$_snapshot;
SNAP_ID DBID INSTANCE_NUMBER STARTUP_TIME BEGIN_INTERVAL_TIME END_INTERVAL_TIME STATUS
----------- ----------- --------------- -------------------------- -------------------------- -------------------------- -----------
1 NULL 1 2024-10-29 11:31:40.000000 2024-11-06 16:15:46.937024 2024-11-06 16:15:47.524466 NULL
2 NULL 1 2024-10-29 11:31:40.000000 2024-11-06 16:26:03.802089 2024-11-06 16:26:04.503231 NULL
可以看到,快照已经生成了,AWR 功能已经成功开启。
生成 AWR 报告
达梦数据库生成快照报告有 2 种格式,分别为 HTML 格式和 TEXT 格式,每种格式有两种生成报告的方法:
- HTML
- awr_report_html
- sys.awr_report_html
- TEXT
- awr_report_txt
- sys.awr_report_txt
下面主要演示生成 HTML 报告:
-- 这种方式直接输出报告内容,需要人为复制保存为 html 文件查看
SQL> select * from table (dbms_workload_repository.awr_report_html(1,2));
OUTPUT
--------------------------------------------------------------------
<html><head><title>AWR Report for DB: DAMENG, Inst: DMSERVER, Snaps: 1-2</title>
...
...
...
-- 这种方式直接生成 html 报告
SQL> sys.awr_report_html(1,2,'/home/dmdba','dmawr_1_2.html');
DMSQL 过程已成功完成
查看生成的 html 报告:
[dmdba@dm8:~]$ ll /home/dmdba/dmawr_1_2.html -rw-r--r-- 1 dmdba dinstall 412585 11月 6 16:28 /home/dmdba/dmawr_1_2.html
查看 AWR 报告
使用网页打开生成的达梦数据库 AWR 报告(以下截取部分报告内容):






更多报告内容可自行生成查看。
AWR 拓展
这里总结了一些 AWR 相关的命令:
- awr_clear_history():清理之前的所有 snapshot 记录。
- awr_set_interval():设置生成 snapshot 的时间间隔。
- awr_report_html:生成 html 格式的报告。
- awr_report_text:生成 text 格式的报告。
- create_snapshot:创建一次快照 snapshot。
- drop_snapshot_range:删除 snapshot。
- modify_snapshot_settings:设置 snapshot 的属性值。
写在最后
达梦 AWR 和 Oracle AWR 颇为相似,实际使用效果还有待观察,还需要大量的场景进行检验,如果你有这方面的使用经验,欢迎投稿!
如果有遗漏或者不足的地方,欢迎评论区补充或者投稿,感谢阅读!
往期精彩文章
达梦数据库安装最详细教程
一招教你学会达梦数据库的免密登录
一文讲透达梦数据库的大小写敏感
效率翻倍!达梦数据库 disql 使用技巧全攻略
达梦数据库参数配置与一键优化指南
达梦 AWR 报告快速上手指南
金仓数据库 KingbaseES V9 单机安装指南
KingbaseES KSQL 免密登录的几种方式
KingbaseES 控制文件冗余与恢复秘籍
南大通用 GBASE 8s V8.8 数据库最全安装指南
GBase 8s GDCA 认证课后练习题大全(题库)
GBase 8s 数据库巡检报告及一键巡检脚本
YashanDB 一键生成 AWR 报告
YashanDB 数据库安装部署




