mysql从入门到精通高级篇(二十二)慢查询日志分析,showprofile查看sql执行成本(代码片段)

码农飞哥 码农飞哥     2022-10-23     108

关键词:

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
❤️ 2. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当 。python爬虫入门进阶
❤️ 3. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 4. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门
😁 5. 社区逛一逛,周周有福利,周周有惊喜。码农飞哥社区,飞跃计划
全网同名【码农飞哥】欢迎关注,个人VX: wei158556

文章目录

1. 简介

上一篇文章我们介绍数据库的优化步骤【MySQL从入门到精通】【高级篇】(二十一)数据库优化步骤_查看系统性能参数,其中,说到了通过开启慢查询日志来分析慢查询的SQL。这篇文章就是具体来介绍如何开启慢查询日志以及如何分析慢查询日志。

2. 定位执行慢的SQL:慢查询日志

MySQL中的慢查询日志,用来记录在MySQL中响应时间超过阈值的语句,具体就是运行时间超过long_query_time值的SQL。则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上(不含10秒)的语句。

它的主要作用就是帮助我们发现那些执行时间特别长的SQL查询,并且有针对性地进行优化,从而提高系统的整体效率。当我们的数据库服务器发送阻塞,运行变慢的时候,检查一下慢查询日志,找到那些慢查询,对解决问题很有帮助,比如一条SQL语句执行超过2秒,我们就算慢sql,希望能够收集超过2秒的sql,结合explain进行全面分析。

默认情况下,MySQL数据库没有开启慢查询分析,需要我们手动设置这个参数,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志或多或少带来一定的性能影响。

2.1. 开启慢查询日志参数

  1. 开启slow_query_log
    在使用前,我们需要先看下慢查询是否已经开启,使用下面这条命令即可:
mysql> show variables like '%slow_query_log';


我们能看到 slow_query_log=OFF,我们可以把慢查询日志打开,注意设置变量值的时候需要使用global,否则会报错;

mysql> set global slow_query_log=on;

然后我们再来查看下慢查询日志是否开启,以及慢查询日志文件的位置;

mysql> show variables like '%slow_query_log%';

  1. 修改long_query_time阈值
    默认情况下long_query_time的阈值是10秒,可以使用如下命令进行查看:
mysql> show variables like 'long_query_time';


可以通过set命令进行修改,如下就是将long_query_time的阈值改成0.1秒,加global对全局生效,不加global则对当前会话生效。

#全局的long_query_time阈值设置为0.2
mysql> set global long_query_time=0.2;
#当前会话的long_query_time阈值设置为0.1
mysql> set long_query_time=0.1;


如下的方式相较于前面命令行方式,可以看作是永久设置的方式。
修改my.cnf 文件,在**[mysqld]下增加或者修改参数long_query_time**, slow_query_timeslow_query_log_file后,然后重启Mysql服务器。

[mysqld]
slow_query_log=ON  #开启慢查询日志的开关
slow_query_log_file=/var/lib/mysql/devdb-slow.log #慢查询日志的目录和文件名
long_query_time=0.1 #设置慢查询的阈值为0.1秒,超出此设置值的SQL即被记录到慢查询日志
log_output=FILE

如果不指定存储路径,慢查询日志将默认存储到MySQL数据库的数据文件夹下。如果不指定文件名,默认文件名为hostname-slow.log

2.2. 查看慢查询

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

mysql > show global status like '%slow_queries';

3. 造数据进行测试

这里选用的数据还是 【MySQL从入门到精通】【高级篇】(二十)适合创建索引的11种情况&不适合创建索引的7种情况,万字长文 文章中提到的 feigedb库中的student表。student表中有100万条数据,这里执行

SELECT COUNT(*) FROM student WHERE student_id!=177875;

语句用于统计student_id不等于177875的记录数。此查询语句执行时间在0.18s。

接着在分析下有多少慢查询语句

mysql> show status like 'slow_queries';


除了上述变量,控制慢查询日志的还有一个系统变量:min_examined_row_limit。这个变量的意思是:查询扫描过的最少记录数。 这个变量和查询执行时间,共同组成了判别一个查询是否是慢查询的条件,如果查询扫描过的记录数大于等于这个变量的值,并且查询执行时间超过long_query_time的值,那么这个查询就会被记录到慢查询日志中,反之,则不会被记录到慢查询日志中。

4. 慢查询日志分析工具:mysqldumpslow

在生产环境中,如果要手工分析日志,查找,分析SQL,显然是个体力活,MySQL提供了日志分析mysqldumpslow
查看mysqldumpslow的帮助信息

mysqldumpslow --help

这里我的服务器 mysqldumpslow.sh 不兼容Percona 扩展的慢查询日志,需要使用 pt-query-digest 命令来替换。

