暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

搞懂达梦数据库SQL日志使用延伸,这些方法超实用!

153

1 前言

通过上一篇文章内容,我们对达梦数据库的SQL日志有了更为深入的了解。可以看到,在新环境完成初始化后,sqllog.ini
文件的具体内容如下(实际内容请以实际情况为准)。本次分享的重点在于针对个别参数展开个性化的调整操作,旨在实现将不同类型的日志存放到不同的路径下,以满足多样化的日志管理需求。

[dmdba@dm91 DEM]$ cat sqllog.ini 
BUF_TOTAL_SIZE          = 10240         #SQLs Log Buffer Total Size(K)(1024~1024000)
    BUF_SIZE                = 1024          #SQLs Log Buffer Size(K)(50~102400)
    BUF_KEEP_CNT            = 6             #SQLs Log buffer keeped count(1~100)

    [SLOG_ALL]
    FILE_PATH    = ../log
    PART_STOR    = 0
    SWITCH_MODE  = 2
    SWITCH_LIMIT   = 128
    ASYNC_FLUSH   = 1
    FILE_NUM = 5
    ITEMS    = 0 
    SQL_TRACE_MASK  = 1 
    MIN_EXEC_TIME = 0 
    USER_MODE   = 0 
    USERS =
    EXECTIME_PREC_FLAG = 0 
    
    [SLOG_ERROR]
    SQL_TRACE_MASK = 23
    FILE_PATH      = ../log
    
    [SLOG_DDL]
    SQL_TRACE_MASK = 3
    
    [SLOG_LONG_SQL]
    SQL_TRACE_MASK = 25
    MIN_EXEC_TIME = 60000 
[dmdba@dm91 DEM]$ 

2 参数介绍

这里展开说下dm.ini
中用户请求跟踪相关参数 【SVR_LOG】

  • 参数类型:动态·系统级
  • 默认值:0
  • 功能说明: 控制SQL日志记录功能及模式 ▶ 0:关闭日志记录 ▶ 1:启用标准日志记录(按SQLLOG.INI配置) ▶ 2:启用轮转日志记录(详细模式,按文件数量切换) ▶ 3:启用固定日志记录(简单模式,仅记录时间戳和原始语句)

【SVR_LOG_NAME】

  • 参数类型:动态·系统级
  • 默认值:SLOG_ALL
  • 配置规范:
    1. 支持最多10个预设模式名(逗号分隔)
    2. 单个模式名≤128字节,超长则失效
    3. 总配置长度≤256字节(超限强制使用SLOG_ALL)
    4. 模式有效性验证: • 不存在于SQLLOG.INI的名称自动失效 • 全部无效时默认启用SLOG_ALL
    5. 修改限制: • 运行期修改需保证新值≤256字节 • 超长报错(ERR_LOG_CONFIG)
  • 示例配置: SVR_LOG_NAME = SLOG_ALL,SLOG_DEL,SLOG_DEL,SLOG_SLT,SLOG_ERROR,SLOG_DDL

【SVR_LOG_PLN_STR】

  • 参数类型:动态·会话级
  • 默认值:1
  • 日志计划记录级别: ├ 0:禁用所有计划记录 ├ 1:记录基础执行计划 └ 2:记录动态语句及游标计划
  • 特性说明: ▶ 会话级参数:不同客户端会话可设置不同值 ▶ 影响范围:仅对当前会话执行的SQL语句生效 ▶ 性能考量:1/2级记录可能增加I/O负载,建议做好合理的规划

3 案例分享

注意SQL_TRACE_MASK
日志记录的详细程度与参数的日志文件大小呈正相关。也就是说,日志记录得越详尽,相应的参数日志文件就会越大。
因此,在实际生产环境中,为确保系统的稳定高效运行,建议提前对存储资源的分配进行合理规划。这不仅有助于避免因日志文件过大而占用过多存储空间,还能有效防止因 I/O 过度消耗而导致的数据库性能下降。

3.1 创建日志文件存放目录

mkdir {SLOG_DEL,SLOG_ERROR,SLOG_SLT,SLOG_DDL}

[dmdba@dm91 dmback]$ mkdir {SLOG_DEL,SLOG_ERROR,SLOG_SLT}
[dmdba@dm91 dmback]$ ls -l
drwxr-xr-x  2 dmdba dinstall         6 2月  26 09:40 SLOG_DEL
drwxr-xr-x  2 dmdba dinstall         6 2月  26 09:40 SLOG_ERROR
drwxr-xr-x  2 dmdba dinstall         6 2月  26 09:40 SLOG_SLT
drwxr-xr-x 10 dmdba dinstall       248 2月  19 12:44 tomcat-9.0.99
[dmdba@dm91 dmback]$ 

