Skip to main content

Crate dm_database_parser_sqllog

Crate dm_database_parser_sqllog 

Source
Expand description

§DM Database Parser - SQL Log

一个高性能的达梦数据库 SQL 日志解析器,支持流式处理。

§功能特性

  • 高性能解析: 使用内存映射和预编译模式优化性能
  • 简洁的 API: 所有字段在解析时一次性填充,直接访问
  • 完整的类型安全: 使用强类型结构表示日志数据
  • 详细的错误信息: 提供清晰的错误类型和消息

§快速开始

以下示例展示了最常见的三种使用场景。所有示例假设日志文件为 sqllog.txt

§示例 1:基础迭代

使用 LogParserBuilder 构建解析器,遍历所有 SQL 记录并打印时间戳和 SQL 语句体。

use dm_database_parser_sqllog::LogParserBuilder;

let parser = LogParserBuilder::new("sqllog.txt").build()?;
for result in parser.iter() {
    let record = result?;
    println!("时间戳: {}", record.ts);
    println!("SQL: {}", record.sql);
}

§示例 2:过滤慢查询

使用 filter_by_exec_time(100.0) 过滤出执行时间 >= 100ms 的慢查询。

use dm_database_parser_sqllog::LogParserBuilder;

let parser = LogParserBuilder::new("sqllog.txt").build()?;
for record in parser.iter().filter_by_exec_time(100.0) {
    let sqllog = record?;
    println!("{}ms - {}", sqllog.exectime, sqllog.sql);
}

§示例 3:批量导出

收集所有记录,提取元数据字段和 SQL 语句体。

use dm_database_parser_sqllog::LogParserBuilder;

let parser = LogParserBuilder::new("sqllog.txt").build()?;
let records: Vec<_> = parser.iter().filter_map(|r| r.ok()).collect();
for sqllog in &records {
    println!("{} | {} | {}", sqllog.ts, sqllog.username, sqllog.sql);
}

§日志格式

支持的日志格式示例:

2025-08-12 10:57:09.548 (EP[0] sess:123 thrd:456 user:alice trxid:789 stmt:999 appname:myapp) SELECT * FROM table

可选的性能指标:

SELECT * FROM table EXECTIME: 10.5(ms) ROWCOUNT: 100(rows) EXEC_ID: 12345.

Structs§

Filter
组合过滤器,持有所有谓词的 AND 组合。
FilterBuilder
链式构建组合过滤器。
LogIterator
SQL 日志记录的顺序迭代器。
LogParser
SQL 日志文件解析器。
LogParserBuilder
配置并构建 LogParser 的构建器模式 API。
Sqllog
SQL 日志记录

Enums§

FileEncodingHint
文件编码提示,用于指示日志文件的字符编码。
ParseError
解析错误类型