达梦数据库性能分析之SQL日志

相对Oracle数据库来说,达梦数据库在性能数据方面比较欠缺。在我们需要对数据库进行性能分析找到执行开销较大的SQL语句时,我们可以借助达梦数据库的SQL日志功能。接下来就简单介绍一下SQL日志功能的使用方法。

 

达梦数据库的SQL日志功能默认是关闭的,在启用之前,我们需要先打开SQL日志开关。

 

  1. 配置SQL日志参数文件

首先我们要配置sqllog.ini文件,否则数据库会记录所有运行的SQL信息,不仅影响数据库性能,还可能造成文件系统使用率迅速升高。

配置文件所在路径:$SYSTEM_PATH/sqllog.ini  (SYSTEM_PATH参见dm.ini文件)

 

设置样例:

BUF_TOTAL_SIZE          = 10240    #SQLs Log Buffer Total Size(K)(1024~1024000)

BUF_SIZE                = 1024     #SQLs Log Buffer Size(K)(50~409600)

BUF_KEEP_CNT            = 6       #SQLs Log buffer keeped count(1~100)

 

[SLOG_ALL]

    FILE_PATH    = /home/dmdba/sqllog/

    PART_STOR    = 0

    SWITCH_MODE  = 2

    SWITCH_LIMIT   = 128

    ASYNC_FLUSH   = 1

    FILE_NUM = 20

    ITEMS    = 0

    SQL_TRACE_MASK  = 2:3:25:28

    MIN_EXEC_TIME = 100

    USER_MODE   = 0

    USERS =

 

 

参数说明:

  1. BUF_TOTAL_SIZE

SQL 日志 BUFFER 占用空间的上限,单位为 KB,取值范围(1024~1024000)

默认值:10240

 

  1. BUF_SIZE

一块 SQL 日志 BUFFER 的空间大小,单位为 KB,取值范围(50~409600)

默认值:1024

 

  1. BUF_KEEP_CNT

系统保留的 SQL 日志缓存的个数, 有效值范围(1~ 100)

默认值:6

 

  1. FILE_PATH

默认值:..\LOG

 

  1. PART_STOR

SQL 日志分区存储,表示 SQL 日志进行分区存储的划分条件。

0 表示不划分;

1 表示 USER:根据不同用户分布存储

默认值:0

 

  1. SWITCH_MODE

表示 SQL 日志文件切换的模式:

0:不切换

1:按文件中记录数量切换

2:按文件大小切换

3:按时间间隔切换

 

默认值:0

 

  1. SWITCH_LIMIT

不同切换模式 SWITCH_MODE 下,意义不同:

?       按数量切换时,一个日志文件中的 SQL 记录条数达到多少条之后系统会自动将日志切换到另一个文件中。一个日志文件中的 SQL 记录条数达到多少条之后系统会自动将日志切换到另一个文件中。有效值范围(1000~ 10000000)

?       按文件大小切换时,一个日志文件达到该大小后,系统自动将日志切换到另一个文件中,单位为 M。有效值范围(1~ 2000)

?       按时间间隔切换时,每个指定的时间间隔,按文件新建时间进行文件切换,单位为分钟。 有效值范围(1~ 30000)

默认值:100000

 

  1. FILE_NUM

总共记录多少个日志文件,当日志文件达到这个设定值以后,再生成新的文件时,会删除最早的那个日志文件,日志文件的命令格式为:DMSQL_实例名_日期时间.LOG。

当这个参数配置成 0 时, 只会生成两个日志相互切换着记录。有效值范围(0~1024)。例如, 当FILE_NUM=0, 实例名为 PDM 时, 根据当时的日期时间,生成的日志名称为:

DMSQL_PDM_20200719_163701.LOG,

DMSQL_PDM_20200719_163702.LOG

 

默认值:0

 

  1. ASYNC_FLUSH

是否打开异步 SQL 日志功能。0:表示关闭; 1:表示打开

默认值:0

 

  1. ITEMS

配置 SQL 日志记录中的那些列要被记录。

该参数是一个格式化的字符串,表示一个记录中

的那些项目要被记录,格式为:列号:列号:列号。

列如: 3:5:7 表示第 3,第 5,第 7 列要被记录。

0 表示记录所有的列

1 TIME 执行的时间

2 SEQNO 服务器的站点号

3 SESS 操作的 SESS 地址

4 USER 执行的用户

5 TRXID 事务 ID

6 STMT 语句地址

7 APPNAME 客户端工具

8 IP 客户端 IP

9 STMT_TYPE 语句类型

10 INFO 记录内容

11 RESULT 运行结果,包括运行用时和影响行数(可能没有)

 

默认值:0

 

  1. SQL_TRACE_MASK

LOG 记录的语句类型掩码,是一个格式化的字符串,表示一个 32 位整数上哪一位将被置为 1,置为 1 的位则表示该类型的语句要记录,格式为:位号:位号:位号。列如: 3:5:7 表示第 3,第 5,第 7 位上的值被置为 1。每一位的含义见下面说明(2~17 前提是:SQL 标记位 24 也要配置):

1 全部记录(全部记录并不包含原始语句)

2 全部 DML 类型语句

3 全部 DDL 类型语句

4 UPDATE 类型语句(更新)

5 DELETE 类型语句(删除)

6 INSERT 类型语句(插入)

7 SELECT 类型语句(查询)