[root@devdb ~]# mysqldumpslow --help
"mysqldumpslow.sh" is not currently compatible with Percona extended slow query
log format. Please use "pt-query-digest" from Percona Toolkit instead
(https://www.percona.com/doc/percona-toolkit/2.2/pt-query-digest.html).

pt-query-digest 安装

默认情况下直接使用pt-query-digest 命令会提示找不到该命令

本人系统的环境是Red Hat 环境

  1. 自动安装percona-toolkit
sudo yum install percona-toolkit

  1. 手动安装
    如果该命令安装不行的话,则需要手动安装,首先就是下载percona-toolkit_3.0.3-1.jessie_amd64.deb 的安装包。
wget https://www.percona.com/downloads/percona-toolkit/3.0.3/binary/debian/jessie/x86_64/percona-toolkit_3.0.3-1.jessie_amd64.deb

下载好之后接着就是进行安装了。

yum localinstall -y percona-toolkit-3.2.1-1.el7.x86_64.rpm

安装好之后,输入 pt-query-digest --help 就能正常使用了。

pt-query-digest的使用
mysql系列(六)mysql 慢日志查询(pt-query-digest)/如何单条SQL分析和Explain及trace工具

percona-toolkit 之 【pt-query-digest】介绍

pt-query-digest /var/lib/mysql/devdb-slow.log

5. 关闭慢查询日志

MySQL服务器停止慢查询日志功能有两种

方式1:永久性方式

修改my.cnf或者my.ini文件,把[mysqld] 组下的slow_query_log值设置为OFF,修改保存,在重启MySQL服务器,即可生效

[mysqld]
slow_query_log=OFF

或者,把slow_query_log一项注释掉,或者删掉

[mysqld]
#slow_query_log=OFF

重启MySQL服务

 service mysqld restart

执行如下语句查询慢日志功能

SHOW VARABLES LIKE '%slow%'; #查询慢查询日志所在目录
SHOW VARABLES LIKE '%long_query_time%'; #查询超时时长

可以看到,MySQL系统中的慢查询日志是关闭的。

方式2:临时性方式

使用SET语句来设置

  1. 停止MySQL慢查询日志功能,具体SQL语句如下:
SET GLOBAL slow_query_log=OFF

总结

本文详细介绍了如同进行慢查询日志分析

mysql从入门到精通高级篇(二十八)子查询优化,排序优化,groupby优化和分页查询优化(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.网上优质的Python题库很少,这里给大家推荐一款非常棒 查看详情

1024程序员节|mysql从入门到精通高级篇(二十七)外连接和内连接如何进行查询优化呢?join的原理了解一波(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.网上优质的Python题库很少,这里给大家推荐一款非常棒的Python题库,从入门到大厂面试 查看详情

1024程序员节|mysql从入门到精通高级篇(二十七)外连接和内连接如何进行查询优化呢?join的原理了解一波(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.网上优质的Python题库很少,这里给大家推荐一款非常棒的Python题库,从入门到大厂面试 查看详情

mysql从入门到精通高级篇(二十九)覆盖索引的使用&索引下推(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.网上优质的Python题库很少,这里给大家推荐一款非常棒 查看详情

java高级教程gradle从入门到精通

MySQL数据库最佳学习线路脑图:一、对MySQL的认识认识Mysql数据库下载安装MySQL软件在Linux系统环境下安装MySQLMySOL体系结构与存储引擎MySQL体系结构QueryCache详解存储引擎InnoDB体系结构InnoDB的三大特性.数据库文件参数文件参数类... 查看详情

mysql从入门到精通高级篇(二十五)explain中refrowsfilteredextra字段的剖析(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇(二十五)explain中refrowsfilteredextra字段的剖析(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇(二十五)explain中refrowsfilteredextra字段的剖析(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇(二十五)explain中refrowsfilteredextra字段的剖析(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇(二十一)数据库优化步骤_查看系统性能参数(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇(二十三)explain的概述与table,id字段的剖析(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇(二十三)explain的概述与table,id字段的剖析(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇(二十三)explain的概述与table,id字段的剖析(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇(二十六)建了索引就能用么?我看未必。来看看几种索引失效的情况吧

文章目录​​1.简介​​​​1.简介​​​​2.数据准备​​​​2.1.建表​​​​2.2.设置参数​​​​2.3.创建函数​​​​2.4.创建存储过程​​​​2.5.调用存储过程​​​​3.索引失效的情况​​​​3.1.索引使用的简单说明​... 查看详情

scala入门到精通——第二十二节高级类型

作者:摇摆少年梦视频地址:http://www.xuetuwuyou.com/course/12本节主要内容this.type使用类型投影结构类型复合类型1.this.type使用classPerson{privatevarname:String=nullprivatevarage:Int=0defsetName(name:String)={this.name=name//返回对象本身this}d 查看详情

mysql从入门到精通高级篇(二十)适合创建索引的11种情况&不适合创建索引的7种情况,万字长文(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇(二十六)建了索引就能用么?我看未必。来看看几种索引失效的情况吧(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.网上优质的Python题库很少,这里给大家推荐一款非常棒 查看详情

《黑马程序员mysql数据库入门到精通,从mysql安装到mysql高级mysql优化全囊括》——学习笔记进阶篇(代码片段)

...用作个人笔记使用,整理自《黑马程序员MySQL数据库入门到精通,从MySQL安装到MySQL高级、MySQL优化全囊括》(https://www.bilibili.com/video/BV1Kr4y1i7ru/)存储引擎MySQL体系结构连接层最上层是一些客户端和连接服务,主要完成一... 查看详情