MySQL 慢查询日志深入理解


Posted in MySQL onApril 22, 2021

什么是慢查询日志

MySQL的慢查询日志是 MySQL提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阀值的语句,具体指运行时间超过long_query_time 值的 SQL,则会被记录到慢查询日志中

具体指运行时间超过 long_query_time 值的 SQL,则会被记录到慢查询日志中。long_query_time 的默认值为 10, 意思是运行 10 秒以上的语句

由它来查看哪些 SQL 超出了我们的最大忍耐时间值,比如一条SQL执行超过 5 秒钟,我们就算慢 SQL,希望能收集超过 5 秒的SQL,结合之前explain进行全面分析

默认情况下,MySQL 数据库没有开启慢?搜?罩荆?枰?颐鞘侄?瓷柚谜飧霾问?5比唬?绻?皇堑饔判枰?幕埃?话悴唤ㄒ槠舳?貌问??蛭??袈?檠?罩净峄蚨嗷蛏俅?匆欢ǖ男阅苡跋臁B?搜?罩局С纸?罩炯锹夹慈胛募??/p>

如何开启慢查询

查看开启状态

SHOW VARIABLES LIKE '%slow_query_log%'

MySQL 慢查询日志深入理解

开启慢查询

set global slow_query_log = 1

使用 set global_slow_query_log = 1 开启了慢查询日志只对当前数据库生,如果 MYSQL 重启后则会失效。

MySQL 慢查询日志深入理解

如果要永久生效,就必须修改配置文件 my.cnf(其它系统变量也是如此)修改 my.cnf 文件,[mysqld]下增加或修改参数

slow_query_log 和 slow_query_log_file 后,然后重启 MySQL 服务器。也即将如下两行配置进my.cnf文件

slow_query_log =1

slow_query_log_file=/var/lib/mysql/tim-slow.log

关于慢查询的参数 slow_query_log_fie,它指定慢查询日志文件的存放路径,系统默认会给一个缺省的文件host_name-slow.log(如果没有指定参数 slow_query_log_file的话)

那么开启慢查询日志后,什么样的SQL参会记录到慢查询里面?

通过 show variables like ‘long_query_time%' 来查看默认时间长度,单位是秒:

MySQL 慢查询日志深入理解

同样的,可以使用命令修改,也可以在my.cnf里面配置。假如运行时间正好等于 long_query_time 的情况,并不会被记录下来。也就是说,在MySQL源码里是判断大于 long_query_time,而非大于等于!

设置记录的阈值:

set global long_query_time=3;

同样的,可以使用命令修改,也可以在my.cnf里面配置。假如运行时间正好等于 long_query_time 的情况,并不会被记录下来。也就是说,在MySQL源码里是判断大于 long_query_time,而非大于等于!

设置记录的阈值:

set global long_query_time=3;

MySQL 慢查询日志深入理解

设置了但是还是没有发生更改?为什么?此时需要重新开启一个会话才可以:

MySQL 慢查询日志深入理解

接下来实行一个较慢的查询,如下图,但是记得要在配置文件中做如下配置:

MySQL 慢查询日志深入理解

接着去日志文件中查看存在哪些超过阈值的SQL就好了:

MySQL 慢查询日志深入理解

查询当前系统中有多少条慢查询记录:

MySQL 慢查询日志深入理解

记载一下我的配置文件

slow_query_log=1;
slow_query_log_file=/var/lib/mysql/tim-slow.log;
long_query_time=3;
log_output=FILE

日志分析工具mysqldumpshow

MySQL 慢查询日志深入理解

在生产环境中,如果要手工分析日志,查找、分析 SQL,显然是个体力活,MYSQL 提供了日志分析工具mysqldumpshow

  • s:是表示按何种方式排序
  • c:访问次数
  • l:锁定时间
  • r:返回记录
  • t:查询时间
  • al:平均锁定时间
  • ar:平均返回记录数
  • at:平均查询时间
  • t:即为返回前面多少条的数据
  • g:后边搭配一个正则匹配模式,大小写不敏感的

下面是使用示例:

得到返回记录集最多的 10 个 SQL

mysqldumpslow -s r -t 10 /var/lib/mysql/tim-slowlog

得到访问次数最多的 10 个 SQL

mysqldumpslow -s c-t 10 /var/lib/mysql/tim-slow log

得到按照时间排序的前 10 条里面含有左连接的查询语句

mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/tim-slowlog

另外建议在使用这些命令时结合和 more 使用,否则有可能出现爆屏情?r

mysqldumpslow -s r -t 10 /var/lib/mysq/tim-slow.log | more

以上就是MySQL 慢查询日志深入理解的详细内容,更多关于MySQL 慢查询日志的资料请关注三水点靠木其它相关文章!

MySQL 相关文章推荐
如何用Navicat操作MySQL
May 12 MySQL
MySQL 视图(View)原理解析
May 19 MySQL
MySql 8.0及对应驱动包匹配的注意点说明
Jun 23 MySQL
Mysql中一千万条数据怎么快速查询
Dec 06 MySQL
navicat 连接Ubuntu虚拟机的mysql的操作方法
Apr 02 MySQL
MySQL数据库如何使用Shell进行连接
Apr 12 MySQL
深入理解mysql事务隔离级别和存储引擎
Apr 12 MySQL
解决Mysql报错 Table 'mysql.user' doesn't exist
May 06 MySQL
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
Jun 14 MySQL
MySQL表字段数量限制及行大小限制详情
Jul 23 MySQL
MySQL添加索引特点及优化问题
Jul 23 MySQL
数据设计之权限的实现
Aug 05 MySQL
MySQL root密码的重置方法
MySQL性能压力基准测试工具sysbench的使用简介
Apr 21 #MySQL
Mysql MVCC机制原理详解
详解MySQL 用户权限管理
mysql死锁和分库分表问题详解
Apr 16 #MySQL
MySQL命令行操作时的编码问题详解
Idea连接MySQL数据库出现中文乱码的问题
Apr 14 #MySQL
You might like
使用PHP维护文件系统
2006/10/09 PHP
php一句话cmdshell新型 (非一句话木马)
2009/04/18 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
2019/03/22 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
30分钟快速实现小程序语音识别功能
2018/11/27 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
Python获取好友地区分布及好友性别分布情况代码详解
2019/07/10 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
Python接口自动化测试的实现
2020/08/28 Python
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
HEMA法国:荷兰原创设计
2019/02/21 全球购物
蔬菜基地的创业计划书
2014/01/06 职场文书
2014年小班元旦活动方案
2014/02/16 职场文书
硕士生工作推荐信
2014/03/07 职场文书
学生会竞选演讲稿
2014/04/24 职场文书
限期整改通知书
2015/04/22 职场文书
鲁冰花观后感
2015/06/10 职场文书
2016中考冲刺决心书
2015/09/22 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书
AngularJS实现多级下拉框
2022/03/25 Javascript