达梦如何开启SQL慢日志跟踪?

在 Oracle 数据库中,当封装的应用运行缓慢时,通常可通过会话级 10046 SQL Trace 对后台所有 SQL 的执行情况进行全面跟踪,精准定位性能瓶颈。

在达梦数据库中,虽然尚未提供完全对等的细粒度跟踪机制,但同样支持类似慢日志记录功能。通过开启相关库级日志,可将关键执行信息记录到日志文件中,包括:, 事务、执行时间、执行用户、客户端IP、SQL文本,客户端工具等会话信息。随后,可使用达梦提供的 dmlog 工具对日志进行分析(支持异地分析),并生成可视化图表。分析结果可按执行时间、逻辑读、物理读等维度排序,呈现类似 Oracle AWR 报告中的“Top SQL by XXX”视图,便于快速识别性能热点 SQL,辅助应用优化与问题排查。

相关参数

在达梦中与SQL日志相关的配置文件:dm.ini 、sqllog.ini

dm.ini配置文件

参数名称缺省值属性说明
SVR_LOG0动态,系统级是否打开SQL日志功能,
0:表示关闭;
1:表示打开;
2:按文件中记录数量切换日志文件,记录为详细模式;
3:不切换日志文件,简单模式,只记录时间和原始语句
SVR_LOG_NAMESLOG_ALL动态,系统级使用SQLLOG.INI中预设的模式的名称
SVR_LOG_ASYNC_FLUSH0动态,系统级是否打开异步S日志功能, 0:表示关闭; 1:表示打开
SVR_LOG_MIN_EXEC_TIME0动态,系统级详细模式下,记录的最小语句执行时间,单位为毫秒。执行时间小于该值的语句不记录在日志文件中。有效值范围(0~4294967294)
SVR_LOG_FILE_PATH./LOG动态,系统级日志文件所在的文件夹路径
SVR_LOG_FILE_NUM0动态,系统级保留多少个日志文件,当日志文件达到这个设定值以后,滚动删除历史文件
SVR_LOG_SWITCH_COUNT100000动态,系统级单个日志最多多少条记录,有效值范围(1000~ 10000000)
sqllog.ini

当把SVR_LOG配置为启用模式,SQL日志配置文件中才生效., 修改sqllog的参数,在线修改后执行SP_REFRESH_SVR_LOG_CONFIG() 可以立即生效不用重启实例。配置成功后可在 dmsql 指定目录下生成 dmsql 开头的 log 日志文件。
参数名称缺省值属性说明
SQL_TRACE_MASK1动态,系统级LOG记录的语句类型掩码,32bit整数表示; 1 全部记录,2全部DML,3,全部DDL,其他位还可以更精细化,如SQL_TRACE_MASK = 7:22:25:28
FILE_NUM0动态,系统级保留多少个日志文件,当日志文件达到这个设定值以后,滚动删除历史文件
SWITCH_MODE0静态SQL日志文件切换的模式: 0:不切换 1:按文件中记录数量切换 2:按文件大小切换 3:按时间间隔切换
SWITCH_LIMIT100000动态,系统级不同切换模式SWITCH_MODE下,意义不同
ASYNC_FLUSH0动态,系统级是否打开异步SQL日志功能。0:表示关闭;1:表示打开, 建议打开异步
BUF_TOTAL_SIZE10240动态,系统级SQL日志BUFFER占用空间的上限,单位为KB,取值范围(1024~1024000)
BUF_SIZE1024动态,系统级SQL日志BUFFER的空间大小,单位为KB,取值范围(50~409600)
BUF_KEEP_CNT6动态,系统级保留的SQL日志缓存的个数,有效值范围(1~100)
PART_STOR0静态SQL日志进行分区存储的划分条件。0不划分;1根据不同用户分布存储
USER_MODE0静态开启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 —

Leave a Comment