Seal^_^头像
关注
DM SQL 日志文件:运维排障与性能优化的核心抓手封面图

DM SQL 日志文件:运维排障与性能优化的核心抓手

一、DM SQL 日志文件概述

1.1 什么是 DM SQL 日志文件

DM SQL 日志文件是达梦数据库 (Dameng Database) 用于记录 SQL 语句执行情况的日志文件,又称为 svr 日志。它由 DM 数据库服务器在运行过程中生成,记录了客户端发送到数据库的所有或部分 SQL 语句,以及执行时长、影响行数、错误码等关键运行时信息。与其他数据库 (如 Oracle 的 trace 文件、MySQL 的 general log) 类似,DM SQL 日志文件是 DBA 进行故障排查、安全审计与性能优化的核心抓手。

1.2 DM SQL 日志文件的核心价值

DM SQL 日志文件在实际生产环境中具有不可替代的作用,主要体现在以下几个方面:

  • 故障排查:当业务出现异常报错或慢响应时,可通过日志快速定位问题 SQL。
  • 性能优化:通过分析 SQL 执行耗时,识别慢 SQL 并进行针对性优化。
  • 安全审计:记录用户操作行为,满足合规审计要求。
  • 行为回溯:在数据被误操作时,可通过日志还原操作过程。
  • 容量评估:通过 SQL 频次与影响行数评估系统负载。

1.3 DM SQL 日志文件与其他日志的关系

DM 数据库提供了多种日志文件,它们各司其职,共同构成完整的日志体系:

DM 数据库日志体系

dm.ini 运行日志

SQL 日志文件 svr_log

重做日志 redo log

归档日志 archive log

数据库启动与运行状态

SQL 执行详情

事务持久化

redo 备份恢复

其中,dm.ini 运行日志侧重数据库自身运行状态,重做日志和归档日志用于事务持久化与备份恢复,而 DM SQL 日志文件则专注于 SQL 级别的执行记录,是本文讨论的核心对象。

二、DM SQL 日志文件的配置与开关

2.1 通过 dm.ini 参数开启 SQL 日志

DM SQL 日志文件的总开关由 dm.ini 参数 SVR_LOG 控制,该参数为静态参数,修改后需要重启数据库实例才能生效。开启步骤如下:

  1. 编辑 dm.ini 文件,找到 SVR_LOG 参数。
  2. 将其值由 0 修改为 1,表示开启 SQL 日志功能。
  3. 保存文件后重启 DM 实例使配置生效。
# dm.ini 关键配置
SVR_LOG = 1

2.2 sqllog.ini 配置详解

SVR_LOG = 1 后,DM 数据库会读取 sqllog.ini 文件来决定 SQL 日志的具体记录策略。sqllog.ini 通常与 dm.ini 位于同一目录下,典型配置如下:

# sqllog.ini
BUF_TOTAL_SIZE   = 10240
BUF_SIZE         = 1024
BUF_KEEP_CNT     = 6
[SLOG_ALL]
    FILE_PATH    = ../log
    PART_STOR    = 0
    SWITCH_MODE  = 2
    SWITCH_LIMIT = 512
    ASYNC_FLUSH  = 1
    FILE_NUM     = 10
    ITEMS        = 0
    SQL_TRACE_MASK = 2:3
    MIN_EXEC_TIME = 0
    USER_MODE    = 0
    USERS        =

2.3 关键参数说明

下表对 sqllog.ini 中的高频参数进行重点说明:

| 参数 | 含义 | 推荐值 |

| --- | --- | --- |

| BUF_TOTAL_SIZE | 日志 buffer 总大小,影响写入性能 | 10240 或更大 |

| SWITCH_MODE | 日志切换模式,推荐按时间切换 | 2 |

| SWITCH_LIMIT | 切换上限,模式 2 时单位为分钟 | 60 |

| FILE_NUM | 保留的日志文件数量,超出后自动删除 | 10 至 30 |

| ASYNC_FLUSH | 异步刷新,建议 1 以降低业务影响 | 1 |

