达梦AWR
DM AWR工具使用实践
1、检查数据库版本
select build_version from SYS."V$INSTANCE" UNION ALL
select id_code;
目的是验证备份IO 消耗情况
BCSS是在5.2.10.17:5211 上,1点半备份,大概15分钟
BCSS是在17上,1点半备份,大概15分钟
做一个58.2.10.17:5288 ,3/14 日1点30到2点的AWR 报告
2、检查AWR是否启用
select sf_check_awr_sys;
0:未启用
1:已启用
3、启用AWR
sp_init_awr_sys(1); --启用
sp_init_awr_sys(1);
[-2124]:Object [DBMS_WORKLOAD_REPOSITORY] already exists
-2124: anonymous block line 16 .
used time: 00:00:01.245. Execute id is 0.
如果出现上面报错,先停用
sp_init_awr_sys(0); --停用
启用后默认会创建一个SYSAUX的表空间,对应的数据文件是SYSAWR.DBF
sp_init_awr_sys(1);
DMSQL executed successfully
used time: 00:00:01.389. Execute id is 1543212010.
select sf_check_awr_sys;
LINEID SF_CHECK_AWR_SYS
---------- ----------------
1 1
4、设置时间间隔
(只能用10,20,不能用30分钟)
DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL(20);
select * from sys."WRM$_SNAPSHOT"; ---查询所有AWR报告生成信息
#删除ID在1-10之间的snapshot
#DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(1,10);
保留4天,生成间隔时间20分钟,建议做这个:
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(14400,20); ---设置AWR报告,保留时间 (1440*保留天数10天)、生成间隔时间
#说明 调整表空间大小,自动新建的表空间文件初始大小跟最大大小一致,系统日志后续会有异常报错,调整MAX_SIZE 大于初始大小即可
(10G 表空间4天消耗6G,10天消耗18G)
alter tablespace "SYSAUX" datafile 'SYSAWR.DBF' autoextend on maxsize 32240;
#DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(5760,20);
封装的脚本如下:
sp_init_awr_sys(0);
sp_init_awr_sys(1);
select sf_check_awr_sys;
DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL(20);
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(14400,20);
alter tablespace "SYSAUX" datafile 'SYSAWR.DBF' autoextend on maxsize 32240;
5、手动收集AWR报告
dbms_workload_repository.create_snapshot();
重复执行
6、检查AWR报告
select * from sys.wrm$_snapshot;
方法 1:使用 disql 变量替换 (disql 版本在202407版本才支持变量输入输出替换,低版本不支持变量输入输出替换)
disql -id
DM Database 64 V8 03134284194-20240703-234060-20108
封装的Awr脚本如下:
COLUMN end_id NEW_VALUE v_end_id
COLUMN start_id NEW_VALUE v_start_id
ACCEPT start_time DATE FORMAT 'yyyy-mm-dd hh24:mi:ss' PROMPT '请输入时间(格式:yyyy-mm-dd hh24:mi:ss):'
ACCEPT end_time DATE FORMAT 'yyyy-mm-dd hh24:mi:ss' PROMPT '请输入时间(格式:yyyy-mm-dd hh24:mi:ss):'
COLUMN start_id NEW_VALUE v_start_id
SELECT min(snap_id) as start_id
FROM sys.wrm$_snapshot
WHERE end_interval_time >= TO_DATE('&start_time', 'YYYY-MM-DD HH24:MI:SS')
AND end_interval_time <= TO_DATE('&end_time', 'YYYY-MM-DD HH24:MI:SS');
SELECT max(snap_id) as end_id
FROM sys.wrm$_snapshot
WHERE end_interval_time >= TO_DATE('&start_time', 'YYYY-MM-DD HH24:MI:SS')
AND end_interval_time <= TO_DATE('&end_time', 'YYYY-MM-DD HH24:MI:SS');
SET ECHO OFF;
SET FEED OFF;
SET HEA OFF;
SET LINESHOW OFF;
SET NEWP 0;
SET PAGES 0;
SET TIMING OFF;
Spool /tmp/awr.txt
SELECT * FROM TABLE (DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(&v_start_id,&v_end_id));
Spool OFF
封装的Awr脚本如下:
7、生产AWR报告
end_interval_time
2025-03-14 10:20:29
2025-03-14 10:40:29
sanp_id
40
42
--windows 报错,提示文件位置无效
call sys.awr_report_text(40,42,'D:\tmp','AWR20240325.txt')
call sys.awr_report_text(40,42,'D:\\tmp\\','AWR20240325.txt');
;
[执行语句1]:
call sys.awr_report_text(40,42,'D:\tmp\','AWR20240325.txt');
执行失败(语句1)
-20125: 文件位置无效
call sys.awr_report_text(40,42,'D:/tmp/','AWR20240325.txt');
执行失败(语句1)
-20125: 文件位置无效
-20125: AWR_REPORT_TEXT line 33
尝试在LINXU 下运行,不输出目录,可以运行
5 、生成awr报告,快照范围1-2,格式html
SELECT * FROM TABLE (DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(1,2));
或者
SYS.AWR_REPORT_HTML(1,2,‘/home/dmdba/’,‘AWR1_2.HTML’);
如果需要这个报错 [-6108]:String truncated,将html 改成text;
SET ECHO OFF;
SET FEED OFF;
SET HEA OFF;
SET LINESHOW OFF;
SET NEWP 0;
SET PAGES 0;
SET TIMING OFF;
Spool awr.txt
SELECT * FROM TABLE (DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(99,100));
Spool OFF
或者
SET ECHO OFF;
SET FEED OFF;
SET HEA OFF;
SET LINESHOW OFF;
SET NEWP 0;
SET PAGES 0;
SET TIMING OFF;
Spool awr.txt
SYS.AWR_REPORT_TEXT(1,2,‘/home/dmdba/’,‘AWR1_2.TEXT’);
Spool OFF
call sys.awr_report_html(1,3,'/home/dmdba','AWR20240325.HTML');
AWR内容如下所示
8、清理AWR报告
dbms_workload_repository.awr_clear_history(); --清理所有的历史快照信息
dbms_workload_repository.drop_snapshot_range(1,2); --清理指定快照之间的AWR报告
方法2:job 处理:通过以下方法,可精准清理历史AWR数据,避免存储空间过度占用。若需进一步优化AWR配置(如调整快照保留策略),可参考达梦官方文档。
封装的脚本如下:
CREATE OR REPLACE PROCEDURE DAILY_DROP_AWR_SNAPSHOT AS
BEGIN
DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(
LOW_SNAP_ID => (SELECT MIN(SNAP_ID) FROM sys.wrm$_snapshot WHERE END_INTERVAL_TIME <= SYSDATE - 9),
HIGH_SNAP_ID => (SELECT MAX(SNAP_ID) FROM sys.wrm$_snapshot WHERE END_INTERVAL_TIME <= SYSDATE - 9)
);
END;
/
--每天22点跑一次
begin
dbms_job.isubmit(1,'DAILY_DROP_AWR_SNAPSHOT',TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM-DD') || ' 22:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'TRUNC(SYSDATE + 1) + 22/24');
commit;
end;
9、查看快照配置信息
select * from sys."WRM$_WR_CONTROL";
快照生成时间间隔是1小时
保留时间为8天
10、修改快照配置信息
示例:
快照生成时间间隔是2小时,保留时间为6天
单位分钟:2小时=120分钟
6天=8640分钟
dbms_workload_repository.modify_snapshot_settings(8640,120);
修改后,如下图所示。
##附录:
为啥要开启AWR 报告
一、建议开启AWR的核心场景
性能监控与基线建立
AWR可周期性采集数据库负载(如CPU、IO、锁等待、SQL执行时间等),帮助建立性能基线,快速定位突发的性能劣化。例如,当出现慢查询激增时,通过对比历史快照可追溯源头。
疑难问题复现与分析
若数据库偶发死锁、CPU飙升等问题,AWR快照能记录异常时段的系统状态(如Top 5等待事件、高消耗SQL),为事后分析提供完整数据支撑。
长期优化规划
AWR报告中的趋势数据(如缓存命中率变化、表空间增长)可辅助容量规划与硬件升级决策。
二、开启AWR的注意事项
资源与存储成本
AWR默认创建SYSAUX表空间并生成数据文件SYSAWR.DBF,初始为10GB且会扩展,需提前评估存储空间。
快照采集频率建议设置为30-60分钟,避免高频采集导致性能开销。
功能限制
MPP环境不支持AWR,集群场景需改用其他监控工具。
页大小为4K的库无法启用AWR,需在建库时选择8K/16K/32K页大小。
维护管理
定期清理过期快照:
sql
CALL DBMS_WORKLOAD_REPOSITORY.AWR_CLEAR_HISTORY();
监控SYSAUX表空间使用率,避免因AWR数据占满磁盘。
三、替代方案与补充工具
短期诊断场景
若不需历史数据追踪,可使用实时视图替代:
V$SYSSTAT:查看累计性能指标(如物理读写次数)
V$SQL_HISTORY:分析近期高消耗SQL
第三方监控集成
结合Prometheus+Granfana等工具,通过达梦的ODBC/JDBC接口采集指标,实现可视化监控。
四、总结建议
生产环境建议开启:长期运行的系统需依赖AWR进行深度性能分析,建议设置快照间隔为1小时,保留7天数据。
测试/开发环境可选:若资源有限,可仅在问题复现时临时开启。
规避风险:避免在页大小4K或MPP架构中强制启用,否则会引发兼容性问题。
通过合理配置,AWR能显著提升运维效率。若需具体操作步骤(如生成HTML报告),可参考:如何生成AWR报告。

浙公网安备 33010602011771号