mysql 慢sql日志的解读排查

Posted 健康平安的活着

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 慢sql日志的解读排查相关的知识,希望对你有一定的参考价值。

一 概述

1.mysql的慢查询日志是MySQL提供的一种日志记录 ,它用来记录在 MySQL 中响应时间超过阀值的语句,具 体指 运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中 2. 具体指运行时间超过 long_query_time 值的 SQL ,则会被记录到慢查询日志中。 long_query_time的默认值为 10,意思是运行10秒以上的语句。 3.由他来查看哪些 SQL 超出了我们的最大忍耐时间值,比如一条 sql 执行超过 5 秒钟,我们就算慢 SQL ,希望能 收集超过5 秒的 sql ,结合之前 explain 进行全面分析。

二 方法一

2.1 查看慢sql日志

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

 2.2 临时性操作步骤

1.查看mysql日志是否开启

SHOW VARIABLES LIKE '%slow_query_log%';

 默认是关闭的

2.开启mysql日志

set global slow_query_log=1;
SHOW VARIABLES LIKE '%slow_query_log%';

 3.设置阈值时间

1.查看默认的阈值

 2.设置阈值

set long_query_time=3

 4.关闭阈值

set global slow_query_log=0;
SHOW VARIABLES LIKE '%slow_query_log%';

  2.3 永久性操作步骤

1.linux版本:如永久生效需要修改配置文件 my.cnf [mysqld]下配置

[mysqld] slow_query_log=1 slow_query_log_file=/var/lib/mysql/atguigu-slow.log long_query_time=3 log_output=FILE 2.windows版本:如永久生效需要修改配置文件 my.ini  [mysqld] 下配置 [mysqld] slow_query_log=1 slow_query_log_file=D:\\mysql-5.7.21-winx64\\data\\LAPTOP-VC53HCIP-slow.log long_query_time=3 log_output=FILE

  2.4 从慢sql日志文件中找出慢sql

运行查询时间长的 sql ,打开慢查询日志查看

2.5 分析慢sql的工具mysqldump

按照上面配置后,找到慢sql的生成目录,使用mysqldump工具进行排查

案例:

得到返回记录集最多的 10 SQL mysqldumpslow -s r -t 10 /var/lib/mysql/lala-slow.log 得到访问次数最多的 10 SQL mysqldumpslow -s c -t 10 /var/lib/mysql/atguigu-slow.log 得到按照时间排序的前 10 条里面含有左连接的查询语句 mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/atguigu-slow.log 另外建议在使用这些命令时结合 | more 使用 ,否则有可能出现爆屏情况 mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log | more

三  方法二 SHOW PROCESSLIST 

3.1 show processlist

以上是关于mysql 慢sql日志的解读排查的主要内容,如果未能解决你的问题,请参考以下文章

mysql通过开启全局日志进行定位排查慢sql

mysql 第三十六篇文章~mysql慢日志方案解读1

mysql慢查询和php-fpm慢日志

Mysql慢日志查询

如何解读MySQL产生的慢查询日志信息?

MySQL慢查询:慢SQL定位日志分析与优化方案