• DMSQL记录日志跟踪功能


    背景

    当需要抓取数据库运行的sql,或分析数据库运行情况时,可以通过开启SQL跟踪的功能记录数据库运行的SQL日志。

    配置

    控制SQL日志开关

    开启SQL日志跟踪

    -- sysdba 登入数据库
    SP_SET_PARA_VALUE(1, 'SVR_LOG', 1);
    

    它将会记录达梦安装目录下的log文件夹里中的dmsql_*.log文件。注意:磁盘空间

    关闭SQL日志跟踪

    SP_SET_PARA_VALUE(1, 'SVR_LOG', 0);
    

    动态修改配置参数项

    -- 设置 SQL 过滤规则,只记录必要的 SQL,生产环境不要设成 1
    -- 2 只记录 DML 语句    3 只记录 DDL 语句   22 记录绑定参数的语句
    -- 25 记录 SQL 语句和它的执行时间    28 记录 SQL 语句绑定的参数信息
    SELECT SF_SET_SYSTEM_PARA_VALUE('SQL_TRACE_MASK','2:3:22:25:28',0,1);
    
    -- 同步日志会严重影响系统效率,生产环境必须设置为异步日志
    SELECT SF_SET_SYSTEM_PARA_VALUE('SVR_LOG_ASYNC_FLUSH',1,0,1);
    
    -- 下面这个语句设置只记录执行时间超过 200 ms 的语句
    SELECT SF_SET_SYSTEM_PARA_VALUE('SVR_LOG_MIN_EXEC_TIME',200,0,1);
    
    -- 下面的语句查看设置是否生效
    SELECT * FROM V$DM_INI where para_name='SVR_LOG_ASYNC_FLUSH';
    SELECT * FROM V$DM_INI where para_name='SQL_TRACE_MASK';
    SELECT * FROM V$DM_INI where para_name='SVR_LOG_MIN_EXEC_TIME';
    

    配置文件(sqllog.ini)

    详见DM8系统管理员手册.pdf中 sqllog.ini 详细介绍

    BUF_TOTAL_SIZE          = 10240         #SQL 日志 BUFFER 占用空间的上限,单位为 KB,取值范围(1024~1024000)
    BUF_SIZE                = 1024          #一块 SQL 日志 BUFFER 的空间大小,单位为 KB,取值范围(50~409600)
    BUF_KEEP_CNT            = 6             #系统保留的 SQL 日志缓存的个数, 有效值范围(1~ 100)
    
    [SLOG_ALL]
        FILE_PATH    = ..\log    #日志文件所在的文件夹路径
        PART_STOR    = 0		 #系统保留的 SQL 日志缓存的个数, 有效值范围(1~ 100)
        SWITCH_MODE  = 2         #表示 SQL 日志文件切换的模式:
    							0:不切换
    							1:按文件中记录数量切换
    							2:按文件大小切换
    							3:按时间间隔切换
        SWITCH_LIMIT   = 100     #文件大小100M
        ASYNC_FLUSH   = 1        #是否打开异步 SQL 日志功能。 0:表示关闭; 1:表示打开
        FILE_NUM = 100           #生成的SQLLOG个数
        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 运行结果,包括运行用时和影响行数(可能没有)
    							
        SQL_TRACE_MASK  = 1     #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 是否记录事务相关事件
        MIN_EXEC_TIME = 0		#详细模式下,记录的最小语句执行时间,单位为毫秒。执行时间小于该值的语句不记录在日志文件中。有效值范围(0~ 4294967294)
        USER_MODE   = 0         #SQL 日志按用户过滤时的过滤模式,取值
    							#0:关闭用户过滤
    							#1:白名单模式,只记录列出的用户操作的SQL 日志
    							#2:黑名单模式,列出的用户不记录 SQL 日志
        USERS =					#打开 SVR_LOG_USER_MODE 时指定的用户列表。格式为:用户名:用户名:用户名
    
    

    加载配置

    执行函数SP_REFRESH_SVR_LOG_CONFIG(), 使sqllog.ini 中配置立即生效,无需重启数据库

    SP_REFRESH_SVR_LOG_CONFIG();
    

    配置项说明

    参数名 缺省值 说明
    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 是否记录事务相关事件
    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:按时间间隔切换
    SWITCH_LIMIT 100000 不同切换模式 SWITCH_MODE 下,意义不同: 按数量切换时,一个日志文件中的 SQL 记录条数达到多少条之后系统会自动将日志切换到另一个文件中。一个日志文件中的 SQL 记录条数达到多少条之后系统会自动将日志切换到另一个文件中。有效值范围(1000-10000000) 按文件大小切换时,一个日志文件达到该大小后,系统自动将日志切换到另一个文件中,单位为 MB。有效值范围(1-2000) 按时间间隔切换时,每个指定的时间间隔,按文件新建时间进行文件切换,单位为分钟。有效值范围(1-30000)
    ASYNC_FLUSH 0 是否打开异步 SQL 日志功能。0:表示关闭;1:表示打开
    MIN_EXEC_TIME 0 详细模式下,记录的最小语句执行时间,单位为毫秒。执行时间小于该值的语句不记录在日志文件中。有效值范围(0-4294967294)
    FILE_PATH ../log 日志文件所在的文件夹路径
    BUF_TOTAL_SIZE 10240 SQL 日志 BUFFER 占用空间的上限,单位为 KB,取值范围(1024-1024000)
    BUF_SIZE 1024 一块 SQL 日志 BUFFER 的空间大小,单位为 KB,取值范围(50-09600)
    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 空串 打开 USER_MODE 时指定的用户列表。格式为:用户名:用户名:用户名

    SQL日志文件

    文件目录

    默认存储在安装目录的log文件夹中,其文件以 dmsql_*.log 格式命名。

    日志内容

    跟踪日志内容包含系统各会话执行的 SQL 语句、参数信息、错误信息、执行时间等。跟踪日志主要用于分析错误和分析性能问题,基于跟踪日志可以对系统运行状态进行分析。

    分析工具(Dmlog.jar)

    环境说明

    1. 需要有jdk环境,能够运行该jar包
    2. 库的页大小为32(小于32会出问题报错)
    3. 该工具只能分析sp_set_para_value(1,'svr_log',1)打开的dmsql_DMSERVER日志
    4. 选择的日志路径下只能要分析的日志不能有其他文件,可以有多个日志
    5. 在sql中DML、DQL操作后,记得commit
    6. 记得关闭sp_set_para_value(1,'svr_log',0)
    7. 分析结果会在运行jar包路径下
    8. 不要再生产环境中使用本工具,因为本工具的运行会对生产环境的数据库造成压力

    使用

    将dmsql_*.log日志放到一个单独的目录中,然后在当前目录中运行java -jar Dmlog.jar

    注意:该运行工具,需要连上一个数据库才能进行分析,连接信息在解压后的当前目录下的dmlog.properties里配置

    #数据库IP地址
    ip=127.0.0.1
    
    #数据库端口号
    port=5236
    
    #数据库用户名
    username=SYSDBA
    
    #数据库密码
    password=SYSDBA
    

    运行完毕后,会在当前目录下生成一个RESULT_时间戳的文件夹

  • 相关阅读:
    Tomatocart中文语言如何安装
    PHP中文乱码
    MySQL性能优化的最佳20+条经验
    linux内核文件IO的系统调用实现分析(open)
    委员联名提案停止评选三好学生 网友评论超2000
    jquery实现增加删除行
    centos 6 挂载 NTFS 分区
    linux 下的PC-lint----splint
    Linux测试软件:从源代码开始
    在Redhat中搭建linux-0.11运行环境
  • 原文地址:https://www.cnblogs.com/binliubiao/p/15536209.html
Copyright © 2020-2023  润新知