MySQL慢查询排查常用命令汇总

一、开启慢查询日志

1.永久开启

要开启MySQL慢查询日志,需要修改MySQL服务器的配置文件my.cnf或者my.ini
在配置文件中加上如下配置:

# 开启慢查询日志  1:开启|0:关闭
slow_query_log = 1 

# 指定慢查询的阈值,默认为10秒
long_query_time = 10 

# 指定慢查询日志的保存位置 (如果路径不存在一定要手动创建,否者可能会因为权限不够,无法记录慢查询日志)
slow_query_log_file = /var/log/mysql/mysql-slow.log

完成配置后,需要重启MySQL服务器才能使配置生效。

2.临时开启

SET GLOBAL slow_query_log = 1;
# 目录必须存在,且有读写权限,不然会报错
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
SET GLOBAL long_query_time = 10;
# 日志输出格式 TABLE|FILE
SET GLOBAL log_output = 'FILE';

临时开启的方法下,不需要重启MySQL就可以生效,但是MySQL重启后会失效
注意: 设置完可能需要重新打开会话窗口查询才能发现配置生效了!

二、常用命令

# 查看慢查询日志的完整路径和文件名
show variables like 'slow_query_log_file'; 

# 查看当前MySQL服务器的慢查询日志是否开启
show variables like 'slow_query_log';

# 查询慢查询的阈值
show variables like '%long_query_time%'; 

# 查询慢查询日志输出方式
show variables like '%log_output%'; 

三、分析慢查询日志

mysqldumpslow 工具是慢查询自带的分析慢查询工具,一般只要安装了mysql,就会有该工具。

完整语法如下所示:

Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]  -- 后跟参数以及log文件的绝对地址;

  -s            what to sort by (al, at, ar, c, l, r, t), 'at' is default
                al: average lock time
                ar: average rows sent
                at: average query time
                c: count
                l: lock time
                r: rows sent
                t: query time

  -r           reverse the sort order (largest last instead of first)
  -t NUM       just show the top n queries
  -a           don't abstract all numbers to N and strings to 'S'
  -n NUM       abstract numbers with at least n digits within names
  -g PATTERN   grep: only consider stmts that include this string
  -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),
               default is '*', i.e. match all
  -i NAME      name of server instance (if using mysql.server startup script)
  -l           don't subtract lock time from total time

mysqldumpslow命令常见的分析和优化查询日志文件语句如下:

# 取出使用最多的10条慢查询
mysqldumpslow -s c -t 10 /var/log/mysql/mysql-slow.log
# 取出查询时间最慢的3条慢查询
mysqldumpslow -s t -t 3 /var/log/mysql/mysql-slow.log
# 取出查询时间最慢的前10条里面含有左连接的慢查询
mysqldumpslow -s t -t 10 -g 'left join' /var/log/mysql/mysql-slow.log
# 取出按照扫描行数最多的前10条慢查询
mysqldumpslow -s r -t 10 /var/log/mysql/mysql-slow.log  

其中,-s t 表示按查询总时间排序,-s c表示按查询次数排序,-t 10表示显示前10条查询信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

这里是杨杨吖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值