欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Damon 8-SQL 日志配置和分析工具

最编程 2024-10-18 16:39:47
...

        以 dmsql_数据库实例名.log 类型命名的文件为跟踪日志文件,跟踪日志内容包含系统各会话执行的 SQL 语句、参数信息、错误信息等。跟踪日志主要用于分析错误和分析性能问题,比如,可以挑出系统现在执行速度较慢的 SQL 语句,进而对其进行优化。

        打开跟踪日志对系统的性能有较大影响,一般用于查错和调优的时候才会打开,默认情况下系统是关闭跟踪日志的。当把 dm.ini 参数 SVR_LOG 设置为 1,才会打开 SQL 日志,若需要跟踪日志但对日志的实时性没有严格的要求,又希望系统有较高的效率,可以设置参数 SQL_TRACE_MASK 和 MIN_EXEC_TIME 只记录关注的相关记录,减少日志总量。或者设置sqllog.ini参数ASYNC_FLUSH打开SQL日志异步刷盘提高系统性能。

在记录完成后,可执行: SP_SET_PARA_VALUE(1, 'SVR_LOG', 0); 进行关闭跟踪日志。

SQL日志文件是一个纯文本文件。

--命名格式

dmsql_实例名[_模式名][_用户名][_日期_事件].log

当sqllog.ini中存在多个有效模式名,日志文件名中会添加“_模式名”,否则不添加,

当sqllog.ini参数PART_STOR=1时,日志文件名中会添加“_用户名”,否则不添加,

当sqllog.ini参数SWITCH_MODE不为0时,日志文件名中会添加“_日期_时间”,否则不添加。

        SQL日志文件缺省生成在DM安装目录的log子目录下,管理员可通过sqllog.ini参数FILE_PATH设置其生成路径。

        系统中SQL日志的缓存时分块循环使用的,管理员可根据系统执行的语句情况以及压力情况设置恰当的日志缓存块大小及预留的缓存块个数。当预留的块不足以记录系统产生的任务时,系统会分配新的 用后即弃的缓存块,但是总的空间大小由sqllog.ini参数BUF_TOTAL_SIZE控制,管理员可根据实际情况进行设置。

1 查看SVR_LOG参数

[dmdba@kylin10 DAMENG]$ cat dm.ini | grep SVR_LOG

SVR_LOG_NAME= SLOG_ALL  #Using which sql log sys in sqllog.ini

SVR_LOG= 0   #Whether the Sql Log sys Is open or close. 1:open, 0:close, 2:use switch and detail mode. 3:use not switch and simple mode.

 

2 SQL日志使用方法 

sqllog.ini中配置块在INI参数SVR_LOG=1时使用。

sqllog.ini中可以配置多个模式,不同模式可以有不同的配置项,例如:记录过滤掩码、刷盘方式、文件切换方式等。当模式的items设置不同时,使用其并集。仅当配置的模式名存在于INI参数SVR_LOG_NAME时,该模式名对应配置才会生效。当配置为多模式时,会在日志文件名中的实例名后面加上该日志文件对应的模式名。

缺省情况下,SVR_LOG_NAME为SLOG_ALL。若SVR_LOG为1,但不存在sqllog.ini或sqllog.ini中配置的多个模式名均不在INI参数SVR_LOG_NAME中时,按照各配置项的系统默认值记录SQL日志。

2.1 sqllog.ini文件配置

[dmdba@kylin10 DAMENG]$ cat sqllog.ini 
#SQL日志BUFFER占用空间上限
BUF_TOTAL_SIZE  = 10240      #SQLs Log Buffer Total Size(K)(1024~1024000)
#一块SQL日志BUFFER的空间大小
BUF_SIZE         = 1024          #SQLs Log Buffer Size(K)(50~102400)
#系统保留的SQL日志缓存的个数,有效值1-100
BUF_KEEP_CNT    = 6             #SQLs Log buffer keeped count(1~100)

