注册
DMLOG工具使用实践
技术分享/ 文章详情 /

DMLOG工具使用实践

BruceCD 2025/09/30 51 0 0

简述

DMLOG是分析DM数据库的SQL日志文件的工具,可以统计日志中最长执行时间和执行最高频次的 SQL 语句,以图表的形式展示出来,方便性能分析。

使用限制

  1. 数据库的PAGE_SIZE必须是32K,否则会报错:
    图片.png
  2. 需要java1.8环境
  3. 受制于excel的限制,生成的excel文件中单个sheet中最多只有65536行
  4. 由于分析结果会向后台DM数据库中的SYSDBA.log_commit表中写入大量数据,所以严禁在生产环境进行分析,以避免影响生产业务。

使用步骤

开启sqllog功能

  1. 确保待分析库的sqllog功能是开启的

select para_value from v$dm_ini where para_name=‘SVR_LOG’;
如果没有则需要修改sqllog.ini文件,主要把路径修改下即可:
FILE_PATH = /dmdata/sqllog

  1. 然后执行SQL:

SP_REFRESH_SVR_LOG_CONFIG();
SP_SET_PARA_VALUE(1,‘SVR_LOG’,1);
稍等一会儿就可以在/dmdata/sqllog中看到有对应的sql日志文件生成

配置sqllog.ini注意项

  1. 配置文件中路径相关的参数例如FILE_PATH,如果指定相对目录的话,都是相对dmserver启动时的工作目录,如果启动时是用服务脚本启动的话,对应的工作目录是在$DM_HOME/bin,如果是前台启动的话,需要看执行的时候工作目录是什么。
  2. SQL_TRACE_MARK参数是代表要记录的哪些语句类型,它是用冒号隔开的位号表示的,每一个位号代表的是指定的语句类型,细分的话有28种,对应位号从431,13是这28中类型的不同组合,1表示所有,2表示DML类型语句,3表示DDL类型语句,在配置中写入的位号不在1~31范围内(例如4:51)也不会报错,而是会用默认的1(表示所有类型语句)进行配置。
    图片.png
    如果写了多个位号有重复,也会用默认的1进行配置;如果位号不是有效输入(例如abc这种字母的字符串),也会用默认1进行配置。
  3. ITEMS配置项的作用是指定输出的信息,默认为0表示输出所有信息(除CLIENT_INFO外),与0相对的是13表示仅输出CLIENT_INFO信息,此参数配置的时候需要注意,输出到sqllog中的语句后面需要有执行时间信息,否则在执行DMLLOG分析的时候会直接忽略掉这部分SQL语句不分析。
  4. 每次修改完sqllog.ini后,需要执行SP_REFRESH_SVR_LOG_CONFIG()让配置生效,sqllog日志文件也会生成一个新的继续写入(只有在有新的满足条件的类型的语句执行时才会生成新的)。
  5. 在sqllog.ini中修改的参数值会显示在v$dm_sqllog_ini中,不过经过测试,只有只有满足条件的值才能显示在这里,修改为不满足条件的值时会变成默认值;在内存中生效的值会显示在v$dm_sqllog_config中,这里的值相当于是从v$dm_sqllog_ini更新过来的。
  6. MIN_EXEC_TIME参数是配置语句执行超过多久才会被记录,单位是毫秒,默认是0,相当于不限制时间,但是在实际使用过程中需要进行区分,如果是为了进行极限的性能优化,需要收集所有执行过的语句,此处就要设置为0,如果是为了优化影响系统正常运行的慢查询,就需要将它调到需要关注的值,一般调到100比较合适,不过还是要看实际情况。
  7. 在dm.ini中,通过配置SVR_LOG_NAME可以指定生效的模式,如果只有1个模式的情况下,生产的sqllog文件的名称都是不包含模式名称,如果指定了多个模式名,会在sqllog文件中带上对应的模式名以区分开。
    图片.png
    上述截图中的4个sqllog文件中,前两个分别是配置SVR_LOG_NAME=SLOG_ALL和配置SVR_LOG_NAME=SLOG_LONG2_ALL时生成的日志文件,除了时间戳其他没有差别,后两个日志文件是配置SVR_LOG_NAME=SLOG_ALL,SLOG_LONG2_ALL时的文件,它们会分别记录对应模式的日志。

配置DMLOG工具

找到DMLOG的zip压缩包,然后修改它的配置文件dmlog.properties,主要是连接数据库的用户密码以及sqllog目录:

ip=127.0.0.1
port=5236
username=SYSDBA
password=Sysdba@123
sqlpath=/dmdata/sqllog

执行分析操作

