任何一个系统如果没有进行过这个分析步骤,怎敢上线?!
那么,我们如何分析哪些语句有问题,需要建立或者调整索引呢?
很简单:
都是有工具的,可以通过下载达梦的sql日志分析工具,进行深入分析:
有这个工具就可以了吗?当然不可以。我们还需要借助数据库的一个特性,叫做SQL日志记录功能。
整体的操作步骤如下:
ps -ef|grep dmserver 可以看到实例的进程,和dm.ini的绝对路径。sqllog.ini就和dm.ini在同一个路径下。
我们一般用这个配置:
[dmdba@dbserver1 log]$ cat /data/XXX_DATA/DAMENG/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 = ../log
PART_STOR = 0
SWITCH_MODE = 3
SWITCH_LIMIT = 720
FILE_NUM = 40
ASYNC_FLUSH = 1
ITEMS = 0
SQL_TRACE_MASK = 2:3:9:25
MIN_EXEC_TIME = 50
USER_MODE = 0
USERS =
注意1:
SWITCH_MODE = 3
SWITCH_LIMIT = 720
FILE_NUM = 40
这三个参数是可以调整的,也可以使用下面组合
SWITCH_MODE = 2
SWITCH_LIMIT = 512
FILE_NUM = 4
第一组表示按照时间切换sql日志文件,720分钟切换一次,保留40个文件;
第二组表示按照文件大小切换sql日志文件,512MB切换一次,保留4个文件;
注意2:
sp_set_para_value(1,‘SVR_LOG’,0);
sp_set_para_value(1,‘SVR_LOG’,1);
这期间,我们可能是进行压力测试啊;可能是生产运行了半天或者一天。
sql日志记录在数据库安装目录的log文件夹下,文件以dmsql开头,以.log结尾。
生成的SQL文件里面,就记录了什么时间、哪个IP地址、哪个用户、执行了什么SQL、执行时间是多久。
下载文章开头的文件之后,解压到一个文件夹(注意:这个文件夹下的所有文件,都不能删除;且运行jar包,必须在当前目录下执行!)。
把第四步的sql日志文件放到文件夹的log中,并在当前目录打开cmd工具或者bash命令(也就是在当前目录下,不管是windows还是linux,操作方式都一样)
运行:java -jar Dmlog_DM_8.3.1.jar 即可
注意:该运行工具,需要连上一个数据库才能进行分析,连接信息在解压后的当前目录下的dmlog.properties里配置。
配置下面几个信息即可:
#数据库IP地址
ip=127.0.0.1
#数据库端口号
port=5236
#数据库用户名
username=SYSDBA
#数据库密码
password=SYSDBA
运行完毕后,会在当前目录下生成一个RESULT_时间戳的文件夹:
文件1、文件2、文件3 是我们经常需要查看的文件。
文件1里面是数据库这段时间的所有SQL的耗时点图。对于我们了解系统运行非常重要。横轴是时间,纵轴是执行时间(单位是ms)效果如下:
注意:天花板很明显,说明这个系统问题很大(效率很差)。
文件2是文件1的细化,通过浏览器打开后,可以直接在浏览器查看每一个点的具体sql语句。格式是echart的,可以通过右上角的放大按钮,缩放自己选择的指定区域(在某些区域点非常密时,非常有效)。
文件3,就是我们具体SQL的和执行耗时的EXCLE汇总结果。
通过这个完整的步骤,我们就知道哪些SQL需要调整或者补齐索引了!注意:任何一个系统,如果没有进行过这种测试(压测后的性能分析),绝对不可以上线!
文章
阅读量
获赞