[SLOG_ALL]
#SQL日志文件所在的目录路径,通常在安装目录dmdbms/log目录下。也可以手动指定
FILE_PATH    = ../log
#SQL日志分区存储,表示日志分区存储,表示SQL日志进行分区存储的划分条件
PART_STOR    = 0
#SQL日志文件切换的模式,2表示按文件大小切换
SWITCH_MODE  = 2
#不同切换模式switch_mode下,意义不同
SWITCH_LIMIT   = 128
#是否打开SQL日志异步刷盘功能。0否,是
ASYNC_FLUSH   = 1
#总共记录多少个日志文件,当日志文件达到这个设定值以后,再生成新的文件时,会删除最早那个日志文件
FILE_NUM = 5
#指定一条SQL日志中应包含的内容,指定方式为ITEMS=位号,0表示所有
ITEMS    = 0 
#指定SQL日志中需要被记录的列
SQL_TRACE_MASK  = 1 
#详细模式下,记录的最小语句执行时间,单位毫秒。执行时间小于该值的语句不记录在日志文件。
MIN_EXEC_TIME = 0
#SQL日志按用户过滤时的过滤模式
USER_MODE   = 0 
#打开SVR_LOG_USER_MODE时指定的用户列表。格式为:用户名:用户名
USERS =
EXECTIME_PREC_FLAG = 0 
    
[SLOG_ERROR]
#指定SQL日志中需要被记录的语句类,23为记录存在错误的语句(错误语法,语义分析错误等等)
SQL_TRACE_MASK = 23
FILE_PATH      = ../log
    
[SLOG_DDL]
#3包含DDL类型相关语句(等同于同时设置11-17)
SQL_TRACE_MASK = 3
    
[SLOG_LONG_SQL]
#记录执行语句、执行语句的时间、语句的影响行数(只有增删改查有行数,其他语句无行数)
SQL_TRACE_MASK = 25
#详细模式下,记录的最小语句执行时间,单位毫秒,执行时间小于该值的语句不记录在日志文件中。
MIN_EXEC_TIME = 60000

2.2 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。

SQL_TRACE_MASK = 1
指定SQL日志中需要被记录的语句类型。指定方式:SQL_TRACE_MASK=位号:位号:位号…….。
位号含义:
	1:全部记录(等同于同时设置4-31)
	2:DML类型相关语句(等同于同时设置4-10)
	3:DDL类型相关语句(等同于同时设置11-17)
	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:记录执行语句的时间、语句的影响行数,25和26选其一,同时存在,25生效。
	27:记录原始语句(服务器从客户端收到的未加分析的语句)
	28:记录参数信息,包括参数的序号、数据类型和值
	29:记录事务相关事件,包括锁类型、锁等待时间等。
	30:记录XA事务
	31:记录数据库操作,包括登录成功、登录失败、退出登录。

FILE_NUM = 5
总共记录多少个日志文件,当日志文件达到这个设定值以后,在生成新的文件时,会删除最早的那个日志文件。日志文件名称中将包含日期时间信息。
当这个参数设置为0时,只会生成两个日志文件相互切换着记录,取值范围0-1024。例如当file_num=0,实例名为pdm时,根据当时的日期时间,生成的日志名称可以为:
dmsql_pdm_20180719_163701.log, 
dmsql_pdm_20180719_163702.log

SWITCH_MODE = 2
表示SQL日志文件切换模式:
	0:不切换;
	1:按文件中记录数量切换;
	2:按文件大小切换;
	3:按时间间隔切换。

SWITCH_LIMIT = 128
不同切换模式SWITCH_MODE下,意义不同:
(1)按数量切换时,一个日志文件中的SQL记录条数达到多少条之后系统会自动将日志切换到另一个文件中。取值范围1000-10000000.
(2)按文件大小切换时,一个日志文件达到该大小后,系统会将日志切换到另一个文件中,单位MB。取值范围1-2000.
(3)按时间间隔切换时,每个指定的时间间隔,按文件新建时间进行文件切换,单位分钟,取值范围1-30000。

ASYNC_FLUSH = 1
是否打开SQL日志异步刷盘功能。
	0:否,采用实时刷盘;
	1:是,采用异步刷盘。

MIN_EXEC_TIME = 0
详细模式下,记录的最小语句执行时间,单位毫秒。执行时间小于该值的语句不记录在日志文件中。取值范围:0-4294967294.

FILE_PATH = ../log
SQL日志文件所在目录路径。默认生成在达梦安装目录的log目录下。

PART_STOR = 0
SQL日志分区存储,表示SQL日志进行分区存储的划分条件。
	0:不划分
	1:USER:根据不同用户分布存储

