用户在 dm.ini 中配置 SVR_LOG 和 SVR_LOG_SWITCH_COUNT 参数后就会打开跟踪日志。跟踪日志文件是一个纯文本文件,以“dm_commit_日期_时间” 命名,
默认生成在 DM安装目录的 log 子目录下面,管理员可通过 ini 参数 SVR_LOG_FILE_PATH 设置其生成路径。
跟踪日志内容包含系统各会话执行的 SQL 语句、参数信息、错误信息等。 跟踪日志主要用于分析错误和分析性能问题,基于跟踪日志可以对系统运行状态有一个分析,比如,可以挑出系统现在执行速度较慢的 SQL 语句,进而对其进行优化。
如果将 DM 数据库配置文件中的参数 SVR_LOG 设置为 1,则系统还会在刚才的log 目录下生成名为 dmsql_DMSERVER_XX.log 的文件,在该文件中记录了启用SVR_LOG
之后数据库接收到的所有SQL语句等信息,DBA也可以通过分析该文件来帮助解决问题。
系统中 SQL 日志的缓存是分块循环使用,管理员可根据系统执行的语句情况及压力情况设置恰当的日志缓存块大小及预留的缓冲块个数。当预留块不足以记录系统产生的任务时,系
统会分配新的用后即弃的缓存块,但是总的空间大小由ini参数SVR_LOG_BUF_TOTAL_SIZE
控制,管理员可根据实际情况进行设置。
打开跟踪日志会对系统的性能会有较大影响,一般用于查错和调优的时候才会打开,默认情况下系统是关闭跟踪日志的。若需要跟踪日志但对日志的实时性没有严格的要求,又希望系统有较高的效率,可以设置参数SQL_TRACE_MASK和SVR_LOG_MIN_EXEC_TIME 只记录关注的相关记录,减少日志总量;设置参数 SVR_LOG_ASYNC_FLUSH 打开 SQL 日志异步刷盘提高系统性能。
以下我们以实际配置过程演示开启和关闭sql日志的全过程,同时关键步骤我会进行注释说明。
1、检查当前数据库参数配置信息
SQL> select trace_name from v$process;
行号 TRACE_NAME
---------- ----------
1
已用时间: 2.004(毫秒). 执行号:206.
SQL> select para_name,para_value,para_type,description from v$dm_ini where para
_name = 'SVR_LOG_FILE_PATH';
行号 PARA_NAME PARA_VALUE PARA_TYPE DESCRIPTION
---------- ----------------- ---------- --------- ----------------------
1 SVR_LOG_FILE_PATH ..\log SYS File Path for SQLs Log
已用时间: 3.408(毫秒). 执行号:207.
SQL>
-- 用来查看SQL 日志路径,若INI参数SVR_LOG为0,则值为空串,也可以就此判断SQL日志是否已经开启。
--以下SQL分别用来检查SVR_LOG_ASYNC_FLUSH、SVR_LOG 、SQL_TRACE_MASK、SVR_LOG_MIN_EXEC_TIME参数的值,当前结果全部为默认值。
SQL> select para_name,para_value,para_type,description from v$dm_ini where para_name = 'SVR_LOG_ASYNC_FLUSH';
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- ------------------- ---------- ---------
DESCRIPTION
-------------------------------------------------------------------
1 SVR_LOG_ASYNC_FLUSH 0 SYS
Whether to enable asynchronous refresh method when logging SQLs into
SQLs record file
已用时间: 7.633(毫秒). 执行号:208.
SQL> select para_name,para_value,para_type,description from v$dm_ini where para_name = 'SQL_TRACE_MASK';
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- -------------- ---------- ---------
DESCRIPTION
-------------------------------------------------------------------
1 SQL_TRACE_MASK 1 SYS
A mask value that indicates what type of SQL requests need to be logg
ed into SQLs record file
已用时间: 3.837(毫秒). 执行号:209.
SQL> select para_name,para_value,para_type,description from v$dm_ini where para_name = 'SVR_LOG_MIN_EXEC_TIME';
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- --------------------- ---------- ---------
DESCRIPTION
---------------------------------------
1 SVR_LOG_MIN_EXEC_TIME 0 SYS
minimum execute time(ms) of SQLs logged
已用时间: 4.161(毫秒). 执行号:211.
SQL> select para_name,para_value,para_type,description from v$dm_ini where para_name = 'SVR_LOG';
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- --------- ---------- ---------
DESCRIPTION
-------------------------------------------------------------------
1 SVR_LOG 1 SYS
Whether the Sql Log sys Is open or close. 1:open, 0:close, 2:use swit
ch and detail mode. 3:use not switch and simple mode.
已用时间: 3.329(毫秒). 执行号:212.
SQL>可以看到,para_type为sys,说明是可以动态调整的,可以从参数的描述中我们看到,该参数用于是否打开 SQL 日志功能, 0:表示关闭; 1:表示打开; 2:按文件中记录数量切换日志文件,日志记录为详细模式; 3:不切换日志文件,日志记录为简单模式,只记录时间和原始语句,我们此时查到的值为0,说明此时SQL日志功能是关闭的。
2、开启 SQL 日志,SVR_LOG为系统动态参数,可以在线进行调整,不需要重启数据库生效。
SQL> SP_SET_PARA_VALUE(1, 'SVR_LOG', 1);
DMSQL 过程已成功完成
已用时间: 16.643(毫秒). 执行号:213.3、配置相关参数,以减少对数据库性能的消耗
在此,在此强调,打开跟踪日志会对系统的性能会有较大影响,一般用于查错和调优的时候才会打开,默认情况下系统是关闭跟踪日志的。若需要跟踪日志但对日志的实时性没有严格的要求,又希望系统有较高的效率,可以设置参数SQL_TRACE_MASK和SVR_LOG_MIN_EXEC_TIME只记录关注的相关记录,减少日志总量;设置参数 SVR_LOG_ASYNC_FLUSH 打开 SQL 日志异步刷盘提高系统性能。
--以下配置SF_SET_SYSTEM_PARA_VALUE设置SQL过滤规则,只记录必要的SQL生产环境不要设成1,所以开启SQL日志,该参数必须进行同步调整,此处设置为2:(只记录 DML 语句)3:(只记录 DDL 语句)22:(记录绑定参数的语句)25:(记录 SQL 语句和它的执行时间)28(记录 SQL 语句绑定的参数信息),最后有该参数的所有参数值,具体需求可以根据以下格式补充到里面即可。
SQL> CALL SF_SET_SYSTEM_PARA_VALUE('SQL_TRACE_MASK','2:3:22:25:28',0,1);
DMSQL 过程已成功完成
已用时间: 15.091(毫秒). 执行号:214.
--设置异步日志,在生产环境该参数必须设置,默认为同步日志会严重影响系统效率
SQL> CALL SF_SET_SYSTEM_PARA_VALUE('SVR_LOG_ASYNC_FLUSH',1,0,1);
DMSQL 过程已成功完成
已用时间: 13.051(毫秒). 执行号:215.
--设置只记录执行时间超过200ms的语句,默认为0
SQL> CALL SF_SET_SYSTEM_PARA_VALUE('SVR_LOG_MIN_EXEC_TIME',200,0,1);
DMSQL 过程已成功完成
已用时间: 13.346(毫秒). 执行号:216.
SQL>4、检查配置结果
SQL> select trace_name from v$process;
行号 TRACE_NAME
---------- ----------
1 ..\log
已用时间: 2.786(毫秒). 执行号:217.
SQL>
SQL> select para_name,para_value,para_type,description from v$dm_ini where para_
name = 'SVR_LOG_ASYNC_FLUSH';
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- ------------------- ---------- ---------
DESCRIPTION
-------------------------------------------------------------------
1 SVR_LOG_ASYNC_FLUSH 1 SYS
Whether to enable asynchronous refresh method when logging SQLs into
SQLs record file
已用时间: 3.350(毫秒). 执行号:218.
SQL> select para_name,para_value,para_type,description from v$dm_ini where para_
name = 'SQL_TRACE_MASK';
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- -------------- ------------ ---------
DESCRIPTION
-------------------------------------------------------------------
1 SQL_TRACE_MASK 2:3:22:25:28 SYS
A mask value that indicates what type of SQL requests need to be logg
ed into SQLs record file
已用时间: 3.230(毫秒). 执行号:219.
SQL> select para_name,para_value,para_type,description from v$dm_ini where para_
name = 'SVR_LOG_MIN_EXEC_TIME';
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- --------------------- ---------- ---------
DESCRIPTION
---------------------------------------
1 SVR_LOG_MIN_EXEC_TIME 200 SYS
minimum execute time(ms) of SQLs logged
已用时间: 3.511(毫秒). 执行号:220.
SQL> select para_name,para_value,para_type,description from v$dm_ini where para
_name = 'SVR_LOG';
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- --------- ---------- ---------
DESCRIPTION
-------------------------------------------------------------------
1 SVR_LOG 1 SYS
Whether the Sql Log sys Is open or close. 1:open, 0:close, 2:use swit
ch and detail mode. 3:use not switch and simple mode.
已用时间: 4.756(毫秒). 执行号:221.
SQL>5、运行足够分析系统问题的时间后,关闭SQL日志
SQL> SP_SET_PARA_VALUE(1, 'SVR_LOG', 0);
DMSQL 过程已成功完成
已用时间: 13.226(毫秒). 执行号:222.
SQL> select para_name,para_value,para_type,description from v$dm_ini where para
_name = 'SVR_LOG';
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- --------- ---------- ---------
DESCRIPTION
-------------------------------------------------------------------
1 SVR_LOG 0 SYS
Whether the Sql Log sys Is open or close. 1:open, 0:close, 2:use swit
ch and detail mode. 3:use not switch and simple mode.
已用时间: 2.825(毫秒). 执行号:223.
SQL>注意:SQL日志产生的文件为文本文件,位置在我们上面查到的../log目录下,../代表的是达梦数据库的安装目录,此处为C:\dmdbms,进入目录找到dmsql_或者dm_commit开头的日志文件,用文本编辑工具打开就可以了,如下图所示。

