数据库运维的关键工作之一是排查SQL执行效率。开启达梦SVR_LOG审计参数后,数据库会留存所有运行SQL并生成日志文件。DmLog作为适配达梦的轻量化解析工具,可自动汇总日志信息,筛选高耗时、高频调用的SQL语句,为语句优化提供完整数据支撑。
该工具适配DM7、DM8两大主流达梦版本,仅实现日志指标统计展示,无法自动生成SQL优化建议。软件基于Java开发,安装包体积不到10MB,部署Java运行环境后,可在Windows、Linux系统跨平台启动运行。
工具读取本地SQL审计日志,批量写入内置实例的log_commit数据表,依托数据库完成数据聚合、筛选、排序计算,最终输出Excel分析报表,方便运维人员定位性能问题。
SP_SET_PARA_VALUE(1,'SVR_LOG',1); #调用达梦系统存储过程,修改1号实例的SVR_LOG参数值为1。在线打开全量SQL审计日志功能,无需停机。
SELECT SF_GET_PARA_VALUE(1,'SVR_LOG')UNION ALL
SELECT SF_GET_PARA_VALUE(2,'SVR_LOG'); #把两条查询结果拼接在一起,一次性查看多实例日志开关是否成功开启。
SELECT PARA_NAME,PARA_VALUE FROM V$DM_INI WHERE PARA_NAME IN
('SVR_LOG','SQL_TRACE_MASK'); #通过系统静态视图V$DM_INI,核对两项日志核心配置参数。
SP_REFRESH_SVR_LOG_CONFIG(); #执行系统存储过程,热重载日志配置。
可在控制台工具里进行修改:
也可在dm.ini进行修改:
使用工具前需完成Java环境部署,软件可跨Windows、Linux系统运行,优先选用JDK1.8:
[dmdba@localhost ~]$ java -version
openjdk version "1.8.0_402"
OpenJDK Runtime Environment Bisheng (build 1.8.0_402-b06)
OpenJDK 64-Bit Server VM Bisheng (build 25.402-b06, mixed mode)
解压:
[root@localhost dmlog]# unzip DMLOG8.182.zip
Archive: DMLOG8.182.zip
creating: DMLOG8.182/
extracting: DMLOG8.182/dmlog.properties
extracting: DMLOG8.182/DMLOG8.182日志分析工具使用手册.docx
extracting: DMLOG8.182/Dmlog_DM_8.182.jar
extracting: DMLOG8.182/Dmlog_DM_8.18_us.jar
extracting: DMLOG8.182/echarts.js
extracting: DMLOG8.182/echarts_qps.html
extracting: DMLOG8.182/echarts_qps2.html
extracting: DMLOG8.182/jquery.js
extracting: DMLOG8.182/readme.doc
extracting: DMLOG8.182/~$LOG8.182日志分析工具使用手册.docx
[root@localhost dmlog]# cd DMLOG8.182/
完成日志文件位置的配置,需要保证文件夹中只有SQL日志文件:
配置文件:
[root@localhost DMLOG8.182]# vi dmlog.properties
#分析非MPP产生的日志为0,MPP产生的日志为1
ismpp=0
#数据库IP地址
ip=192.168.199.130
#数据库端口号
port=5236
#数据库用户名
username=SYSDBA
#数据库密码
password=Dameng123
#根据已存在的数据生成结果为1,根据LOG日志新生成数据为0
use_result=0
#SQL日志的文件夹绝对路径,并保证文件夹中只有SQL日志文件,路径请用两个反杠,例如:D:\\360Downloads\\log
sqlpath=/dm/sqllog #注意日志文件路径
#您想分析多少毫秒以上的SQL语句
time=0
#您想分析执行多少次以上的SQL语句
frequency=0
#此参数已废弃,excel中增加一列替换参数后的sql
is_replace=1
#参数队列的长度,默认40000,当出现找不到有效参数时可以适当加大此参数
queue_length=40000
#散点图中最大执行时间ms LEAST(exetime,2000)
max_exetime=10000
#echarts散点图中最小执行时间ms(DML、SEL、UPD、INS、DEL,不包含DDL、CAL)
min_exetime=100
#取值范围(0~100),echart散点图中取小于min_exetime多少百分比的数据
e_percent=10
#是否生成excel的统计结果
if_excel=1
#日志表的表名
tab_name=log_commit
#此处填入待拆分的TRXID,将把该事务的日志单独写入文件中,如果非空则只做事务拆分,不做其他分析
trx_id=
#待分析事务的日志文件名,此处为空则分析整个文件夹中的所有文件
file_name=
#日志文件中是否存在xx=:xxx 这种参数形式,一般是问号,默认是0;如果存在这种参数形式,就设置为1
colon_para=0
#是否生产echart统计图和散点图,默认生成
echart=1
#分析开始时间 例如2025-07-20 20:52:06 注意start_time和end_time配套使用,缺一不可。
start_time=
#分析结束时间 例如2025-07-20 20:52:06
end_time=
生成excel报表:
[root@localhost DMLOG8.182]# java -jar Dmlog_DM_8.182.jar
Linux
创建分析结果目录RESULT_2026_06_24_13_51_37成功!
----------------分析文件:dmsql_DMSERVER_20260624_093845.log----------------
dmsql_DMSERVER_20260624_093845.log文件已处理:5000行
dmsql_DMSERVER_20260624_093845.log文件已处理:10000行
dmsql_DMSERVER_20260624_093845.log文件已处理:12317行
dmsql_DMSERVER_20260624_093845.log文件已处理:15000行
dmsql_DMSERVER_20260624_093845.log文件已处理:20000行
dmsql_DMSERVER_20260624_093845.log文件已处理:25000行
dmsql_DMSERVER_20260624_093845.log文件已处理:30000行
dmsql_DMSERVER_20260624_093845.log文件已处理:35000行
dmsql_DMSERVER_20260624_093845.log文件已处理:40000行
dmsql_DMSERVER_20260624_093845.log文件已处理:45000行
dmsql_DMSERVER_20260624_093845.log文件已处理:50000行
dmsql_DMSERVER_20260624_093845.log文件已处理:55000行
dmsql_DMSERVER_20260624_093845.log文件已处理:60000行
dmsql_DMSERVER_20260624_093845.log文件已处理:65000行
dmsql_DMSERVER_20260624_093845.log文件已处理:70000行
dmsql_DMSERVER_20260624_093845.log文件已处理:75000行
dmsql_DMSERVER_20260624_093845.log文件已处理:80000行
dmsql_DMSERVER_20260624_093845.log文件已处理:85000行
dmsql_DMSERVER_20260624_093845.log文件已处理:90000行
dmsql_DMSERVER_20260624_093845.log文件已处理:95000行
dmsql_DMSERVER_20260624_093845.log文件已处理:100000行
dmsql_DMSERVER_20260624_093845.log文件已处理:105000行
dmsql_DMSERVER_20260624_093845.log文件已处理:110000行
dmsql_DMSERVER_20260624_093845.log文件已处理:115000行
dmsql_DMSERVER_20260624_093845.log文件已处理:120000行
dmsql_DMSERVER_20260624_093845.log文件已处理:125000行
dmsql_DMSERVER_20260624_093845.log文件已处理:130000行
dmsql_DMSERVER_20260624_093845.log文件已处理:135000行
dmsql_DMSERVER_20260624_093845.log文件已处理:140000行
dmsql_DMSERVER_20260624_093845.log文件已处理:145000行
dmsql_DMSERVER_20260624_093845.log文件已处理:150000行
dmsql_DMSERVER_20260624_093845.log文件已处理:155000行
dmsql_DMSERVER_20260624_093845.log文件已处理:160000行
dmsql_DMSERVER_20260624_093845.log文件已处理:165000行
dmsql_DMSERVER_20260624_093845.log文件已处理:170000行
dmsql_DMSERVER_20260624_093845.log文件已处理:175000行
dmsql_DMSERVER_20260624_093845.log文件已处理:180000行
dmsql_DMSERVER_20260624_093845.log文件已处理:185000行
dmsql_DMSERVER_20260624_093845.log文件已处理:190000行
dmsql_DMSERVER_20260624_093845.log文件已处理:195000行
dmsql_DMSERVER_20260624_093845.log文件已处理:200000行
dmsql_DMSERVER_20260624_093845.log文件已处理:205000行
dmsql_DMSERVER_20260624_093845.log文件已处理:210000行
dmsql_DMSERVER_20260624_093845.log文件已处理:215000行
dmsql_DMSERVER_20260624_093845.log文件已处理:220000行
dmsql_DMSERVER_20260624_093845.log文件已处理:225000行
dmsql_DMSERVER_20260624_093845.log文件已处理:230000行
dmsql_DMSERVER_20260624_093845.log文件已处理:235000行
dmsql_DMSERVER_20260624_093845.log文件已处理:240000行
dmsql_DMSERVER_20260624_093845.log文件已处理:245000行
dmsql_DMSERVER_20260624_093845.log文件已处理:250000行
dmsql_DMSERVER_20260624_093845.log文件已处理:255000行
dmsql_DMSERVER_20260624_093845.log文件已处理:260000行
dmsql_DMSERVER_20260624_093845.log文件已处理:265000行
dmsql_DMSERVER_20260624_093845.log文件已处理:270000行
dmsql_DMSERVER_20260624_093845.log文件已处理:275000行
dmsql_DMSERVER_20260624_093845.log文件已处理:280000行
dmsql_DMSERVER_20260624_093845.log文件已处理:285000行
dmsql_DMSERVER_20260624_093845.log文件已处理:290000行
dmsql_DMSERVER_20260624_093845.log文件已处理:295000行
dmsql_DMSERVER_20260624_093845.log文件已处理:300000行
dmsql_DMSERVER_20260624_093845.log文件已处理:305000行
dmsql_DMSERVER_20260624_093845.log文件已处理:310000行
dmsql_DMSERVER_20260624_093845.log文件已处理:315000行
dmsql_DMSERVER_20260624_093845.log文件已处理:320000行
dmsql_DMSERVER_20260624_093845.log文件已处理:325000行
dmsql_DMSERVER_20260624_093845.log文件已处理:330000行
dmsql_DMSERVER_20260624_093845.log文件已处理:335000行
dmsql_DMSERVER_20260624_093845.log文件已处理:340000行
dmsql_DMSERVER_20260624_093845.log文件已处理:345000行
dmsql_DMSERVER_20260624_093845.log文件已处理:350000行
dmsql_DMSERVER_20260624_093845.log文件已处理:355000行
dmsql_DMSERVER_20260624_093845.log文件已处理:360000行
dmsql_DMSERVER_20260624_093845.log文件已处理:365000行
dmsql_DMSERVER_20260624_093845.log文件已处理:370000行
dmsql_DMSERVER_20260624_093845.log文件已处理:375000行
dmsql_DMSERVER_20260624_093845.log文件已处理:380000行
dmsql_DMSERVER_20260624_093845.log文件已处理:385000行
dmsql_DMSERVER_20260624_093845.log文件已处理:390000行
dmsql_DMSERVER_20260624_093845.log文件已处理:395000行
dmsql_DMSERVER_20260624_093845.log文件已处理:400000行
dmsql_DMSERVER_20260624_093845.log文件已处理:405000行
dmsql_DMSERVER_20260624_093845.log文件已处理:410000行
dmsql_DMSERVER_20260624_093845.log文件已处理:415000行
dmsql_DMSERVER_20260624_093845.log文件已处理:420000行
dmsql_DMSERVER_20260624_093845.log文件已处理:425000行
dmsql_DMSERVER_20260624_093845.log文件已处理:430000行
dmsql_DMSERVER_20260624_093845.log文件已处理:435000行
dmsql_DMSERVER_20260624_093845.log文件已处理:440000行
dmsql_DMSERVER_20260624_093845.log文件已处理:445000行
dmsql_DMSERVER_20260624_093845.log文件已处理:450000行
dmsql_DMSERVER_20260624_093845.log文件已处理:455000行
dmsql_DMSERVER_20260624_093845.log文件已处理:460000行
dmsql_DMSERVER_20260624_093845.log文件已处理:465000行
dmsql_DMSERVER_20260624_093845.log文件已处理:470000行
dmsql_DMSERVER_20260624_093845.log文件已处理:475000行
dmsql_DMSERVER_20260624_093845.log文件已处理:480000行
dmsql_DMSERVER_20260624_093845.log文件已处理:485000行
dmsql_DMSERVER_20260624_093845.log文件已处理:490000行
dmsql_DMSERVER_20260624_093845.log文件已处理:495000行
dmsql_DMSERVER_20260624_093845.log文件已处理:500000行
dmsql_DMSERVER_20260624_093845.log文件已处理:505000行
----------------更新ROWCOUNT-------------------------
----------------创建索引-------------------------
----------------创建索引成功---------------------
----------------开始分析-------------------------
----------------生成时间维度统计结果-------------
----------------生成次数维度统计结果-------------
----------------生成echart统计图-----------------
----------------生成QPS统计图--------------------
----------------生成echart负载图-----------------
----------------生成jfree散点图------------------
----------------分析完毕,请查看结果-------------
程序运行时间: 165 秒
生成文件:
more_than_0_ms_log_result.xls工作表数据依据最大执行时间倒序排序,排序效果如图。
more_than_0_times_log_result.xls工作表数据依据执行次数倒序排序,排序效果如图。
想要用DMLOG解析SQL日志,首先得提前打开SQL跟踪日志开关,还有配置文件的配置路径必须填写SQL日志的完整绝对目录,并且文件夹里只放达梦SQL日志,不要混入其他文件,避免解析出错、统计数据不准。
文章
阅读量
获赞
