当前位置:首页 > 数据库 > 正文内容

MySQL慢查询日志实操(图文解析)

Lotus2022-10-07 10:36数据库

程序员必备接口测试调试工具:立即使用
Apipost = Postman + Swagger + Mock + Jmeter
Api设计、调试、文档、自动化测试工具
后端、前端、测试,同时在线协作,内容实时同步

推荐学习:mysql视频教程

一、概述

MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值(long_query_time,单位:秒)的SQL语句。默认情况下,MySQL不启动慢查询日志。本文简单介绍如何开启慢查询日志,如何用mysqldumpslow分析慢查询。

二、慢查询日志设置

1、临时设置

临时开启慢查询日志(重启失效)

set global slow_query_log = on;
登录后复制

注:如果想关闭慢查询日志,只需要执行 set global slow_query_log = off; 即可。

临时慢查询时间临界点 查询时间高于这个临界点的都会被记录到慢查询日志中(重启失效)

set long_query_time = 1;
登录后复制

设置慢查询存储的方式(重启失效)

set global  log_output = file;
登录后复制

说明: 可以看到,我这里设置为了file,就是说我的慢查询日志是通过file体现的,默认是none,我们可以设置为table或者file,如果是table则慢查询信息会保存到mysql库下的slow_log表中。

2、查询慢查询日志的开启状态和慢查询日志储存的位置

show variables like '%quer%';
登录后复制

参数说明:

  • slow_query_log : 是否已经开启慢查询
  • slow_query_log_file : 慢查询日志文件路径
  • long_query_time : 超过多少秒的查询就写入日志

log_queries_not_using_indexes 如果值设置为ON,则会记录所有没有利用索引的查询(性能优化时开启此项,平时不要开启)

3、查看存放日志的形式

show variables like 'log_output';
登录后复制

4、永久开启慢日志

修改my.cnf

在配置文件my.cnf(一般为/etc/my.cnf)中的[mysqld] section增加如下参数。

[mysqld]slow_query_log= 1slow_query_log_file= /var/lib/mysql/slow-query.log # 若没有指定,默认名字为hostname_slow.loglong_query_time= 1log_queries_not_using_indexes= 1
登录后复制

其中,slow_query_log = 1,表示开启慢查询,0表示关闭

slow_query_log_file,指定慢查询日志路径,需要MySQL对该路径有写权限

long_query_time = 1,表示查询时间>=1秒才记录日志,默认10s

log_queries_not_using_indexes = 1,表明记录没有使用索引的 SQL 语句

重启MySQL服务,重启MySQL后会看到/var/lib/mysql/slow-query.log文件。

三、慢查询测试

制造慢查询并执行。如下:

mysql> select sleep(1);+----------+
| sleep(1) |
+----------+
| 0 |
+----------+
1 row in set (1.00 sec)
登录后复制

慢查询日志

打开慢查询日志文件。可以看到上述慢查询的SQL语句被记录到日志中。

四、慢查询分析工具

mysqldumpslow
登录后复制

mysqldumpslow是MySQL自带的分析慢查询的工具。该工具是Perl脚本。

常用参数如下:

  • -s:排序方式,值如下
  • c:查询次数
  • t:查询时间
  • l:锁定时间
  • r:返回记录
  • ac:平均查询次数
  • al:平均锁定时间
  • ar:平均返回记录书
  • at:平均查询时间
  • -t:topN查询
  • -g:正则表达式

获取访问次数最多的5个SQL语句:

按照时间排的top 5个SQL语句

$ mysqldumpslow -s t -t 5 /var/lib/mysql/slow-query.log
登录后复制

按照时间排序且含有'like'的top 5个SQL语句

$ mysqldumpslow -s t -t 3 -g "like" /var/lib/mysql/slow-query.log
登录后复制

五、MySQL 清理slowlog方法

SET GLOBAL slow_query_log = 'OFF';
ALTER TABLEmysql.slow_log RENAME mysql.slow_log_drop;
CREATE TABLE mysql.slow_log LIKEmysql.slow_log_drop;
SET GLOBAL slow_query_log = 'ON';
DROP TABLE mysql.slow_log_drop;
登录后复制

推荐学习:mysql视频教程

以上就是MySQL慢查询日志实操(图文解析)的详细内容,更多请关注php中文网其它相关文章!

原文链接

扫描二维码推送至手机访问。

版权声明:本文来源于网络,仅供学习,如侵权请联系站长删除。

本文链接:https://news.layui.org.cn/post/352.html

分享给朋友:

“MySQL慢查询日志实操(图文解析)” 的相关文章

归纳整理关于mysql left join查询慢时间长的踩坑

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于left join查询慢时间长的踩坑总结,包括了EXPLAIN命令对SELECT语句进行分析,下面一起来看一下,希望对大家有帮助。 程序员必备接口测试调试工具:立即使用 Apipost = Postman + Swagger + Mock + Jmeter Api设计、调试、文档、自动化测试工具 后端、前...

oracle定时任务定时无效的原因分析与解决

本篇文章给大家带来了关于Oracle的相关知识,发现系统数据没有更新,查看oracle定时任务,估计没有执行,下面介绍了关于oracle定时任务定时无效的原因分析与解决方法,希望对大家有帮助。 php入门到就业线上直播课:进入学习API 文档、设计、调试、自动化测试一体化协作工具:点击使用 推荐教程:《Oracle视频教程》 创建oracle定时任务定时任务并没有按时执行 由于项目需要同步其他系统...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。