MySQL慢查询日志总结

 


 

项目刚开始没有考虑那么多,项目越做越大,某一天突然某个专辑打开很慢,show processlist查看,发现某个SQL查询特别多,查看一下没有加索引,
基本上大部分慢查询都是因为没有加索引导致的,索引这个东西,一般可以在建项目的时候就考虑进去了,有些历史遗留项目没太注意这方面。

 

参数说明

slow_query_log     :是否开启慢查询日志,ON表示开启,OFF表示关闭。
slow-query-log-file:慢查询日志存储路径,可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log
long_query_time    :慢查询阈值,当查询时间多于设定的阈值时,记录日志。
log_queries_not_using_indexes:会将那些未使用索引的SQL也被记录到慢查询日志中,另外,full index scan的SQL也会被记录到慢查询日志,一般我们不开启
log_output         :日志存储方式,log_output='FILE'表示将日志存入文件,默认值是'FILE'。log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中,一般记录到文件

 

查询配置

mysql> show variables like 'slow%';
+---------------------+--------------------------------------------+
| Variable_name       | Value                                      |
+---------------------+--------------------------------------------+
| slow_launch_time    | 2                                          |
| slow_query_log      | OFF                                        |
| slow_query_log_file | /db/mysql/xxx-slow.log |
+---------------------+--------------------------------------------+
3 rows in set (0.00 sec)

mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

 

开启慢查询日志

第一步(临时生效,重启失效)

mysql> set global slow_query_log='ON';
mysql> set global long_query_time=1;

 

第二步(永久有效)

vim /etc/my.cnf

[mysqld]
#开启慢查询日志
slow_query_log = ON
slow_query_log_file = /db/mysql/slow.log
long_query_time = 1
修改配置文件后不用重启MySQL,等待下一次重启