MYSQL慢查询能记录下所有执行超过long_query_time时间的SQL语句, 帮你找到执行慢的SQL, 方便我们对这些SQL进行优化.
如何开启慢查询?
首先我们先查看MYSQL服务器的慢查询状态是否开启.
执行如下命令:
mysql> show variables like 'slow%';
+---------------------+-----------------------------------+
| Variable_name | Value |
+---------------------+-----------------------------------+
| slow_launch_time | 2 |
| slow_query_log | OFF |
| slow_query_log_file | /data/mysql/data/ser6-51-slow.log |
我们可以看到当前log_slow_queries状态为OFF, 说明当前并没有开启慢查询.
需要两个步骤开启:
一:在线修改
#修改slow_query_log
mysql> set global slow_query_log=ON
-> ;
Query OK, 0 rows affected (0.05 sec)
mysql> show variables like 'slow%';
+---------------------+-----------------------------------+
| Variable_name | Value |
+---------------------+-----------------------------------+
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /data/mysql/data/ser6-51-slow.log |
+---------------------+-----------------------------------+
3 rows in set (0.00 sec)
#修改long_query_time
默认该参数是10秒:
mysql> show variables like 'long%';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
假如我想记录执行时间超过3秒的sql语句:
mysql> set global long_query_time = 3
-> ;
Query OK, 0 rows affected (0.00 sec)
当前会话看不到long_query_time修改后的变化,需要新打开一个会话,进行查询。
mysql> show variables like 'long%';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 3.000000 |
+-----------------+----------+
1 row in set (0.00 sec)
二:修改my.cnf
在线修改的方式在重启数据库服务后会失效,所以还需要修改配置文件:
在[mysqld]下添加:
slow_query_log_file=/data/mysql/data/ser6-51-slow.log
slow_query_log=ON
long_query_time = 3
三:验证是否配置成功
#查看慢查询日志文件是否生成
[root@ser6-51 ~]# ls -l /data/mysql/data/ser6-51-slow.log
-rw-rw---- 1 mysql mysql 570 Jun 26 10:08 /data/mysql/data/ser6-51-slow.log
#查看long_query_time是否生效
mysql> select sleep(4);
+----------+
| sleep(4) |
+----------+
| 0 |
+----------+
1 row in set (4.00 sec)
[root@ser6-51 ~]# vi /data/mysql/data/ser6-51-slow.log
# Time: 150626 10:31:18
# User@Host: root[root] @ localhost [] Id: 26
# Query_time: 4.000214 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1435285878;
select sleep(4);
--慢查询日志记录了这个耗时4秒的操作,所以配置成功。