慢查询定义及作用

慢查询日志,顾名思义,就是查询慢的日志,是指mysql记录所有执行超过指定参数设定的时间阈值的SQL语句的日志。该日志能为SQL语句的优化带来很好的帮助。默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能。

 

测试机器mysql的版本号为

 

mysql> show variables like '%version%';
+-------------------------+-----------------------------+
| Variable_name           | Value                       |
+-------------------------+-----------------------------+
| innodb_version          | 5.5.37                      |
| protocol_version        | 10                          |
| slave_type_conversions  |                             |
| version                 | 5.5.37-0ubuntu0.12.04.1-log |
| version_comment         | (Ubuntu)                    |
| version_compile_machine | x86_64                      |
| version_compile_os      | debian-linux-gnu            |
+-------------------------+-----------------------------+

 

 

开启慢查询日志

在mysql的配置文件my.cnf 中的mysqld下方添加以下参数:

 

[mysqld]


# slow query log
log_slow_queries=ON
long_query_time=1
slow_launch_time=1
slow_query_log=ON
slow_query_log_file=/var/lib/mysql/slow_queries.log

 

 

long_query_time=1 表示记录查询时间超过1秒的sql

slow_query_log_file 慢日志文件

slow_launch_time : 表示如果建立线程花费了比这个值更长的时间,slow_launch_threads 计数器将增加

 

重新启动mysql,查看配置参数如下:

 

mysql> show variables like '%slow%';
+---------------------+---------------------------------+
| Variable_name       | Value                           |
+---------------------+---------------------------------+
| log_slow_queries    | ON                              |
| slow_launch_time    | 1                               |
| slow_query_log      | ON                              |
| slow_query_log_file | /var/lib/mysql/slow_queries.log |
+---------------------+---------------------------------+

 

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

 

 

 测试下:

mysql> select sleep(2) ;
+----------+
| sleep(2) |
+----------+
|        0 |
+----------+
1 row in set (2.00 sec)

 

查看日志:

root@ubuntu:~# cat /var/lib/mysql/slow_queries.log
/usr/sbin/mysqld, Version: 5.5.37-0ubuntu0.12.04.1-log ((Ubuntu)). started with:
Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock
Time                 Id Command    Argument
/usr/sbin/mysqld, Version: 5.5.37-0ubuntu0.12.04.1-log ((Ubuntu)). started with:
Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock
Time                 Id Command    Argument
# Time: 140816 13:03:53
# User@Host: root[root] @ localhost []
# Query_time: 2.000235  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1408165433;
select sleep(2);