开启DM数据库的SQL日志功能,可以记录已经执行的SQL语句。通过分析日志,可以找出慢的SQL语句,对于SQL语句优化等操作,尤为重要。
前情说明:每创建一个 DM 数据库,就会自动生成 dm.ini 文件。dm.ini 是 DM 数据库启动所必须的配置文件。dm.ini中,有三种参数属性:静态,可以被动态修改,修改后重启服务器才能生效;动态,可以被动态修改,修改后即时生效。动态参数又分为会话级和系统级两种。会话级参数被修改后,新参数值只会影响新创建的会话,之前创建的会话不受影响;系统级参数的修改则会影响所有的会话。
手动,不能被动态修改,必须手动修改 dm.ini 参数文件,然后重启才能生效。动态修改是指 DBA 用户可以在数据库服务器运行期间,通过调用系统过程SP_SET_PARA_VALUE()、SP_SET_PARA_DOUBLE_VALUE()和SP_SET_PARA_STRING_VALUE()对参数值进行修改。而与SQL日志相关的参数SVR_LOG、SVR_LOG_NAME都属于动态系统级。
参数说明:
在dm.ini配置文件中,SVR_LOG缺省值为0。可选参数说明:是否打开 SQL 日志功能,0:表示关闭;1:表示打开;2:按文件中记录数量切换日志文件,日志记录为详细模式;3:不切换日志文件,日志记录为简单模式,只记录时间和原始语句。SVR_LOG_NAME缺省值为SLOG_ALL,使用 SQLLOG.INI 中预设的模式的名称。
总结以上,可以有俩种方式配置SQL日志:
第一种:直接修改dm.ini和sqllog.ini配置文件。只有先把 dm.ini配置文件中,参数 SVR_LOG 置为 1,且 SVR_LOG_NAME 为 SLOG_ALL 时,sqllog.ini 中名称为 SLOG_ALL 的配置块才会生效。若 SVR_LOG 为 1,但不存在sqllog.ini 或 sqllog.ini 配置错误,则仍旧使用 dm.ini 中的“用户请求跟踪相关参数”。
配置sqllog.ini,查看dm.ini的相关参数:
SQL> SELECT para_name,para_value,sess_value,file_value FROM V$DM_INI where para_name in ('SVR_LOG','SVR_LOG_NAME');
行号 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE
---------- ------------ ---------- ---------- ----------
1 SVR_LOG_NAME SLOG_ALL SLOG_ALL SLOG_ALL
2 SVR_LOG 0 0 0
[SLOG_ALL]
FILE_PATH = ..\log #log文件存放的位置
PART_STOR = 0
SWITCH_MODE = 2 #表示 SQL 日志文件切换的模式:0:不切换;1:按文件中记录数量切换;2:按文件大小切换;3:按时间间隔切换
SWITCH_LIMIT = 128
ASYNC_FLUSH = 1 #是否打开异步 SQL 日志功能;1:打开
FILE_NUM = 5 #达到5个sql文件后删除第一个日志文件
ITEMS = 0 #配置 SQL 日志记录中的那些列要被记录,0:表示记录所有的列
SQL_TRACE_MASK = 1 #LOG 记录的语句类型掩码;1:全部记录
MIN_EXEC_TIME = 0 #详细模式下,记录的最小语句执行时间
USER_MODE = 0
USERS =
完整参数配置可参考官网文档:https://eco.dameng.com/document/dm/zh-cn/pm/physical-storage.html
在更改完配置文件后可以选择重启,也可以调用存储过程刷新配置文件:
SP_REFRESH_SVR_LOG_CONFIG() 对后面新的会话生效。
第二种:使用系统存储过程和函数语句完成sql日志配置
修改dm.ini中的参数:SP_SET_PARA_VALUE(1,'SVR_LOG',1);
#记录SQL的类型
SF_SET_SYSTEM_PARA_VALUE('SQL_TRACE_MASK','7:22:25:28',0,1);
#异步记录SQL日志
SF_SET_SYSTEM_PARA_VALUE('SVR_LOG_ASYNC_FLUSH',1,0,1);
#记录执行时间超过30ms的SQL语句
SF_SET_SYSTEM_PARA_VALUE('SVR_LOG_MIN_EXEC_TIME',30,0,1);
#总共记录30个日志文件
SF_SET_SYSTEM_PARA_VALUE('SVR_LOG_FILE_NUM',30,0,1);
SF_SET_SYSTEM_PARA_VALUE功能说明:修改系统整型、double、varchar 的静态配置参数或动态配置参数。
定义:void SF_SET_SYSTEM_PARA_VALUE (
paraname varchar(256),
value bigint\double\varchar(256),
deferred int,
scope int)
参数说明:
paraname:ini 参数的参数名。value:要设置的新值。deferred:是否立即生效。为 0 表示当前 session 修改的参数立即生效,为 1 表示当前 session 不生效,后续再生效,默认为 0。
scope:取值为 0、1、2 。0 表示修改内存中的参数值,1 表示修改内存和INI 文件中参数值,0 和 1 都只能修改动态的配置参数。2 表示修改 INI 文件中参数,此时可用来修改静态配置参数和动态配置参数。
生成的日志名称一般为dmsql_实例名_日期时间.LOG,在数据库中执行增删改查,就可以在日志文件中看到对应的操作时间及其他信息。
使用SELECT para_name,para_value,sess_value,file_value FROM V$DM_INI where para_name
in ('SVR_LOG','SVR_LOG_NAME');可以查看sql日志是否启动成功,为1则启动成功。
更多有关达梦数据库相关内容,可通过以下链接查看