达梦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 1302点的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、设置时间间隔

(只能用1020,不能用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报告

 

方法2job 处理:通过以方法,可精准清理历史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报告。

posted @ 2025-04-07 16:18  feiyun8616  阅读(100)  评论(0)    收藏  举报