在以上配置完成后,如果有更细粒度的配置,可以配置sqllog.ini文件参数,该参数的前提必须把INI参数SVR_LOG置为1,如果在服务器运行过程中,修改了sqllog.ini文件。修改之后的文件,只要调用过程SP_REFRESH_SVR_LOG_CONFIG()
就会生效,也是不需要重启数据的。
sqllog.ini的详细配置请参考下表。
|
参数名 |
缺省值 |
属性 |
说明 |
|
SQL_TRACE_MASK |
1 |
动态,系统级 |
LOG 记录的语句类型掩码,是一个格式化的字符串,表示一个 32 位整数上哪一位将被置为 1,置为 1 的位则表示该类型的语句要记录,格式为: 位号:位号:位号。列如:
3:5:7 表示第 3,第 5,第 7 位上的值被置为 1。每一位的含义见下面说明(2~17 前提是:SQL 标记位 24 也要置): 1 全部记录(全部记录并不包含原始语句) 2 全部 DML 类型语句 3 全部 DDL 类型语句 4 UPDATE 类型语句(更新) 5 DELETE 类型语句(删除) 6 INSERT 类型语句(插入) 7 SELECT 类型语句(查询) 8 COMMIT 类型语句(提交) 9 ROLLBACK 类型语句(回滚) 10 CALL 类型语句(过程调用) 11 BACKUP 类型语句(备分) 12 RESTORE 类型语句(恢复) 13 创建对象操作(CREATE DDL) 14 修改对象操作(ALTER DDL) 15 删除对象操作(DROP DDL) 16 授权操作(GRANT DDL) 17 回收操作(REVOKE DDL) 22 绑定参数 23 存在错误的语句(语法错误,语义分析错误等) 24 是否需要记录执行语句 25 是否需要打印计划和语句执行的时间 26 是否需要记录执行语句的时间 27 原始语句(服务器从客户端收到的未加分析的语句) 28 是否记录参数信息,包括参数的序号、数据类型和值 29 是否记录事务相关事件 |
|
SWITCH_LIMIT |
100000 |
动态,系统级 |
不同切换模式 SWITCH_MODE 下,意义不同: u 按数量切换时,一个日志文件中的 SQL 记录条数达到多少条之后系统会自动将日志切换到另一个文件中。一个日志文件中的
SQL 记录条数达到多少条之后系统会自动将日志切换到另一个文件中。有效值范围(1000~ 10000000) u 按文件大小切换时,一个日志文件达到该大小后, 系统自动将日志切换到另一个文件中,单位为 M。有效值范围(1~ 2000) u 按时间间隔切换时,每个指定的时间间隔,按文件新建时间进行文件切换,单位为分钟。有效值范围(1~ 30000) |
|
ASYNC_FLUSH |
0 |
动态,系统级 |
是否打开异步 SQL 日志功能。 0:表示关闭; 1:表示打开 |
|
MIN_EXEC_TIME |
0 |
动态,系统级 |
详细模式下,记录的最小语句执行时间,单位为毫秒。执行时间小于该值的语句不记录在日志文件中。有效值范围(0~ 4294967294) |
|
FILE_PATH |
..\LOG |
动态,系统级 |
日志文件所在的文件夹路径 |
|
BUF_SIZE |
1024 |
动态,系统级 |
一块 SQL 日志 BUFFER
的空间大小,单位为 KB,取值范围(50~409600) |
|
BUF_KEEP_CNT |
6 |
动态,系统级 |
系统保留的 SQL 日志缓存的个数, 有效值范围(1~ 100) |
|
PART_STOR |
0 |
手动 |
SQL 日志分区存储,表示 SQL 日志进行分区存储的划分条件。 0 表示不划分; 1 表示 USER: 根据不同用户分布存储 |
|
ITEMS |
0 |
手动 |
配置 SQL 日志记录中的那些列要被记录。该参数是一个格式化的字符串,表示一个记录中的那些项目要被记录,格式为:列号:列号:列号。列如:
3:5:7 表示第 3,第 5,第 7 列要被记录。 0 表示记录所有的列 1 TIME 执行的时间 2 SEQNO 服务器的站点号 3 SESS 操作的 SESS 地址 4 USER 执行的用户 5 TRXID 事务 ID 6 STMT 语句地址 7 APPNAME 客户端工具 8 IP 客户端 IP 9 STMT_TYPE 语句类型 10 INFO 记录内容 11 RESULT 运行结果,包括运行用时和影响行数(可能没有) |
|
USER_MODE |
0 |
手动 |
SQL 日志按用户过滤时的过滤模式,取值 0:关闭用户过滤 1:白名单模式,只记录列出的用户操作的SQL 日志 2:黑名单模式,列出的用户不记录 SQL 日志 |
|
USERS |
空串 |
手动 |
打开 SVR_LOG_USER_MODE 时指定的用户列表。格式为:用户名:用户名:用户名 |
|
FILE_NUM |
0 |
动态,系 |
总共记录多少个日志文件,当日志文件达到这个设定值以后,再生成新的文件时,会删除最早的那个日志文件,日志文件的命令格式为
DMSQL_实例名_日期时间.LOG。当这个参数配置成 0 时, 只会生成两个日志相互切换着记录。有效值范围(0~1024)。例如,
当FILE_NUM=0, 实例名为 PDM 时, 根据当时的日期时间,生成的日志名称为:DMSQL_PDM_20180719_163701.LOG,DMSQL_PDM_20180719_163702.LOG |
|
SWITCH_MODE |
0 |
手动 |
表示 SQL 日志文件切换的模式: 0:不切换 1:按文件中记录数量切换 2:按文件大小切换 3:按时间间隔切换 |
|
BUF_TOTAL_SIZE |
10240 |
动态,系 |
SQL 日志 BUFFER 占用空间的上限,单位为 KB,取值范围(1024~1024000) |
注意:只有把 INI 参数SVR_LOG置为1且
SVR_LOG_NAME 为SLOG_ALL时,sqllog.ini
中名称为SLOG_ALL的配置块才会生效。若SVR_LOG为1,但不存在sqllog.ini或sqllog.ini配置错误,则仍旧使用dm.ini中的“用户请求跟踪相关参数”。
例如: 下面是一个 SVR_LOG_NAME 为 SLOG_ALL 的 sqllog.ini 的例子:
#comment: delete '#' at the beginning of a line to uncomment the line
#注释:删除行开头的'#'号可以取消注释
#详情请参考 DM 系统管理员手册
BUF_TOTAL_SIZE = 10240 #SQLs Log Buffer Total Size(K)(1024~1024000)
BUF_SIZE = 1024 #SQLs Log Buffer Size(K)(50~409600)
BUF_KEEP_CNT = 6 #SQLs Log buffer keeped count(1~100)
[SLOG_ALL]
FILE_PATH = ..\log
PART_STOR = 0
SWITCH_MODE = 0
SWITCH_LIMIT = 0
ASYNC_FLUSH = 0
FILE_NUM = 0
ITEMS = 0
SQL_TRACE_MASK = 0
MIN_EXEC_TIME = 0
USER_MODE = 0
USERS =



