达梦运维工具-DMLOG的使用

DMLOG的使用

前言

根据达梦官网文档整理

一、概述

实例级 SQL 日志分析工具,DMLOG 工具是一款简单易用的达梦数据库 SQL 日志分析工具,通过分析数据库的 SQL 日志文件(达梦数据库可通过开启 SVR_LOG 捕捉数据库中运行的所有 SQL,并生成 SQL 日志文件),来统计日志中最长执行时间和执行最高频次的 SQL 语句,直观地反映 SQL 执行情况,对于 SQL 的优化工作提供了极大的便利。

DMLOG 工具可实现如下功能:

  • 达梦数据库 SQL 日志分析功能,统计分析日志并根据执行时间和执行频次进行排序,生成 excel 文档。
  • 支持生成 echart 散点图,每个点上的 sql 可以显示和拷贝。
  • 支持生成 sql 统计图,根据执行次数和执行时间统计。

该工具实现的原理为:读取SQL日志到后台达梦数据库log_commit表中 ,在数据库中进行查询统计后输出excel文件结果。

Log_commit表的表结构定义如下:

CREATE TABLE "SYSDBA"."LOG_COMMIT"
(
    "STARTTIME" DATETIME(6),
    "SESS" VARCHAR(500),
    "SQLSTR" TEXT,
    "EXETIME" FLOAT,
    "SQLSTR_SUB" VARCHAR(8000),
    "EUER" VARCHAR(100),
    "OPTYPE" VARCHAR(30)
) STORAGE(USING LONG ROW, ON "MAIN", CLUSTERBTR) ;

CREATE  INDEX "IDX_EXETIME_RESULT_2021_10_12_11_22_52" ON "SYSDBA"."LOG_COMMIT"("EXETIME" ASC) STORAGE(ON "MAIN", CLUSTERBTR) ;

分别记录了根据日志分析出来的SQL开始时间,会话信息,SQL文本,执行时间,参数替换后的SQL文本,SQL执行用户信息,SQL语句操作类型。

二、使用条件和限制

1、使用条件

  • 运行环境预先安装Java环境;支持liunx和windows系统运行。

推荐使用java1.8版本,linux最小化安装最少要安装打印服务组件,windows下不支持java1.6版本。

  • SQL日志格式要求确保每条语句后紧跟sql语句时间,因此需确认日志生成的数据库的sql trace参数,建议使用默认参数;

  • 由于程序运行需要在后台数据库建log_commit表,建表前会删除同名表,因此如果有同名表,请先做好备份;

  • 待分析的SQL文件夹中请保证只有SQL日志,无其他文件;

  • dmlog.properties配置文件中log路径,注意windows下,使用”\\”代替”\”。

注意:请运维人员把sql日志拷贝到测试环境分析,严禁连接生产环境,将生产库作为后台库分析!

2、使用限制

由于一页excel最大行数为65536,因此当待分析的日志量较大时,会提示超过限值警告,然后取前65535记录。

此时可以将日志切割或分批进行分析,或者分析执行时间比较长和执行时间比较高的SQL,也可以不使用替换参数功能,减少输出结果。

三、使用说明

1、检查Java

[root@Kylin ~]# su - dmdba
上一次登录: 二 227 11:05:11 CST 2024 pts/0 上
[dmdba@Kylin ~]$ java -version
openjdk version "1.8.0_392"
OpenJDK Runtime Environment Bisheng (build 1.8.0_392-b08)
OpenJDK 64-Bit Server VM Bisheng (build 25.392-b08, mixed mode)

2、使用步骤

2.1 解压工具包
$ unzip DMLOG8.*.zip
$ cd DMLOG8.*/
2.2 配置dmlog.properties
#分析非MPP产生的日志为0,MPP产生的日志为1
ismpp=0

#数据库IP地址
ip=127.0.0.1

#数据库端口号
port=5236

#数据库用户名
username=SYSDBA

#数据库密码
password=SYSDBA

#根据已存在的数据生成结果为1,根据LOG日志新生成数据为0
use_result=0

#SQL日志的文件夹绝对路径,并保证文件夹中只有SQL日志文件,WINDOWS路径请用两个反杠,例如:D:\\log
#linux就正常填写路径
sqlpath=/dmdata/logs

#您想分析多少毫秒以上的SQL语句
time=0

#您想分析执行多少次以上的SQL语句
frequency=0

#此参数已废弃,excel中增加一列替换参数后的sql
is_replace=1

#参数队列的长度,默认4000,当出现找不到有效参数时可以适当加大此参数
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
2.3 执行jar包

运行过程如下图所示,会按当前时间生成对应RESULT_$DATE目录并将所有统计信息都存放该目录中,并将结果存储到表log_commit

$ java -jar Dmlog_DM_8.*.jar
Linux
创建分析结果目录RESULT_2024_02_27_13_5_46成功!
----------------分析文件:dmsql_DB2_20240227_130224.log----------------
----------------更新ROWCOUNT-------------------------
----------------创建索引-------------------------
----------------创建索引成功---------------------
----------------开始分析-------------------------
----------------生成时间维度统计结果-------------
----------------生成次数维度统计结果-------------
----------------生成echart统计图-----------------
----------------生成QPS统计图--------------------
----------------生成echart负载图-----------------
----------------生成jfree散点图------------------
----------------TABLENAME:LOG_COMMIT-------------
----------------分析完毕,请查看结果-------------

生成的结果目录下有根据配置的执行时间和执行次数上限值命名的excel文件(xls),报错的SQL和长度超过30000的SQL会另外生成txt文件(txt),echart散点图,QPS折线图及90%平均次数和平均耗时的SQL统计图(html):