| MIN_EXEC_TIME | 最小执行时间阈值,用于只记录慢 SQL | 视场景而定 |

| SQL_TRACE_MASK | SQL 类型掩码,控制记录哪些类型 SQL | 2:3 |

| USERS | 指定用户过滤,多个用逗号分隔 | 按需配置 |

各参数协同工作的整体流程如下:

1 异步0 同步

SQL 到达服务器

SVR_LOG 是否开启

不记录

读取 sqllog.ini

SQL 类型是否命中掩码

是否满足 MIN_EXEC_TIME

用户是否在过滤范围

写入 buffer

ASYNC_FLUSH

后台线程刷新到文件

直接刷新到文件

三、DM SQL 日志文件的管理与运维

3.1 日志文件位置与命名规则

DM SQL 日志文件默认存放在 DM 安装目录下的 log 子目录中,文件命名遵循 dmsql_实例名_日期_时间.log 的规则。例如:

dmsql_DMSERVER_20240101_120000.log

当 SWITCH_MODE = 2 时,系统会按 SWITCH_LIMIT 指定的时间间隔自动切换日志文件,旧文件按 FILE_NUM 数量保留,超出部分会被自动清理。

3.2 日志切换与清理策略

合理的日志切换与清理策略既能保证日志可追溯,又能避免磁盘被撑满。整体策略流程如下:

按时间 SWITCH_LIMIT按大小 SWITCH_LIMIT

SQL 日志写入当前文件

达到切换条件

关闭当前文件

生成新日志文件

当前文件数大于 FILE_NUM

删除最旧文件

继续写入新文件

生产环境建议:

  1. SWITCH_MODE 设置为 2,按小时切换,便于按时间段排查问题。
  2. FILE_NUM 根据磁盘容量设置,一般保留 7 天左右的日志。
  3. 对历史日志定期归档到对象存储或日志分析平台。

3.3 动态开启与关闭 SQL 日志

在生产环境中,有时需要临时开启 SQL 日志抓取问题,而不希望重启数据库。DM 提供了系统过程来动态控制 SQL 日志:

-- 动态修改 SVR_LOG 参数
CALL SP_SET_PARA_VALUE(1, 'SVR_LOG', 1);
-- 重新加载 sqllog.ini 配置
CALL SP_REFRESH_SVR_LOG_CONFIG();
-- 关闭 SQL 日志
CALL SP_SET_PARA_VALUE(1, 'SVR_LOG', 0);

动态开关的执行流程:

DBA 调用系统过程

修改内存参数

立即生效

无需重启实例

继续对外提供服务

注意:动态修改仅在内存生效,若需持久化,仍需同步修改 dm.ini 和 sqllog.ini 文件,否则实例重启后配置会丢失。

四、DM SQL 日志文件的分析与应用

4.1 日志格式解析

DM SQL 日志文件采用文本格式存储,每条记录包含丰富的执行上下文。典型日志格式如下:

2024-01-01 12:00:00.123 [INFO] session[1234] user[SYSDBA] ip[192.168.1.100]
SQL: SELECT * FROM T1 WHERE ID = 1;
EXECTIME: 3(ms) ROWS: 1 ERRORCODE: 0

关键字段含义:

  • 时间戳:精确到毫秒,用于分析执行顺序。
  • session:会话 ID,用于关联同一会话的多条 SQL。
  • user:执行用户,用于审计。
  • ip:客户端 IP,用于定位来源。
  • SQL:实际执行的 SQL 语句。
  • EXECTIME:执行耗时,单位毫秒。
  • ROWS:影响或返回的行数。
  • ERRORCODE:错误码,0 表示成功。

4.2 慢 SQL 定位实战

慢 SQL 定位是 DM SQL 日志文件最常见的应用场景。利用 Linux 文本处理工具,可以快速筛选出耗时较高的 SQL:

# 提取所有 EXECTIME 大于 100ms 的日志行
grep "EXECTIME" dmsql_DMSERVER_*.log | awk -F'EXECTIME: ' '{print $2}' | awk -F'(ms)' '$1 > 100 {print}' | sort -nr | head -20