3.2 备份并修改sqllog.ini文件

[dmdba@dm91 DEM]$ cp sqllog.ini sqllog.ini_bak
[dmdba@dm91 DEM]$ cat sqllog.ini
BUF_TOTAL_SIZE          = 10240         #SQLs Log Buffer Total Size(K)(1024~1024000)
    BUF_SIZE                = 1024          #SQLs Log Buffer Size(K)(50~102400)
    BUF_KEEP_CNT            = 6             #SQLs Log buffer keeped count(1~100)

    [SLOG_ALL]
    FILE_PATH    = ../log#默认存放在$DM_HOME/log路径
    PART_STOR    = 0
    SWITCH_MODE  = 2
    SWITCH_LIMIT   = 256
    ASYNC_FLUSH   = 1
    FILE_NUM = 5
    ITEMS    = 0 
    SQL_TRACE_MASK  = 1 #表示记录所有,可以根据需求调整 
    MIN_EXEC_TIME = 1000 
    USER_MODE   = 0 
    USERS =
    EXECTIME_PREC_FLAG = 0 
    
    [SLOG_ERROR]
    SQL_TRACE_MASK = 23
    FILE_PATH      = dm/dmback/SLOG_ERROR  #新目录
    
    [SLOG_DDL]
    SQL_TRACE_MASK = 3
    FILE_PATH      = dm/dmback/SLOG_DDL #新目录
    
    [SLOG_LONG_SQL]
    SQL_TRACE_MASK = 25
    MIN_EXEC_TIME = 60000 

    [SLOG_DEL]
    SQL_TRACE_MASK = 5
    MIN_EXEC_TIME = 10
    FILE_PATH      = dm/dmback/SLOG_DEL #新目录

    [SLOG_SLT]
    SQL_TRACE_MASK = 7
    MIN_EXEC_TIME = 10   #单位毫秒 
    FILE_PATH      = dm/dmback/SLOG_SLT #新目录
[dmdba@dm91 DEM]$ 

3.3 查询参数并记录

[dmdba@dm91 DEM]$ disql SYSDBA/'"Dameng123"':5237
服务器[LOCALHOST:5237]:处于普通打开状态
登录使用时间 : 4.101(ms)
disql V8
SQL> select  PARA_NAME,PARA_VALUE,PARA_TYPE,FILE_VALUE from v$dm_ini where para_name in('SVR_LOG_NAME','SVR_LOG');

行号     PARA_NAME    PARA_VALUE PARA_TYPE FILE_VALUE
---------- ------------ ---------- --------- ----------
1          SVR_LOG_NAME SLOG_ALL   SYS       SLOG_ALL
2          SVR_LOG      0          SYS       0

已用时间: 15.198(毫秒). 执行号:11474501.
SQL> 

参数调整可以使用SP_SET_PARA_STRING_VALUE
或者ALTER SYSTEM SET
调整

SP_SET_PARA_STRING_VALUE(2,'SVR_LOG_NAME','SLOG_ALL,SLOG_DEL,SLOG_DEL,SLOG_SLT,SLOG_ERROR,SLOG_DDL');
ALTER SYSTEM SET 'SVR_LOG_NAME' ='SLOG_ALL,SLOG_DEL,SLOG_DEL,SLOG_SLT,SLOG_ERROR,SLOG_DDL' BOTH

熟悉oracle大佬都了解如何使用,语法如下:

参数详解说明如下

ALTER SYSTEM SET '<参数名称>' =<参数值> [DEFERRED] [MEMORY|BOTH|SPFILE];

  1. <参数名称> 指静态、动态(系统级、会话级)INI 参数名字;
  2. <参数值> 指设置该 INI 参数的值;
  3. [DEFERRED] 只适用于动态会话级参数,若指定 DEFERRED,则参数值延迟生效,对当前会话不生效,只对新创建的会话生效;若不指定 DEFERRED,则参数值立即生效,对当前会话和新创建的会话都生效。针对动态系统级参数,无论是否指定 DEFERRED,参数值均对所有会话生效,包括所有已经创建的会话以及新创建的会话;针对静态参数,指定 DEFERRED 将报错;
  4. [MEMORY|BOTH|SPFILE] 设置 INI 参数修改的位置。其中,MEMORY 只对内存中的 INI 值做修改;SPFILE 则只对 INI 文件中的 INI 值做修改;BOTH 则内存和 INI 文件都做修改。默认情况下,为 MEMORY。对于静态参数,只能指定 SPFILE。

