暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

SQM对MySQL慢日志的配置及使用

原创 张程 2020-03-16
3253

第一章 MySQL日志审核

众所周知,SQM软件对于MySQL数据库的审核,无法像ORACLE数据库那样可以直接对整个数据库做SQL审核。只支持JAVA探针获取SQL的审核方式、MySQL日志审核。以及更适合开发人员自查的SQL脚本审核。
对于SQL脚本审核与其他库的操作使用方式一致,这里不再说明。重点讨论一下MySQL独有的慢日志审核方式。
MySQL日志审核,是通过分析慢查日志(slow_log)和通用日志(general_log),提取DML语句,进行SQL审核。实现原理是通过分析日志文件提取SQL语句,并对相应SQL语句在目标数据库获取SQL的执行计划、统计对象等信息。进而收集展示到SQM软件中并提供给用户做分析定位性能问题使用。

第二章 MySQL日志审核方式和配置

MySQL日志审核根据慢日志或通用日志的数据存放方式。可以有两种实现途径:
通过慢日志/通用日志文件审核;
通过慢日志/通用日志数据表审核。
由于慢查询的相关参数long_query_time可以记录执行超时的SQL信息。因此SQM在获取问题SQL时也主要以慢日志审核为主。
对于慢日志审核方式,主要包括:用户手工上传文件、系统定期抓取文件、系统定期从表中获取。

2.1 系统定期抓取慢日志文件

默认情况下,MySQL慢日志/通用日志是写入到:主机名-slow.log和主机名-general.log文件中的。因此SQM抓取慢日志时,也是从上述两个文件中提取相应的低效SQL的。
可以设置SQM定期抓取日志文件的频率。
用SYS用户在SQM/系统管理/通用配置/运行参数界面调整。默认7200秒,可以根据实际情况调整。调整后需要重启TOMCAT应用。
image.png

2.1.1 权限配置

为了拥有对慢日志/通用日志的文件读取权限,需要SQM应用服务器可以访问数据库服务器的22端口。
可用如下命令测试:
image.png
为了让SQM用户拥有获取SQL执行计划的权限,需要按如下方式授权:

grant all on sqm.* to 'sqm'@'%' identified by 'sqm';
grant select on 目标数据库.* to sqm;
flush privileges;

检查并修改慢日志权限配置:

show variables like '%log_output%';
--log_output 默认是FILE,表示慢查询日志输入至日志文件,可以通过set修改输出为TABLE

image.png

show variables like '%quer%';
-- log_queries_not_using_indexes 默认是OFF,表示是否记录没有使用索引的查询
-- slow_query_log 默认是OFF,表示是否打开慢查询
-- long_query_time默认是 10.000000,表示记录超过时间的慢查询
-- general_log 默认是OFF,表示是否打开general log

image.png
临时修改参数:

set global log_output='FILE';-- FILE/TABLE
set global slow_query_log = ON;
SET GLOBAL long_query_time = 1;-- 10.000000
SET GLOBAL log_queries_not_using_indexes = ON;-- 是否打开看个人需要

永久修改参数:

Vi /etc/my.cnf
log_output='FILE'
slow_query_log =1
long_query_time = 1
slow_query_log_file=/var/lib/mysql/Cent-SQM-slow.log

2.1.2 自动开始审核

查看日志审核:
image.png

image.png

如下为根据日志文件-采集间隔时间设置,系统自动获取的日志文件:

image.png

调整审核规则:
可以对当前审核实例的审核规则做变更:如调整严重程度、删除审核规则等。

image.png

查看审核SQL:
按照不同查询条件分别查看问题SQL。其中多份日志中存在的相同SQL系统会自动合并及累加信息。

image.png

image.png

2.2 手工上传文件

2.2.1 权限配置

对于手工上传的慢日志审核方式,由于是人工下载文件后上传。不再需要开放数据库服务器的22端口。但缺少了审核日志的实时性。
其余权限配置部分与系统定期抓取日志方式一致,不再列出。

2.2.2 手工下载日志

image.png

2.2.3 手工上传日志

直接点击上传文件
image.png

上传文件后系统会自动进行审核:

image.png

审核完毕即可查看相关SQL信息。

image.png

2.3 系统定期抓取慢日志数据表

默认情况下,MySQL慢日志/通用日志是写入到:主机名-slow.log和主机名-general.log文件中的。但也可以修改为写入到mysql.slow_log和mysql.general_log表中。
因此SQM抓取慢日志时,也是从上述两个数据表中提取相应的低效SQL的。并且在采集完成后, 会执行truncate操作,默认采集频率为1分钟,用SYS用户在SQM/系统管理/通用配置/运行参数界面进行配置。

image.png

2.3.1 权限配置

由于是系统自动获取低效日志数据表。不再需要开放数据库服务器的22端口。
为了让SQM用户拥有获取SQL执行计划及慢日志数据表的获取权限,需要按如下方式授权:

grant all on sqm.* to 'sqm'@'%' identified by 'sqm';
grant select on 目标数据库.* to sqm;
grant drop on mysql.slow_log to sqm;       --增加了对慢日志的定期删除权限
grant drop on mysql.general_log to sqm;    --增加了对通用日志的定期删除权限
flush privileges;

检查并修改慢日志权限配置:

show variables like '%log_output%';
--log_output 默认是FILE,表示慢查询日志输入至日志文件,可以通过set修改输出为TABLE

image.png

show variables like '%quer%';
-- log_queries_not_using_indexes 默认是OFF,表示是否记录没有使用索引的查询
-- slow_query_log 默认是OFF,表示是否打开慢查询
-- long_query_time默认是 10.000000,表示记录超过时间的慢查询
-- general_log 默认是OFF,表示是否打开general log

image.png

临时修改参数:

set global log_output='TABLE';-- FILE/TABLE
set global slow_query_log = ON;
SET GLOBAL long_query_time = 1;-- 10.000000
SET GLOBAL log_queries_not_using_indexes = ON;-- 是否打开看个人需要

永久修改参数:

Vi /etc/my.cnf
log_output='TABLE'
slow_query_log =1
long_query_time = 1
slow_query_log_file=/var/lib/mysql/Cent-SQM-slow.log

2.3.2 自动开始审核

查看慢日志数据表:
image.png

查看日志审核:
image.png

image.png

如下为根据日志文件-采集间隔时间设置,系统自动获取的日志文件:

image.png

调整审核规则:
可以对当前审核实例的审核规则做变更:如调整严重程度、删除审核规则等。

image.png

查看审核SQL:
按照不同查询条件分别查看问题SQL。其中多份日志中存在的相同SQL系统会自动合并及累加信息。

image.png

image.png

为了控制慢查询数据表的数据量,SQM系统设置了慢SQL在数据表的保留期限,60秒后的慢日志被自动删除。

image.png

对于实际的用户环境中,应避免删除数据库相关日志。采取的调整方法可以通过设置慢日志的输出方式为:文件+表的方式。SQM定期清理数据表中的数据量。真正的慢查询日志还保留在慢查询文件中。

log_output='FILE,TABLE'

image.png

image.png

可以看到系统不再定期抓取慢日志数据文件:

image.png

对于新执行的SQL语句,也能通过数据表定期获取累加SQL执行信息。

image.png

第三章 总结

对于MySQL慢日志审核,重点是保证网络权限的畅通,以及控制获取慢日志的审核间隔。通过文件获取的执行时间比较长。默认为2小时。对于执行SQL比较频繁且希望更及时的审核SQL的场景,建议设置慢日志删除方式为文件+表,让SQM通过慢日志数据表的方式高频的审核SQL慢日志数据。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论