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 组合。
- Filter
Builder - 链式构建组合过滤器。
- LogIterator
- SQL 日志记录的流式迭代器。
- LogParser
- SQL 日志文件解析器。
- LogParser
Builder - 配置并构建
LogParser的构建器模式 API。 - Sqllog
- SQL 日志记录
Enums§
- File
Encoding Hint - 文件编码提示,用于指示日志文件的字符编码。
- Parse
Error - 解析错误类型