一、什么是慢查询日志?
慢查询日志官方给出的理解太费劲了,本博主,按照日常思维进行一下讲解吧,慢查询日志顾名思义,就是查询慢的日志记录啊,我们在数据库中的增删改查等操作,如果执行时间超过了数据库中慢查询设置的默认查询时间之后,就会把这些执行较慢的sql记录到日志中,像这样的日志叫做慢查询日志。这么一说,大家应该比较好理解了吧,哈哈。
二、慢查询有哪些参数配置?
MySQL 慢查询的相关参数解释:slow_query_log :是否开启慢查询日志,on表示开启,0ff表示关闭
1、slow_query_log
是否开启慢查询日志,1表示开启,0表示关闭。
三、慢查询日志在哪里查?
1、首先我们需要先查看下数据库中的配置中是否开启了慢查询并且将慢查询日志输出到哪里了,要不然鬼才知道它在哪里呢?具体的查看方法如下:
(1)登录mysql数据库,mysql -uroot -p -hxxxx
(2)查看慢查询是否开启:
默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的,可以通过设置slow_query_log的值来开启,如下所示:
mysql> show variables like '%slow_query_log%';
+---------------------+------------------------------------------+
| Variable_name | Value |
+---------------------+------------------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /usr/local/mysql/data/localhost-slow.log |
+---------------------+------------------------------------------+
2 rows in set (0.00 sec)
mysql> set global slow_query_log=1;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%slow_query_log%';
+---------------------+------------------------------------------+
| Variable_name | Value |
+---------------------+------------------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /usr/local/mysql/data/localhost-slow.log |
+---------------------+------------------------------------------+
2 rows in set (0.00 sec)
#使用set global slow_query_log=1开启了慢查询日志只对当前数据库生效,MySQL重启后则会失效。如果要永久生效,就必须修改配置文件my.cnf(其它系统变量也是如此),下面的操作我们在my.cnf中添加
(3)开启慢查询并设置存储方式:
slow_query_log =1
log_output = file
(4)自定义设置慢查询存储的路径
slow_query_log_file=/data/mysql/mysql-slow.log
(5)自定义设置慢查询请求时间的配置为1s
long_query_time = 1
(6)重启mysql服务器之后查看参数是否设置成功
/etc/init.d/mysqld restart
使用以下方式进行查看即可:
show variables like '参数名称';
四、使用mysqldumpslow来分析慢查询日志
[root@localhost~]# mysqldumpslow --help
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]
Parse and summarize the MySQL slow query log. Options are--verbose verbose--debug debug--help writethis text to standard output-v verbose-d debug-s ORDER what to sort by (al, at, ar, c, l, r, t), 'at'is default
al: average locktime
ar: average rows sent
at: average querytimec: count
l: locktimer: rows sent
t: querytime
-r reverse the sort order (largest lastinstead of first)-t NUM just show the top n queries-a don't abstract all numbers to N and strings to'S' -n NUM abstract numbers with at least n digits within names-g PATTERN grep: only consider stmts that include this string
-h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard),
default is'*', i.e. match all-i NAME name of server instance (ifusing mysql.server startup script)-l don't subtract lock time from total time
mysqldumpslow--help
mysqldumpslow --help
-s, 是表示按照何种方式排序
比如:
mysqldumpslow -s r -t 20 /mysqldata/mysql/mysql06-slow.log | more