慢 SQL 定位分析流程:

收集 DM SQL 日志文件

按 EXECTIME 过滤

排序提取 Top N

关联 SQL 文本

执行计划分析

索引或统计信息或重写优化

验证优化效果

4.3 性能优化案例

某业务系统在高峰期出现接口超时,通过 DM SQL 日志文件定位到如下慢 SQL:

SQL: SELECT COUNT(*) FROM ORDER_DETAIL WHERE CREATE_TIME >= '2024-01-01';
EXECTIME: 3580(ms) ROWS: 1 ERRORCODE: 0

优化步骤:

  1. 通过 EXPLAIN 查看执行计划,发现全表扫描。
  2. 检查表结构,发现 CREATE_TIME 字段无索引。
  3. 创建 B 树索引:CREATE INDEX IDX_ORDER_DETAIL_TIME ON ORDER_DETAIL(CREATE_TIME);
  4. 重新执行,耗时降至 12ms。
  5. 更新统计信息:STAT TABLE ORDER_DETAIL;

SQL 耗时 3580ms

EXPLAIN 全表扫描

创建时间索引

更新统计信息

耗时降至 12ms

五、常见问题与最佳实践

5.1 性能影响评估

开启 DM SQL 日志文件会对数据库产生一定开销,主要体现在:

  • 磁盘 I/O:日志写入占用磁盘吞吐。
  • CPU 与内存:日志格式化与 buffer 管理。
  • 锁竞争:高并发下日志写入可能成为瓶颈。

建议生产环境采用 ASYNC_FLUSH = 1 异步刷新,并合理设置 MIN_EXEC_TIME 只记录慢 SQL,以将性能影响降至最低。性能开销与配置关系如下图:

阈值大阈值小或 0

SQL 日志性能开销

同步刷新 ASYNC_FLUSH=0

异步刷新 ASYNC_FLUSH=1

高开销 业务感知明显

低开销 业务基本无感

MIN_EXEC_TIME 过滤

记录量少 开销小

记录量大 开销上升

5.2 常见问题排查

  1. SQL 日志未生成:检查 dm.ini 中 SVR_LOG 是否为 1,sqllog.ini 是否存在且路径正确。
  2. 日志文件过大:调整 SWITCH_MODE 和 SWITCH_LIMIT,控制单文件大小。
  3. 磁盘被撑满:减小 FILE_NUM,或开启 MIN_EXEC_TIME 过滤。
  4. 动态修改未生效:确认是否调用了 SP_REFRESH_SVR_LOG_CONFIG 重新加载配置。
  5. 日志缺少部分 SQL:检查 SQL_TRACE_MASK 掩码和 USERS 过滤配置。
  6. 日志写入延迟:确认 ASYNC_FLUSH 是否开启,buffer 大小是否充足。

5.3 最佳实践建议

  1. 分级开启:生产环境可仅记录慢 SQL (MIN_EXEC_TIME 设为 100),测试环境全量记录。
  2. 异步刷新:始终启用 ASYNC_FLUSH = 1,降低业务影响。
  3. 定时归档:通过 cron 定期压缩归档历史日志,保留 7 至 30 天。
  4. 集中分析:将日志采集到 ELK 或类似平台,实现可视化分析。
  5. 安全管控:SQL 日志可能包含敏感数据,需控制访问权限并加密存储。
  6. 版本兼容:不同 DM 版本参数略有差异,升级前需重新核对配置。
  7. 监控告警:对日志目录磁盘使用率设置告警,避免日志撑满磁盘导致数据库异常。

DM SQL 日志文件最佳实践

配置层

运维层

分析层

异步刷新与慢 SQL 过滤

定时归档与磁盘告警

集中采集与可视化

稳定高效运行

通过以上配置与管理策略,DM SQL 日志文件将成为数据库运维排障与性能优化的得力助手,帮助 DBA 在复杂生产环境中快速定位问题、持续优化系统性能。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/qq_41840843/article/details/163764458

文章来源crawl

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--