1、概念

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

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

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

2、如何使用

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

(1)开启设置

SQL语句

描述

备注

SHOW VARIABLES LIKE “%slow_query_log%”;

查看慢查询日志是否开启

默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的

set global slow_query_log=1;

开启慢查询日志

show variables like “long_query_time%”;

查看慢查询设定的阈值

单位秒

set long_query_time =1;

设定慢查询阈值

单位秒

postgresql 慢日志分析工具 mysql慢sql日志_SQL

(2)永久生效

永久生效—需要修改配置文件my.cnf中的[mysqld]下的配置

[mysqld]
slow_query_log=1
slow_query_log_file=/var/lib/mysql/htzw-slow.log
long_query_time=3
log_output=FILE

参数说明与注意事项

1、使用show variables like 'long_query_time’查看是当前连接会话的变量值。因为long_query_time变量在GLOBAL和SESSION中都有,如果不加访问域则使用默认的SESSION访问域,所以要想看到全局的long_query_time变量需要用如下语句show global variables like 'long_query_time'
2、show variables完整语法为:show [global|session] variables [like ‘pattern’ | where expr]

3、log_output变量用于指定日志的存储方式,这个变量有两个取值:FILE,TABLE,默认取值为FILE。MySQL数据库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output=’FILE,TABLE’

(3)运行查询时间长的SQL,打开慢查询日志查看

postgresql 慢日志分析工具 mysql慢sql日志_mysql_02


特殊说明

在进行SQL优化的过程中,可以通过参数设置将未使用到索引的查询当做慢查询捕获,具体可以通过如下变量设置:

系统变量log-queries-not-using-indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。如果调优的话,建议开启这个选项。另外,开启了这个参数,其实使用full index scan(索引全扫描)的sql也会被记录到慢查询日志。

postgresql 慢日志分析工具 mysql慢sql日志_postgresql 慢日志分析工具_03

3、日志分析工具(mysqldumpslow)

(1)查看慢查询记录的条数

如果想查询有多少条慢查询记录,可以使用这个系统状态变量——Slow_queries。

postgresql 慢日志分析工具 mysql慢sql日志_mysql_04


(2)查看mysqldumpslow的帮助信息

mysqldumpslow --help

postgresql 慢日志分析工具 mysql慢sql日志_postgresql 慢日志分析工具_05

参数

描述

-s

表示按照何种方式排序

   c

访问次数

   l

锁定时间

   r

返回记录

   t

查询时间

   al

平均锁定时间

   ar

平均返回记录数

   at

平均查询时间

-t

即为返回前面多少条的数据

-g

后边搭配一个正则表达式,大小写不敏感

(3)查看mysqldumpslow的帮助信息

#得到返回记录集最多的10个SQL
mysqldumpslow -s r -t 10 /var/lib/mysql/htzw-slow.log

#得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /var/lib/mysql/htzw-slow.log

#得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/htzw-slow.log

#另外建议在使用这些命令时结合|和more使用,否则有可能出现爆屏情况
mysqldumpslow -s r -t 10 /var/lib/mysql/htzw-slow.log | more

postgresql 慢日志分析工具 mysql慢sql日志_SQL_06

postgresql 慢日志分析工具 mysql慢sql日志_SQL_07