达梦数据库获取慢sql

在数据库优化中sql优化是很重要的一部分,那么如何有效的获取慢sql

一、通过历史执行sql记录

当 INI 参数 ENABLE_MONITOR=1、MONITOR_TIME=1 打开时,显示系统最近 1000 条执行时间超过预定值的 SQL 语句。默认预定值为 1000 毫秒。可通过 SP_SET_LONG_TIME 系统函数修改,通过 SF_GET_LONG_TIME 系统函数查看当前值。

--两个参数均为动态参数,可直接调用系统函数进行修改
SP_SET_PARA_VALUE(1,'ENABLE_MONITOR',1);
SP_SET_PARA_VALUE(1,'MONITOR_TIME',1);
 
注意:通过 SP_SET_PARA_VALUE 方式修改的参数值仅对当前会话以及新建会话生效,对其它已建立会话不生效。

确定高负载的SQL
在设置性能监视级别为大于0后,可以通过查询动态视图V$LONG_EXEC_SQL或 V$SYSTEM_LONG_EXEC_SQLS来确定高负载的SQL语句。前者显示最近1000条执行时间 较长的SQL语句,,后者显示服务器启动以来执行时间最长语句。例如:

select * from V$LONG_EXEC_SQLS;
或者
select * from  V$SYSTEM_LONG_EXEC_SQLS order by exec_time desc;

select * from v$sql_history order by time_used desc

二、通过log_commit日志

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

select PARA_NAME,PARA_VALUE from v$dm_ini where para_name in('SQL_TRACE_MASK','SVR_LOG_ASYNC_FLUSH','SVR_LOG_MIN_EXEC_TIME')

--开启SQL日志:
SP_SET_PARA_VALUE(1, 'SVR_LOG', 1);
--关闭SQL日志:
SP_SET_PARA_VALUE(1, 'SVR_LOG', 0);

2、生成sql日志
日志默认路径是log/dmsql_'sid'.log
日志是不断累加的,过期无用的sql日志可以删除文件,可截取某时间段的日志。
sql.log日志的配置文件/data/DAMENG/sqllog.ini
sqllog.ini 
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    = /dmdata/data/log     #sqllog存放位置
    PART_STOR    = 0
    SWITCH_MODE  = 2          #0代表不切换  2代表按照文件大小切换
    SWITCH_LIMIT   = 256     #文件大小256M
    ASYNC_FLUSH   = 1         #异步刷日志
    FILE_NUM = 10            #生成的SQLLOG个数
    ITEMS    = 0
    SQL_TRACE_MASK  = 1       #全部类型的sql
    MIN_EXEC_TIME = 0
    USER_MODE   = 0           #0为记录所有的用户
    USERS =
如果对 sqllog.ini 进行了修改,可通过调用以下函数即时生效,无需重启数据库,如下所示:

SP_REFRESH_SVR_LOG_CONFIG();

3、获取日志分析
用java执行jar包分析日志文件
到jar包的目录
Dmlog_DM7_6.0.jar
Dmlog_DM7_5.1.jar

命令行:
java.exe -jar Dmlog_DM7_5.1.jar                (可以在电脑自己安装jdk,也可以dm自带的jdk)

达梦数据库获取慢sql_第1张图片

可以在用本机的数据库分析,也可以远程,数据库的页大小和块大小为32不然会报错:记录超长


文件夹的路径,要单独为分析日志设置文件夹,因为会分析文件夹内所有文件,可以多个日志,可以带入参数
生成的文件在当前目录

达梦数据库获取慢sql_第2张图片

三、用DM自带的monitor工具.../tool/目录下

达梦数据库获取慢sql_第3张图片

 

你可能感兴趣的:(达梦数据库)