MySQL慢查询日志分析

(1)慢查询日志

MySQL提供了慢SQL的日志记录功能,我们可以通过设置一些属性来记录系统使用过程中慢查询的执行日志。使用MySQL慢查询日志对有效率问题的SQL进行监控。

查看属性

1】查看MySQL是否开启慢查询日志记录功能
show variables like 'slow_query_log';

在这里插入图片描述

2】查看慢查询SQL记录日志文件位置
show variables like 'slow_query_log_file';

在这里插入图片描述

3】查看超过多少秒的查询记录到慢查询日志中
show variables like 'long_query_time';

在这里插入图片描述

设置属性

1】开启慢查询日志
set global slow_query_log=on;2】设置慢查日志的文件地址
set global slow_query_log_file = 'xxx'3】是否把没有使用sql索引记录到慢查日志中
set global log_queries_not_using_indexes=on;4】设置慢查日志的时间,查寻超过多少秒记录(单位:秒)
set global long_query_time=1; 

示例

查看慢查询SQL记录日志文件位置
show variables like ‘slow_query_log_file’;
使用tail命令观察该文件,执行一个相对较为耗时的查询SQL,观察该文件的变化
在这里插入图片描述
【1】执行SQL的主机信息
【2】SQL的执行信息,查询时间,锁时间,查询返回数量
【3】时间戳信息
【4】查询SQL

(2)慢查询分析工具

查看慢查询SQL记录日志文件位置
show variables like ‘slow_query_log_file’;
通过观察慢SQL日志文件可以定位详细的慢SQL信息,但更多的时候使用这样的方式不是很明朗,对此,可以通过一些分析工具帮助我们更清晰也更简单的去分析观察这些日志信息

mysqldumpslow工具

该工具是慢查询自带的分析慢查询工具,一般只要安装了mysql,就会有该工具;
在这里插入图片描述
常见用法:
【1】查询执行次数最多的10条慢查询

mysqldumpslow -s c -t 10  /var/lib/mysql/4cc40e50ab3c-slow.log

在这里插入图片描述
上面是根据累计执行次数倒序排列的

【2】取出查询时间最慢的3条慢查询

mysqldumpslow -s t -t 3   /var/lib/mysql/4cc40e50ab3c-slow.log

在这里插入图片描述

pt-query-digest工具

pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析。可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。

【安装】

部署 Percona Toolkit

wget https://www.percona.com/downloads/percona-toolkit/3.2.1/binary/redhat/7/x86_64/percona-toolkit-3.2.1-1.el7.x86_64.rpm

PT 工具是使用 Perl 语言编写和执行的,所以需要系统中有 Perl 环境。安装相关的依赖包,

[root@xxx ~]# yum install perl-DBI.x86_64
[root@xxx ~]# yum install perl-DBD-MySQL.x86_64
[root@xxx ~]# yum install perl-IO-Socket-SSL.noarch
[root@xxx ~]# yum install perl-Digest-MD5.x86_64
[root@xxx ~]# yum install perl-TermReadKey.x86_64


安装 Percona Toolkit

[root@xxx ~]# rpm -iv percona-toolkit-3.2.1-1.el7.x86_64.rpm


上述操作完成之后,执行
pt-query-digest --help如果可以看到下面帮助信息表示安装完成

在这里插入图片描述
【语法及重要选项】

pt-query-digest [OPTIONS] [FILES] [DSN]

--create-review-table  当使用--review参数把分析结果输出到表中时,如果没有表就自动创建。
--create-history-table  当使用--history参数把分析结果输出到表中时,如果没有表就自动创建。
--filter  对输入的慢查询按指定的字符串进行匹配过滤后再进行分析
--limit限制输出结果百分比或数量,默认值是20,即将最慢的20条语句输出,如果是50%则按总响应时间占比从大到小排序,输出到总和达到50%位置截止。
--host  mysql服务器地址
--user  mysql用户名
--password  mysql用户密码
--history 将分析结果保存到表中,分析结果比较详细,下次再使用--history时,如果存在相同的语句,且查询所在的时间区间和历史表中的不同,则会记录到数据表中,可以通过查询同一CHECKSUM来比较某类型查询的历史变化。
--review 将分析结果保存到表中,这个分析只是对查询条件进行参数化,一个类型的查询一条记录,比较简单。当下次使用--review时,如果存在相同的语句分析,就不会记录到数据表中。
--output 分析结果输出类型,值可以是report(标准分析报告)slowlog(Mysql slow log)、json、json-anon,一般使用report,以便于阅读。
--since 从什么时间开始分析,值为字符串,可以是指定的某个”yyyy-mm-dd [hh:mm:ss]”格式的时间点,也可以是简单的一个时间值:s()h(小时)m(分钟)d(),如12h就表示从12小时前开始统计。
--until 截止时间,配合—since可以分析一段时间内的慢查询。

【常用示例】

1:查看最慢的查询日志信息,限制100[root@VM-8-17-centos ~]#  pt-query-digest  --limit 100  /var/lib/mysql/VM-8-17-centos-slow.log

2:分析最近12小时内的查询

[root@VM-8-17-centos ~]#  pt-query-digest   --since=12h  /var/lib/mysql/VM-8-17-centos-slow.log

3:分析只含有select语句的慢查询

pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i'  /var/lib/mysql/VM-8-17-centos-slow.log

(3)如何通过慢查询日志发现有问题的SQL

1.查询次数多且每次查询占用时间长的SQL
通常为pt-query-digest分析的前几个查询
2.IO大的SQL
注意pt-query-digest分析中的Rows examine项
3.未命中索引的SQL
注意pt-query-digest分析中的Rows examine和Row send 的对比
当Rows examine数据库引擎扫描行数大于Row send数据发送结果行数 基本上是使用了索引扫描或者表扫描的方式来进行查询,需要进行优化

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZWZhangYu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值