3.4 调整SVR_LOG_NAME参数

SQL> ALTER SYSTEM SET 'SVR_LOG_NAME' ='SLOG_ALL,SLOG_DEL,SLOG_DEL,SLOG_SLT,SLOG_ERROR,SLOG_DDL' BOTH;
DMSQL 过程已成功完成
已用时间: 15.097(毫秒). 执行号:11474502.
SQL> sp_set_para_value(1,'SVR_LOG',1);
DMSQL 过程已成功完成
已用时间: 24.840(毫秒). 执行号:11474503.

使用SP_REFRESH_SVR_LOG_CONFIG重新生效配置

SQL> SP_REFRESH_SVR_LOG_CONFIG();
DMSQL 过程已成功完成
已用时间: 2.500(毫秒). 执行号:11474504.
SQL> select  PARA_NAME,PARA_VALUE,PARA_TYPE,FILE_VALUE from v$dm_ini where para_name in('SVR_LOG_NAME','SVR_LOG');

行号     PARA_NAME    PARA_VALUE                                     PARA_TYPE FILE_VALUE                                             
---------- ------------ ---------------------------------------------- --------- -------------------------------------------------------
1          SVR_LOG_NAME SLOG_ALL,SLOG_ERROR,SLOG_DDL,SLOG_DEL,SLOG_SLT SYS       SLOG_ALL,SLOG_DEL,SLOG_DEL,SLOG_SLT,SLOG_ERROR,SLOG_DDL
2          SVR_LOG      1                                              SYS       1

已用时间: 12.500(毫秒). 执行号:11630703.
SQL> 
SQL> exit

3.5 测试配置参数时候生效

[dmdba@dm91 DEM]$ ls SLOG_SLT/
dmsql_DEM_SLOG_SLT_20250226_090846.log  dmsql_DEM_SLOG_SLT_20250226_090852.log
[dmdba@dm91 DEM]$ disql SYSDBA/'"Dameng123"':5237

服务器[LOCALHOST:5237]:处于普通打开状态
登录使用时间 : 5.252(ms)
disql V8
SQL> SP_SET_PARA_STRING_VALUE(2,'SLOG_DEL,SLOG_DEL,SLOG_SLT,SLOG_ERROR,SLOG_DDL');
SP_SET_PARA_STRING_VALUE(2,'SLOG_DEL,SLOG_DEL,SLOG_SLT,SLOG_ERROR,SLOG_DDL');
第1 行附近出现错误[-2207]:无法解析的成员访问表达式[SP_SET_PARA_STRING_VALUE].
已用时间: 2.101(毫秒). 执行号:0.
SQL> exit
[dmdba@dm91 DEM]$ disql SYSDBA/'"Dameng123"':5237

服务器[LOCALHOST:5237]:处于普通打开状态
登录使用时间 : 5.768(ms)
disql V8
SQL> createtable tsql (idint);
操作已执行
已用时间: 11.435(毫秒). 执行号:11483801.

执行DDL
语句后,目录生成对应的日志,记录结果符合预期。如下图所示:

3.6 测试select记录

--插入数据测试
SQL> insertinto tsql values(1);
影响行数 1

已用时间: 2.912(毫秒). 执行号:11630705.
SQL> insertinto tsql values(2);
影响行数 1

已用时间: 3.026(毫秒). 执行号:11630706.
SQL> commit;
操作已执行
已用时间: 1.795(毫秒). 执行号:11630707.
SQL> 
SQL> select * from tsql;

行号     ID         
---------- -----------
1          1
2          2

执行select
语句后,目录生成对应的日志,记录结果符合预期。如下图所示:

3.7 验证del配置记录

SQL> delete tsql where id=1;
影响行数 1

已用时间: 2.745(毫秒). 执行号:11483807.
SQL> commit;
操作已执行
已用时间: 3.105(毫秒). 执行号:11483808.
SQL> exit

执行delete
语句后,目录生成对应的日志,记录结果符合预期。如下图所示:

4 总结

以上内容是个人针对学习情况所做的总结。若将其应用于生产环境,强烈建议预先做好相关测试工作。

文章转载自国产数据库学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论