请教各位专家,DM8是否会默认对慢查询语句进行记录?如果有的话记录规则是怎么样的?如果需要手动配置,具体有哪些参数可以设置,比如慢查询阈值设置、日志路径设置等对应参数是什么?是否都支持动态配置
sqllog.ini 是 SQL 日志的核心配置文件,仅当 INI 参数 SVR_LOG=1 时生效。 对于运行中的数据库实例,可通过以下命令查询该文件的实际路径:
sqllog.ini
SVR_LOG=1
ps -ef | grep dmserver
执行后,输出结果中会包含数据库进程的启动参数,其中通常会明确 sqllog.ini 的所在目录(如 /dmdata/data/DAMENG/)。
/dmdata/data/DAMENG/
找到文件路径后,使用 vi 编辑器打开并配置参数(示例路径为 /dmdata/data/DAMENG/sqllog.ini,需根据实际路径调整):
vi
/dmdata/data/DAMENG/sqllog.ini
vi /dmdata/data/DAMENG/sqllog.ini
将文件内容配置为以下内容,关键参数已标注用途和取值范围:
# 全局缓冲区配置 BUF_TOTAL_SIZE = 10240 # SQL日志总缓冲区大小(单位:KB),取值范围1024~1024000 BUF_SIZE = 1024 # 单个SQL日志缓冲区大小(单位:KB),取值范围50~409600 BUF_KEEP_CNT = 6 # 保留的SQL日志缓冲区数量,取值范围1~100 # 全量SQL日志配置(SLOG_ALL) [SLOG_ALL] FILE_PATH = /data/sqllog # 日志文件存储路径,需确保目录已创建且权限充足 PART_STOR = 0 # 日志分区存储开关:0=不分区,1=按用户分区存储 SWITCH_MODE = 2 # 日志文件切换模式:2=按文件大小切换(推荐) SWITCH_LIMIT = 256 # 单个日志文件大小限制(单位:MB),默认128,建议256 ASYNC_FLUSH = 1 # 日志刷盘模式:1=异步刷盘(兼顾性能),0=实时刷盘(性能损耗高) FILE_NUM = 20 # 保留的日志文件个数,默认5,建议20(避免日志丢失) ITEMS = 0 # 记录SQL内容范围:0=记录全部内容 SQL_TRACE_MASK= 1 # 日志类型过滤:1=打印全部类型SQL日志 MIN_EXEC_TIME= 0 # 记录的最小执行时间(单位:毫秒):0=不限制 USER_MODE = 0 # 用户过滤开关:0=关闭用户过滤 USERS = # 用户过滤列表(USER_MODE=1时生效),格式:用户名1:用户名2:用户名3 # 错误SQL日志配置(SLOG_ERROR) [SLOG_ERROR] SQL_TRACE_MASK = 23 # 记录错误类SQL:23=包含错误、警告等异常日志 FILE_PATH = /data/sqllog # 错误日志存储路径,可与全量日志同路径 # DDL语句日志配置(SLOG_DDL) [SLOG_DDL] SQL_TRACE_MASK = 3 # 仅记录DDL语句:3=CREATE/ALTER/DROP等DDL操作 # 长SQL日志配置(SLOG_LONG_SQL) [SLOG_LONG_SQL] SQL_TRACE_MASK = 25 # 仅记录长SQL:25=标记为“长执行时间”的SQL MIN_EXEC_TIME = 60000 # 长SQL判定阈值:60000毫秒(即60秒),超过该时间的SQL会被记录
配置完成后,需通过以下两种方式之一开启 SVR_LOG 参数并刷新生效(推荐方式 2,无需编辑配置文件)。
SVR_LOG
dm.ini
vi /dmdata/data/DAMENG/dm.ini # 路径需根据实际情况调整
SVR_LOG = 1
disql
SP_REFRESH_SVR_LOG_CONFIG(); -- 刷新SQL日志配置,使修改生效
直接登录达梦数据库,通过存储过程修改 SVR_LOG 参数并生效(无需编辑文件,更灵活):
-- 步骤1:先关闭SVR_LOG(避免参数冲突) SP_SET_PARA_VALUE(1, 'SVR_LOG', 0); -- 步骤2:重新开启SVR_LOG(启用SQL日志) SP_SET_PARA_VALUE(1, 'SVR_LOG', 1); -- 步骤3:刷新生效配置 SP_REFRESH_SVR_LOG_CONFIG();
配置完成后,可通过以下方式确认 SQL 日志是否正常生成:
/data/sqllog
slog
slog_ALL_20240520_123456.log
SELECT 1;
SQL 日志配置全流程
1. 定位 sqllog.ini 文件路径
sqllog.ini
是 SQL 日志的核心配置文件,仅当 INI 参数SVR_LOG=1
时生效。对于运行中的数据库实例,可通过以下命令查询该文件的实际路径:
执行后,输出结果中会包含数据库进程的启动参数,其中通常会明确
sqllog.ini
的所在目录(如/dmdata/data/DAMENG/
)。2. 编辑 sqllog.ini 配置文件
找到文件路径后,使用
vi
编辑器打开并配置参数(示例路径为/dmdata/data/DAMENG/sqllog.ini
,需根据实际路径调整):核心配置参数说明
将文件内容配置为以下内容,关键参数已标注用途和取值范围:
# 全局缓冲区配置 BUF_TOTAL_SIZE = 10240 # SQL日志总缓冲区大小(单位:KB),取值范围1024~1024000 BUF_SIZE = 1024 # 单个SQL日志缓冲区大小(单位:KB),取值范围50~409600 BUF_KEEP_CNT = 6 # 保留的SQL日志缓冲区数量,取值范围1~100 # 全量SQL日志配置(SLOG_ALL) [SLOG_ALL] FILE_PATH = /data/sqllog # 日志文件存储路径,需确保目录已创建且权限充足 PART_STOR = 0 # 日志分区存储开关:0=不分区,1=按用户分区存储 SWITCH_MODE = 2 # 日志文件切换模式:2=按文件大小切换(推荐) SWITCH_LIMIT = 256 # 单个日志文件大小限制(单位:MB),默认128,建议256 ASYNC_FLUSH = 1 # 日志刷盘模式:1=异步刷盘(兼顾性能),0=实时刷盘(性能损耗高) FILE_NUM = 20 # 保留的日志文件个数,默认5,建议20(避免日志丢失) ITEMS = 0 # 记录SQL内容范围:0=记录全部内容 SQL_TRACE_MASK= 1 # 日志类型过滤:1=打印全部类型SQL日志 MIN_EXEC_TIME= 0 # 记录的最小执行时间(单位:毫秒):0=不限制 USER_MODE = 0 # 用户过滤开关:0=关闭用户过滤 USERS = # 用户过滤列表(USER_MODE=1时生效),格式:用户名1:用户名2:用户名3 # 错误SQL日志配置(SLOG_ERROR) [SLOG_ERROR] SQL_TRACE_MASK = 23 # 记录错误类SQL:23=包含错误、警告等异常日志 FILE_PATH = /data/sqllog # 错误日志存储路径,可与全量日志同路径 # DDL语句日志配置(SLOG_DDL) [SLOG_DDL] SQL_TRACE_MASK = 3 # 仅记录DDL语句:3=CREATE/ALTER/DROP等DDL操作 # 长SQL日志配置(SLOG_LONG_SQL) [SLOG_LONG_SQL] SQL_TRACE_MASK = 25 # 仅记录长SQL:25=标记为“长执行时间”的SQL MIN_EXEC_TIME = 60000 # 长SQL判定阈值:60000毫秒(即60秒),超过该时间的SQL会被记录
3. 启用 SQL 日志并生效
配置完成后,需通过以下两种方式之一开启
SVR_LOG
参数并刷新生效(推荐方式 2,无需编辑配置文件)。方式 1:修改 dm.ini 文件 + 刷新生效
dm.ini
配置文件,将SVR_LOG
设为 1:
在文件中找到vi /dmdata/data/DAMENG/dm.ini # 路径需根据实际情况调整
SVR_LOG
行,修改为:SVR_LOG = 1
disql
),执行刷新生效命令:SP_REFRESH_SVR_LOG_CONFIG(); -- 刷新SQL日志配置,使修改生效
方式 2:纯 SQL 命令修改 + 刷新生效
直接登录达梦数据库,通过存储过程修改
SVR_LOG
参数并生效(无需编辑文件,更灵活):-- 步骤1:先关闭SVR_LOG(避免参数冲突) SP_SET_PARA_VALUE(1, 'SVR_LOG', 0); -- 步骤2:重新开启SVR_LOG(启用SQL日志) SP_SET_PARA_VALUE(1, 'SVR_LOG', 1); -- 步骤3:刷新生效配置 SP_REFRESH_SVR_LOG_CONFIG();
验证配置是否生效
配置完成后,可通过以下方式确认 SQL 日志是否正常生成:
/data/sqllog
),查看是否有新的日志文件生成(文件名通常以slog
开头,如slog_ALL_20240520_123456.log
);SELECT 1;
),查看日志文件中是否包含该 SQL 的记录。