8 COMMIT 类型语句(提交)

9 ROLLBACK 类型语句(回滚)

10 CALL 类型语句(过程调用)

11 BACKUP 类型语句(备分)

12 RESTORE 类型语句(恢复)

13 创建对象操作(CREATE DDL)

14 修改对象操作(ALTER DDL)

15 删除对象操作(DROP DDL)

16 授权操作(GRANT DDL)

17 回收操作(REVOKE DDL)

22 绑定参数

23 存在错误的语句(语法错误,语义分析错误等)

24 是否需要记录执行语句

25 是否需要打印计划和语句和执行的时间

26 是否需要记录执行语句的时间

27 原始语句(服务器从客户端收到的未加分析的语句)

28 是否记录参数信息,包括参数的序号、数据类型和值

29 是否记录事务相关事件

默认值:1

可设置为:2:3:25:28

 

  1. MIN_EXEC_TIME

详细模式下,记录的最小语句执行时间,单位为毫秒。执行时间小于该值的语句不记录在日志文件中。有效值范围(0~ 4294967294)

默认值:0

可设置为:100

 

  1. USER_MODE

SQL 日志按用户过滤时的过滤模式,取值:

0:关闭用户过滤

1:白名单模式,只记录列出的用户操作的SQL 日志

2:黑名单模式,列出的用户不记录 SQL 日志

 

默认值:0

 

  1. USERS

打开 USER_MODE 时指定的用户列表。格式为:用户名:用户名:用户名

默认值:空值

 

 

  1. 大小SQL日志开关

sp_set_para_value(1,'SVR_LOG',1);

 

当把dm.ini参数SVR_LOG置为1,才会打开SQL日志。

如果在服务器启动过程中,修改了sqllog.ini文件。修改之后的文件,只要调用过程SP_REFRESH_SVR_LOG_CONFIG() 就会生效。

0:表示关闭;

1:表示打开;

2:按文件中记录数量切换日志文件,日志记录为详细模式;

3:不切换日志文件,日志记录为简单模式,只记录时间和原始语句。

 

打开SQL日志开关后,数据库就会开始按照配置要求记录相关SQL信息。类似MySQL数据库的慢日志。

但是由于是日志信息,可读性很差,不便于查看。

因此,下一步需要借助达梦数据库提供的工具进行转化,提高日志可读性。

 

  1. 配置转换工具:

安装dm数据库

安装JDK

java -jar Dmlog_DM7_v5.1.jar

 

 

  1. 进行数据转换

 

D:\dmdbms1803\jdk\bin>java.exe -jar D:\Dmlog_DM7_5.1.jar

############################# dm7日志分析程序使用说明 ########################

###                                                                        ###

### 1.请确认sql trace参数,确保每条语句后紧跟sql语句时间: 1:25             ###

### 2.本程序建表log_commit进行分析                                         ###

### 3.本程序建表前会删除同名表,请做好备份 !                              ###

### 4.请使用页大小为32k的DM7进行分析 !                                    ###

### 5.结果中sql语句背景为黄色的表示sql长度超过30000,已截断 !              ###

### 6.截断的语句会保存到文本文件中,如第一条截断会生成Q1.txt !            ###

### 7.本程序生成的所有文件存放在当前目录下的RESULT_$DATE目录下 !          ###

### 8.本程序只能连测试环境进行分析,切忌连生产环境!!!                   ###

###                                                                        ###

############################# 说明完毕,请使用!##############################

使用本机默认DM7数据源请输入0,指定数据源请输入1:

0

根据日志入库生成分析结果请输入0,根据表中已有数据直接生成分析结果请输入1:

0

请输入存放SQL日志的文件夹绝对路径,并保证文件夹中只有SQL日志文件:

D:\Dmlog

您想分析多少毫秒以上的SQL语句:

0

您想分析执行多少次以上的SQL语句:

0

您是否需要替换SQL语句中的参数:

0

创建目录RESULT_2021_02_19_8_54_33成功!

----------------分析文件:log_commit_01.log----------------

----------------创建索引---------------------

----------------创建索引成功-------------------

----------------入库完毕,开始分析---------------

----------------分析完毕,请查看结果-------------

 

 

  1. 查看转化后日志信息

序号

SQL语句

最大执行时间

最小执行时间

90%平均执行时间

平均执行时间

执行次数

1

/*参数已替换*/ delete from tb_xxx where showwenid='......'

1881.0

1881.0

1881.0

1881.0

1

2

/*参数已替换*/ delete from tb_xxx where showwenid='......'

1742.0

1742.0

1742.0

1742.0

1

3

/*参数已替换*/ delete from tb_xxx where showwenid='......'

1703.0

1703.0

1703.0

1703.0

1

4

/*参数已替换*/ delete from tb_xxx where showwenid='......'

1677.0

1677.0

1677.0

1677.0

1

5

/*参数已替换*/ delete from tb_xxx where showwenid='......'

1672.0

1672.0

1672.0

1672.0

1

6

/*参数已替换*/ delete from tb_xxx where showwenid='......'

1662.0

1662.0

1662.0

1662.0

1

7

/*参数已替换*/ delete from tb_xxx where showwenid='......'

1660.0

1660.0

1660.0

1660.0

1

转换后,会生成表格格式文件,可读性大大增强。

你可能感兴趣的:(数据库,运维)