欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL优化篇:慢查询日志

程序员文章站 2022-04-16 09:58:42
...

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; 设定慢查询阈值 单位秒

MySQL优化篇:慢查询日志

(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,打开慢查询日志查看

MySQL优化篇:慢查询日志
特殊说明
在进行SQL优化的过程中,可以通过参数设置将未使用到索引的查询当做慢查询捕获,具体可以通过如下变量设置:
系统变量log-queries-not-using-indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。如果调优的话,建议开启这个选项。另外,开启了这个参数,其实使用full index scan(索引全扫描)的sql也会被记录到慢查询日志。
MySQL优化篇:慢查询日志

3、日志分析工具(mysqldumpslow)

(1)查看慢查询记录的条数
如果想查询有多少条慢查询记录,可以使用这个系统状态变量——Slow_queries。
MySQL优化篇:慢查询日志
(2)查看mysqldumpslow的帮助信息

mysqldumpslow --help

MySQL优化篇:慢查询日志

参数 描述
-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

MySQL优化篇:慢查询日志

MySQL优化篇:慢查询日志