$ ls -l
total 3732
-rw-r--r-- 1 root root       0 Feb 27 13:05 DATA_ERR_LOG.txt
-rw-r--r-- 1 root root     121 Feb 27 13:05 data_loading.js
-rw-r--r-- 1 root root     134 Feb 27 13:05 data_QPS.js
-rw-r--r-- 1 root root       0 Feb 27 13:05 data_Statistics.js
-rw-r--r-- 1 root root 3274210 Feb 27 13:05 echarts.js
-rw-r--r-- 1 root root    4278 Feb 27 13:05 echarts_qps.html
-rw-r--r-- 1 root root    4932 Feb 27 13:05 echarts_scatter_loading10.html
-rw-r--r-- 1 root root    4673 Feb 27 13:05 echarts_scatter_Statistics.html
-rw-r--r-- 1 root root  304436 Feb 27 13:05 jquery.js
-rw-r--r-- 1 root root  169679 Feb 27 13:05 LOG_SCATTER_PLOT.png
-rw-r--r-- 1 root root   13824 Feb 27 13:05 more_than_0_ms_log_result.xls
-rw-r--r-- 1 root root   13824 Feb 27 13:05 more_than_0_times_log_result.xls
-rw-r--r-- 1 root root       0 Feb 27 13:05 SQL_ERR_LOG.txt

查看表log_commit

SQL> select * from log_commit \G
*************************** 1. row ***************************
  STARTTIME: 2024-02-27 13:04:17.729
       SESS: (EP[0] sess:0x7fdcd8012b08 thrd:1601522 user:SYSDBA trxid:7112 stmt:0x7fdcd8036b08 appname:disql ip:::1)
     SQLSTR: select * from v$dm_ini where para_name='SVR_LOG';
    EXETIME: 5.000000000000000E+00
 SQLSTR_SUB: select * from v$dm_ini where para_name='SVR_LOG';
       EUER: SYSDBA
     OPTYPE: SEL
   ROWCOUNT: 1
SQLSTR_PARA: select * from v$dm_ini where para_name='SVR_LOG';
   WAITTIME:
*************************** 2. row ***************************
  STARTTIME: 2024-02-27 13:04:51.041
       SESS: (EP[0] sess:0x7fdcd8012b08 thrd:1601522 user:SYSDBA trxid:7112 stmt:0x7fdcd8036b08 appname:disql ip:::1)
     SQLSTR: select * from cha16.hero where name like '%Lin%';
    EXETIME: 0.000000000000000E+00
 SQLSTR_SUB: select * from cha16.hero where name like '%Lin%';
       EUER: SYSDBA
     OPTYPE: SEL
   ROWCOUNT: 100
SQLSTR_PARA: select * from cha16.hero where name like '%Lin%';
   WAITTIME:
*************************** 3. row ***************************
  STARTTIME: 2024-02-27 13:04:51.088
       SESS: (EP[0] sess:0x7fdcd8012b08 thrd:1601522 user:SYSDBA trxid:7112 stmt:0x7fdcd8036b08 appname:disql ip:::1)
     SQLSTR: select * from cha16.hero where name like '%Lin%';
    EXETIME: 4.700000000000000E+01
 SQLSTR_SUB: select * from cha16.hero where name like '%Lin%';
       EUER: SYSDBA
     OPTYPE: SEL
   ROWCOUNT: 10276
SQLSTR_PARA: select * from cha16.hero where name like '%Lin%';
   WAITTIME:
*************************** 4. row ***************************
  STARTTIME: 2024-02-27 13:04:51.160
       SESS: (EP[0] sess:0x7fdcd8012b08 thrd:1601522 user:SYSDBA trxid:7112 stmt:0x7fdcd8036b08 appname:disql ip:::1)
     SQLSTR: select * from cha16.hero where name like '%Lin%';
    EXETIME: 4.800000000000000E+01
 SQLSTR_SUB: select * from cha16.hero where name like '%Lin%';
       EUER: SYSDBA
     OPTYPE: SEL
   ROWCOUNT: 20431
SQLSTR_PARA: select * from cha16.hero where name like '%Lin%';
   WAITTIME:
*************************** 5. row ***************************
  STARTTIME: 2024-02-27 13:04:51.213
       SESS: (EP[0] sess:0x7fdcd8012b08 thrd:1601522 user:SYSDBA trxid:7112 stmt:0x7fdcd8036b08 appname:disql ip:::1)
     SQLSTR: select * from cha16.hero where name like '%Lin%';
    EXETIME: 3.300000000000000E+01
 SQLSTR_SUB: select * from cha16.hero where name like '%Lin%';
       EUER: SYSDBA
     OPTYPE: SEL
   ROWCOUNT: 27616
SQLSTR_PARA: select * from cha16.hero where name like '%Lin%';
   WAITTIME:

2.4 文件夹组成
  • Excel文件

两个excel分别是按照最大执行时间和执行次数进行降序排序

  • 散点图

    echarts_scatter_loading10.html为echart散点图每个点的SQL信息可以显示和拷贝

在这里插入图片描述

  • 散点图支持以下功能:

    • 筛选 SEL/DDL/INS/CAL 等分类,只用点击去除或者选择对应类别,即可显示对应 sql 在图形上分布点;
    • 支持散点图区域放大功能,鼠标指定位置,进行滚轮缩放,可放大语句。
    • 点击每个点,可获得每个点的 SQL 详细信息。
    • 点击散点图右上角可以保存图片。
  • echarts_scatter_Statistics.html

    它是以散点图为基础上生成的按照执行 90% 平均次数和平均耗时的 SQL 统计图
    在这里插入图片描述

  • echarts_qps.html

    为 QPS(Queries-per-second,即每秒查询率,在数据库中指每秒执行查询 sql 的次数)折线图。

在这里插入图片描述

达梦社区:https://eco.dameng.com

  • 25
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值