文章目录

  • 一、慢查询日志相关参数
  • 二、慢查询日志配置:
  • 1、查看 slow_query_log 的值的状态
  • 2、设置 slow_query_log 的值为 打开(ON)
  • 3、永久设置慢查询日志状态为打开
  • 四、慢查询统计工具:mysqldumpslow


一、慢查询日志相关参数

MySql 慢查询的相关参数解释:

参数

描述

slow_query_log

是否开启慢查询日志,1 表示开启,0 表示关闭

log-slow-queries

旧版(5.6以下版本)MySql 数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件 host_name-slow.log

slow-query-log-file

新版(5.6以上版本)MySql 数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省文件 host_name-slow.log

long_query_time

慢查询阈值,当查询时间多于设定的阈值时,记录日志

log_query_not_using_indexes

未使用索引的查询也被记录到慢查询日志中(可选)

log_output

日志存储方式。

log_output=‘FILE’ 表示将日志存入文件,默认值是’FILE

log_output=‘TABLE’ 表示将日志存入数据库,这样日志信息就会被写入到 mysql.slow_log 表中。 MySql 数据库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output=‘FILE,TABLE’。

日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启动慢日志查询,又需要能够更高的系统性能,那么建议优先记录到文件



二、慢查询日志配置:

Tips:默认情况下 slow_query_log 的值为 OFF,表示慢查询日志是关闭的,可以通过设置 slow_query_log 的值来开启。

1、查看 slow_query_log 的值的状态
mysql> show variables like '%slow_query%';
+---------------------+-------------------------------------------------+
| Variable_name       | Value                                           |
+---------------------+-------------------------------------------------+
| slow_query_log      | OFF                                             |
| slow_query_log_file | /var/lib/mysql/iZbp1hcv8qx067p386viryZ-slow.log |
+---------------------+-------------------------------------------------+
2 rows in set (0.00 sec)



2、设置 slow_query_log 的值为 打开(ON)
mysql> set global slow_query_log=1;
Query OK, 0 rows affected (0.00 sec)

再次查看状态

mysql> show variables like '%slow_query%';
+---------------------+-------------------------------------------------+
| Variable_name       | Value                                           |
+---------------------+-------------------------------------------------+
| slow_query_log      | ON                                              |
| slow_query_log_file | /var/lib/mysql/iZbp1hcv8qx067p386viryZ-slow.log |
+---------------------+-------------------------------------------------+
2 rows in set (0.00 sec)





3、永久设置慢查询日志状态为打开

tips:使用 set global slow_query_log=1 开启的慢查询日志只对当前数据库生效,如果 MySQL 重启后则会失效。所以就必须修改配置文件 my.cnf


修改配置文件路径: /etc/mysql/my.cnf ,直接在 [mysqld] 下面添加这几个参数即可。

[mysqld]

# 慢查询日志开关
slow_query_log=ON
long_query_time=4
slow_query_log_file=/var/log/slow_query_log.log

重启服务:

# service mysql restart

查看修改状态:

mysql> show variables like '%query%';
+------------------------------+-----------------------------+
| Variable_name                | Value                       |
+------------------------------+-----------------------------+
| binlog_rows_query_log_events | OFF                         |
| ft_query_expansion_limit     | 20                          |
| have_query_cache             | YES                         |
| long_query_time              | 4.000000                    |
| query_alloc_block_size       | 8192                        |
| query_cache_limit            | 1048576                     |
| query_cache_min_res_unit     | 4096                        |
| query_cache_size             | 16777216                    |
| query_cache_type             | OFF                         |
| query_cache_wlock_invalidate | OFF                         |
| query_prealloc_size          | 8192                        |
| slow_query_log               | ON                          |
| slow_query_log_file          | /var/log/slow_query_log.log |
+------------------------------+-----------------------------+

四、慢查询统计工具:mysqldumpslow




参数说明 官方→

Option Name

Description

-a

不要将所有数字抽象为 “N”,将字符串抽象为 “S”

-n

至少具有指定数字的抽象数字

–debug

编写调试信息

-g

只考虑与模式匹配的语句

–help

显示帮助信息并退出

-h

日志文件名中服务器的主机名

-i

服务器实例的名称

-l

不要从总时间中减去锁定时间

-r

颠倒排序 Sequences

-s

如何排序输出

-t

仅显示前 num 个查询

–verbose

Verbose mode

常见用法:

语句

说明

mysqldumpslow -s c -t 10 /var/run/mysqld/mysqld-slow.log

取出使用最多的10条查询

mysqldumpslow -s t -t 3 /var/run/mysqld/mysqld-slow.log

取出查询时间最慢的3条慢查询

mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log

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

mysqldumpslow -s r -t 10 -g ‘left join’ /var/run/mysqld/mysqld-slow.log

按照扫描行数最多的