执行命令进行分析:

[dmdba@192-168-56-102 DMLOG8.18]$ java -jar Dmlog_DM_8.18.jar
Linux
创建分析结果目录RESULT_2025_09_15_19_48_47成功!
----------------分析文件:dmsql_DMSERVER_20250915_100022.log----------------
----------------分析文件:dmsql_DMSERVER_20250915_143002.log----------------
----------------分析文件:dmsql_DMSERVER_20250915_145610.log----------------
dmsql_DMSERVER_20250915_145610.log文件已处理:5000行
dmsql_DMSERVER_20250915_145610.log文件已处理:10000行
dmsql_DMSERVER_20250915_145610.log文件已处理:10165行
dmsql_DMSERVER_20250915_145610.log文件已处理:12317行
dmsql_DMSERVER_20250915_145610.log文件已处理:15000行
dmsql_DMSERVER_20250915_145610.log文件已处理:20000行
dmsql_DMSERVER_20250915_145610.log文件已处理:25000行
dmsql_DMSERVER_20250915_145610.log文件已处理:30000行
..........
----------------更新ROWCOUNT-------------------------
----------------创建索引-------------------------
----------------创建索引成功---------------------
----------------开始分析-------------------------
----------------生成时间维度统计结果-------------
----------------生成次数维度统计结果-------------
----------------生成echart统计图-----------------
----------------生成QPS统计图--------------------
----------------生成echart负载图-----------------
----------------生成jfree散点图------------------
----------------TABLENAME:LOG_COMMIT-------------
----------------分析完毕,请查看结果-------------
程序运行时间: 376 秒

查看结果

可以在当前目录下生成一个RESULT_前缀的目录,后面跟着时间戳,打开这个目录可以看到echarts_qps.html,echarts_scatter_loading10.html,echarts_scatter_Statistics.html这几个html文件,它们是图表展示qps、top和其他统计信息的表格。
more_than_0_ms_log_result.xls、more_than_0_times_log_result.xls是记录分析的具体SQL信息,可以用来进行更针对性的SQL分析。
图片.png

QPS折线图:echarts_qps.html

这个文件是展示不同类型的SQL语句执行频率的折线图表,例如select语句、update语句、insert语句等:
图片.png
它的精度可以达到秒级,右边的柱状调节按钮可以调节展示的最大值,高于此值的不显示在折线图中,底部的柱状按钮可以调节时间范围,仅显示指定时间区间内的点,上部的多个小圆圈控制不同类型的SQL的折线图。

SQL散点图:echarts_scatter_loading10.html

此文件是展示select类型语句在每一秒的时间线上的耗时分布,鼠标放在对应的点上可以看到对应的具体执行语句:
图片.png
也可以点击右边的柱状按钮来调节展示的最大值,底部的柱状按钮调整时间区间

SQL统计图:echarts_scatter_Statistics.html

此文件是展示select类型语句的平均耗时和执行次数之间的耗时:
图片.png
横轴为SQL语句的执行次数,纵轴为执行耗时

SQL执行次数和时间的统计EXCEL表:more_than_0_ms_log_result.xls,more_than_0_times_log_result.xls

这两张excel表展示的是所有SQL的执行耗时、执行次数、执行计划等信息,两张表的内容是一样的,但是排序列不同,more_than_0_ms_log_result.xls是按照最大执行时间降序排序,more_than_0_times_log_result.xls是按照执行次数降序排序。
图片.png

使用过程中的一些问题

  1. 结果文件的统计分析是正对SQL语句的完整对比,所以比如上述示例中select * from test_schema.test_tb where id=3;的四种不同写法,其实从用户角度来看是同一条语句,只是多了或少了空格,就被当作多个不同语句来分析了。
  2. 在少数情况下会漏掉一部分语句的分析,这个还有待确认具体的场景。

学习思考

DMLOG工具与数据库的sqllog功能结合达到了可以对数据库的性能分析的目的,对于数据库输出的详细sqllog日志非常大时,很难用人工肉眼一点点分析,此时用DMLOG工具可以从DBA视角来对业务系统执行的SQL进行快速分析定位高频耗时的SQL语句,针对耗时占比高的语句进行有目的得重点优化,能够达到更好的优化效果。
此工具还有一些待改进的地方:

  1. 在SQL散点图中,如果语句特别多的情况下,想确认一条具体SQL处于什么位置非常难,建议加上SQL语句搜索功能可以直接定位到对应的点上
  2. 在SQL统计分析时可以对SQL语句做一些参数抽取和文本摘要的功能,对空格类字符可以忽略掉,这样可以统计到更高维度的统计信息。
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服