ITEMS = 0
指定一条SQL日志中应包含的内容,指定方式为ITEMS=位号:位号:位号…。例如ITEMS=3:5:7,表示包含第3、第5、第7位代表的内容。
	0: 表示记录所有的列(等同于同时设置1-12)
	1: TIME 执行时间
	2: SEQNO 服务器的站点号
	3: SESS 操作的会话地址
	4:THRD 线程地址
	5: USER 执行的用户
	6: TRXID 事务ID
	7:STMT 语句地址
	8: APPNAME 客户端工具
	9: IP 客户端IP
	10: STMT_TYPE语句类型。分别为
	11: INFO 记录当前执行的SQL语句
	12: RESULT 运行结果,包括运行用时、影响行数和EXEC_ID

USER_MODE = 0
SQL日志按用户过滤时的过滤模式,取值
	0:关闭用户过滤
	1:白名单模式,只记录列出的用户操作的SQL日志
	2:黑名单模式,列出的用户不记录SQL日志

users = 
打开SVR_LOG_USER_MODE时指定的用户列表。格式为:用户名:用户名:用户名,一般为空串。

EXECTIME_PREC_FLAG = 0
设置SQL日志中执行时间EXECTIME的时间单位。
	0:单位为毫秒MS
	1:单位为微秒US

2.3 开启SQL日志记录 

查看SVR_LOG参数
1、	SQL查询
SQL> select * from v$parameter where name like 'SVR_LOG%';或者
SQL> select * from v$dm_ini where para_name like 'SVR_LOG%';
2、	查看配置文件dm.ini
cat dm.ini | grep SVR_LOG
3、	开启SQL日志记录
sp_set_para_value(1,’SVR_LOG’,1);
4、	调用存储过程生效
call sp_refresh_svr_log_config();

 2.4 SQL日志内容

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 运行结果,包括运行用时和影响行数(可能没有)

 

2.5 关闭SQL日志跟踪记录 

sp_set_para_value(1,’SVR_LOG’,0);

3 达梦 SQL 日志分析工具 DMLOG 

运行环境需预先安装 Java 环境,DMLOG 支持在 Liunx 和 Windows 系统运行。推荐使用 java1.8 版本,linux 最小化安装最少要安装打印服务组件,windows 下不支持 java1.6 版本。

需要初始化页大小为32K的库,进行操作。

程序运行需要在后台数据库建 log_commit 表,建表前会删除同名表。 

java版本

参数文件

[dmdba@KylinV10 DMLOG8.13]$ cat dmlog.properties
#分析非MPP产生的日志为0,MPP产生的日志为1
ismpp=0

#数据库IP地址
ip=192.168.6.110

#数据库端口号
port=5239

#数据库用户名
username=SYSDBA

#数据库密码
password=Dameng123

#根据已存在的数据生成结果为1,根据LOG日志新生成数据为0
use_result=0

#SQL日志的文件夹绝对路径,并保证文件夹中只有SQL日志文件,路径请用两个反杠,例如:D:\\360Downloads\\log
sqlpath=/dm8/log/log_fenxi

#您想分析多少毫秒以上的SQL语句
time=0

#您想分析执行多少次以上的SQL语句
frequency=0

#此参数已废弃,excel中增加一列替换参数后的sql
is_replace=1

#参数队列的长度,默认4000,当出现找不到有效参数时可以适当加大此参数
queue_length=40000

#散点图中最大执行时间ms LEAST(exetime,2000) 
max_exetime=10000

#echarts散点图中最小执行时间ms(DML、SEL、UPD、INS、DEL,不包含DDL、CAL)
min_exetime=100

#取值范围(0~100),echart散点图中取小于min_exetime多少百分比的数据
e_percent=10

#是否生成excel的统计结果
if_excel=1

#日志表的表名
tab_name=log_commit
#此处填入待拆分的TRXID,将把该事务的日志单独写入文件中,如果非空则只做事务拆分,不做其他分析
trx_id=

#待分析事务的日志文件名,此处为空则分析整个文件夹中的所有文件
file_name=

运行

[dmdba@KylinV10 DMLOG8.13]$ java -jar Dmlog_DM_8.13.jar  

 

生成的文件

 

more_than_0_ms_log_result.xls:

 

more_than_0_times_log_result.xls: 

 

 

 

 

推荐阅读