在 Oracle 数据库中,当封装的应用运行缓慢时,通常可通过会话级 10046 SQL Trace 对后台所有 SQL 的执行情况进行全面跟踪,精准定位性能瓶颈。
在达梦数据库中,虽然尚未提供完全对等的细粒度跟踪机制,但同样支持类似慢日志记录功能。通过开启相关库级日志,可将关键执行信息记录到日志文件中,包括:, 事务、执行时间、执行用户、客户端IP、SQL文本,客户端工具等会话信息。随后,可使用达梦提供的 dmlog
工具对日志进行分析(支持异地分析),并生成可视化图表。分析结果可按执行时间、逻辑读、物理读等维度排序,呈现类似 Oracle AWR 报告中的“Top SQL by XXX”视图,便于快速识别性能热点 SQL,辅助应用优化与问题排查。
相关参数
在达梦中与SQL日志相关的配置文件:dm.ini 、sqllog.ini
dm.ini配置文件
参数名称 | 缺省值 | 属性 | 说明 |
SVR_LOG | 0 | 动态,系统级 | 是否打开SQL日志功能, 0:表示关闭; 1:表示打开; 2:按文件中记录数量切换日志文件,记录为详细模式; 3:不切换日志文件,简单模式,只记录时间和原始语句 |
SVR_LOG_NAME | SLOG_ALL | 动态,系统级 | 使用SQLLOG.INI中预设的模式的名称 |
SVR_LOG_ASYNC_FLUSH | 0 | 动态,系统级 | 是否打开异步S日志功能, 0:表示关闭; 1:表示打开 |
SVR_LOG_MIN_EXEC_TIME | 0 | 动态,系统级 | 详细模式下,记录的最小语句执行时间,单位为毫秒。执行时间小于该值的语句不记录在日志文件中。有效值范围(0~4294967294) |
SVR_LOG_FILE_PATH | ./LOG | 动态,系统级 | 日志文件所在的文件夹路径 |
SVR_LOG_FILE_NUM | 0 | 动态,系统级 | 保留多少个日志文件,当日志文件达到这个设定值以后,滚动删除历史文件 |
SVR_LOG_SWITCH_COUNT | 100000 | 动态,系统级 | 单个日志最多多少条记录,有效值范围(1000~ 10000000) |
当把SVR_LOG配置为启用模式,SQL日志配置文件中才生效., 修改sqllog的参数,在线修改后执行SP_REFRESH_SVR_LOG_CONFIG() 可以立即生效不用重启实例。配置成功后可在 dmsql 指定目录下生成 dmsql 开头的 log 日志文件。
参数名称 | 缺省值 | 属性 | 说明 |
SQL_TRACE_MASK | 1 | 动态,系统级 | LOG记录的语句类型掩码,32bit整数表示; 1 全部记录,2全部DML,3,全部DDL,其他位还可以更精细化,如SQL_TRACE_MASK = 7:22:25:28 |
FILE_NUM | 0 | 动态,系统级 | 保留多少个日志文件,当日志文件达到这个设定值以后,滚动删除历史文件 |
SWITCH_MODE | 0 | 静态 | SQL日志文件切换的模式: 0:不切换 1:按文件中记录数量切换 2:按文件大小切换 3:按时间间隔切换 |
SWITCH_LIMIT | 100000 | 动态,系统级 | 不同切换模式SWITCH_MODE下,意义不同 |
ASYNC_FLUSH | 0 | 动态,系统级 | 是否打开异步SQL日志功能。0:表示关闭;1:表示打开, 建议打开异步 |
BUF_TOTAL_SIZE | 10240 | 动态,系统级 | SQL日志BUFFER占用空间的上限,单位为KB,取值范围(1024~1024000) |
BUF_SIZE | 1024 | 动态,系统级 | SQL日志BUFFER的空间大小,单位为KB,取值范围(50~409600) |
BUF_KEEP_CNT | 6 | 动态,系统级 | 保留的SQL日志缓存的个数,有效值范围(1~100) |
PART_STOR | 0 | 静态 | SQL日志进行分区存储的划分条件。0不划分;1根据不同用户分布存储 |
USER_MODE | 0 | 静态 | 开启SQL日志按用户过滤功能,0关,1白名单,2黑名单 |
USERS | 配合USER_MODE |
测试
SQL> SP_SET_PARA_VALUE(1,'SVR_LOG',1);
DMSQL 过程已成功完成
vi sqllog.ini
可以配置FILE_PATH 把日志生成到独立目录,防止日志过大或I/O影响。ASYNC_FLUSH 开启异步.
SQL> SP_REFRESH_SVR_LOG_CONFIG();
模拟SLOW SQL,去FILE_PATH目录中查看日志文件,默认日志格式如下:
2025xxxxxxxxx (EP[0] sess:0xxxxx thrd:xxxxxx user:SYSDBA trxid:xxxxx stmt:NULL appname:disql ) FREE SESSION
dmlog工具分析日志
dm有个java分析日志工具dmlog, 需要有jre环境。把日志可以上传到异地分析。 有配置文件dmlog.properties ,修改sqlpath日志文件路径。和其他一些参数,也可以配置Ip 用户密码信息,远程访问。
$ java -jar Dmlog_DM_8.11.jar
Linux
创建分析结果目录RESULT_2xxxxx成功!
----------------分析文件:dmsql_DMSERVER_202xxxxx.log----------------
/dm8/log/sqlpath/dmsql_DMSERVER_202xxxxx.log文件已处理:5000行
/dm8/log/sqlpath/dmsql_DMSERVER_202xxxxx.log文件已处理:10000行
----------------创建索引-------------------------
----------------创建索引成功---------------------
----------------开始分析-------------------------
----------------生成时间维度统计结果-------------
----------------生成次数维度统计结果-------------
----------------生成jfree散点图------------------
----------------生成echart统计图-----------------
----------------生成QPS统计图--------------------
----------------生成echart负载图-----------------
----------------TABLENAME:LOG_COMMIT-------------
----------------分析完毕,请查看结果-------------
生成一个目录文件,文本中有使用baidu的echarts,生成html图表文件echarts_qps.html echarts_scatter_Statistics.html,数据在excel文件more_thanxxx.xls , 不过 注意excel可能会达行数上限,需要手动日志分片。
— over —