慢日志在日常数据库运维中经常会用到,业务人员可能经常会说,哪里卡住了,哪里点击网页加载比较慢,那这个时间其实不太好区分,到底是多少s才算慢,有没有一个衡量的标准呢,出现这个情况有需要怎么去优化呢?其实我们可以通过查看慢日志来获得效率较差的 SQL ,然后可以进行 SQL 优化。
那什么叫做MySQL 的慢查询日志?
慢查询日志是用来记录在 MySQL 中响应时间超过阀值的语句,具体指运行时间超过 long_query_time 值的SQL,则会被记录到慢查询日志中long_query_time 的默认值为10,默认10就记录到慢查询日志中。
它的主要作用是,帮助我们发现那些执行时间特别长的SQL查询,并且有针对性地进行优化,从而提高系统的整体效率。当我们的数据库服务器发生阻塞、运行变慢的时候,检查一下慢查询日志,找到那些慢查询,对解决问题很有帮助。比如一条sq|执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒的sql,结合explain进行全面分析。
如何开启MySQL 的慢查询日志和查询相关信息?
默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。一般建议开发环境启用该参数,在开发的过程中会方便很多,清楚哪些是慢sql,及时的进行优化,避免等到系统宕机的时候才去处理。与慢日志相关的参数介绍如下:
-
slow_query_log:是否启用慢查询日志。 -
slow_query_log_file:指定慢查询日志位置及名称,默认值为host_name-slow.log,可指定绝对路径。 -
long_query_time:慢查询执行时间阈值,超过此时间会记录,默认为10,单位为s。 -
log_output:慢查询日志输出目标,默认为file,即输出到文件。
开启慢SQL日志的方式:
1、 查看是否开启slow_query_log,开启慢查询 为ON,否则为OFF
show variables like '%slow_query_log%';
开启慢查询
set global slow_query_log='ON';
2、查看慢sql 日志存放位置
show variables like '%slow_query_log_file%';
3、慢查询的时间阈值设置,默认超过10秒的SQL语句就会被记录慢查询日志中
show variables like '%long_query_time%';
4、日志输出到文件还是表中。
show variables like 'log_output';
如果要重启后还能生效,需要修改 my.cnf 文件,[mysqld]下增加或修改参数long_query_time、slow_query_log和slow_query_log_file后,然后重启MySQL服务器。
[mysqld]
slow_query_log=ON #开启慢查询日志的开关
slow_query_log_file=/mnt/local/tomcat/mysql/my-slow.log #慢查询日志的目录和文件名信息
long_query_time=5 #设置慢查询的阈值为3秒,超出此设定值的SQL即被记录到慢查询日志
log_output=FILE # 一般有两种形式,一种是输出到文件FILE中,一种是写入数据表格table中,会保存到mysql库的slow_log表中
慢SQL的日志格式解读
下面我们具体看下,慢日志会记录哪些内容?我们执行一条较慢的查询 SQL ,来看下在慢日志中的体现。
该条SQL执行时间超过阈值
# Time: 2021-12-21T17:38:03.687811+08:00
# User@Host: root[root] @ [192.168.5.0]
Id: 2604943 # Query_time: 1.099889
Lock_time: 0.000144
Rows_sent: 39
Rows_examined: 45305
SET timestamp=1620898683;select * from test_table where col_name like '%测试%';
如果启用了慢速查询日志,并且选择了 FILE 作为输出目标,则写入日志的每个语句都以 # 字符开头。对于每一组慢SQL, 第一行记录的是该条 SQL 执行的时刻(如果 log_timestamps 参数为 UTC ,则改时间会显示 UTC 时区时间)。第二行记录的是执行该语句的用户和 IP 以及链接 id 。第三行的几个字段解释如下:
Query_time: 语句执行时间,以秒为单位。
Lock_time: 获取锁的时间(以秒为单位)。
Rows_sent: 发送给 Client 端的行数。
Rows_examined: 服务器层检查的行数(不计算存储引擎内部的任何处理)。
还有连表查询的时候,数据太大也会造成这种慢sql的情况。
慢查询日志分析工具
观察以下以上的慢日志格式,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具 mysqldumpslow ,或者是可以使用另一个工具pt-query-digest。它可以从logs、processlist、和 tcpdump 来分析 MySQL 的状况,logs包括 slow log、general log、binlog。
也可以把分析结果输出到文件中,或则把文件写到表中。分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。
上述的工具其实还是需要进行手工进行统计,或者写命令行进行统计。其实有些框架可能没有开启druid监控软件,所以这个在线工具不一定能用上,所以还是在拿到FILE文件老老实实的做好统计,然后着重优化,还是挺费时间的。
不用担心,这里介绍一款可视化报表分析,能大大提升MySQL慢查询日志分析效率的插件。
有以下的特点:
1、支持拖动文件到这个插件上,自动生成图形报表分析。
2、支持排序和筛选,筛选比较高查询时间或者通过关键字进行查找筛选。
插件的地址:https://github.com/benkaiser/mysql-slow-query-log-visualizer
最后
欢迎关注,星标,以及收藏,防止想用的时候没有找到。这样每次新文章推送才会第一时间出现在你的订阅列表里。 世间千变万化,我们才不会擦肩而过……
一个致力于分享技术、职场技能和创业经验方面的知识和经验,内容包括但不限于Java技术、技术趋势、开源项目和技术架构公众号。持续关注互联网和科技的发展,分享人工智能和其他前沿技术的信息,陪你一起成长。
原文始发于微信公众号(souvc):开源推荐:一款可视化报表分析,能大大提升MySQL慢查询日志分析效率的插件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/206008.html