慢查询日志


   慢查询日志用来记录所有执行时间超过long_query_time的SQL语句的日志文件,获得初始表锁定的时间不算作执行时间。使用选项--slow_query_log[={0|1}]停止或者启动它。如果没有给定file_name的值, 默认名是host_name-slow.log。使用选项--slow_query_log_file=file_name指定文件位置和文件名称。

   语句执行完并且所有锁释放后记入慢查询日志。记录顺序可以与执行顺序不相同。


   慢查询日志可以用来找到执行时间长的查询语句,并对其进行优化,可以使用mysqldumpslow命令获得日志中显示的查询摘要来处理慢查询日志。


   慢查询日志中,不使用索引的慢查询同使用索引的查询一样记录。通过选项--log-queries-not-using-indexes,可以防止不使用索引的慢查询记入慢查询日志。通过选项--log-slow-admin-statements,可以请求将慢管理语句,例如OPTIMIZE TABLE、ANALYZE TABLE和 ALTER TABLE写入慢查询日志。通过选项--log-slow-slave-statements,可以将复制查询的语句记入慢查询日志。


在文件/etc/my.cnf中追加下面内容来设置慢查询日志
slow_query_log = ON
slow_query_log_file = /tmp/mysqlslow.log
long_query_time = 5
log-queries-not-using-indexes
log-slow-admin-statements

log-slow-slave-statements


重启mysql
[root@localhost mysql]# service mysqld restart
Shutting down MySQL... SUCCESS!

Starting MySQL... SUCCESS!


查看慢查询日志信息
# mysql -h linux -u root -proot
mysql> show variables like '%slow%';
+---------------------+--------------------+
| Variable_name       | Value              |
+---------------------+--------------------+
| log_slow_queries    | ON                 |
| slow_launch_time    | 2                  |
| slow_query_log      | ON                 |
| slow_query_log_file | /tmp/mysqlslow.log |

+---------------------+--------------------+


动态关闭慢查询日志

mysql> SET GLOBAL slow_query_log = 'OFF';


动态启动慢查询日志

mysql> SET GLOBAL slow_query_log = 'ON';


--清除慢查询日志
[root@localhost mysql]# cd /var/lib/mysql
[root@localhost mysql]# mv linux-slow.log linux-slow.log.old
[root@localhost mysql]# mysqladmin -h linux -u root -proot flush-logs

[root@localhost mysql]# mv linux-slow.log.old /backup/linux-slow.log.old


--使用mysqldumpslow工具检索内容
[root@localhost mysql]# mysqldumpslow /tmp/mysqlslow.log -s t -r
Reading mysql slow query log from /tmp/mysqlslow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=0.0 (0), 0users@0hosts