Mysql慢查询日志相关参数设置
慢查询日志,就是查询超过一定的时间没有返回结果的时候,MySQL会将执行的SQL记录到日志中,这个日志,就称为慢查询日志。通过分析慢查询日志,可以快速找出执行慢的SQL语句,然后进行优化。
慢查询主要的参数如下,后面会具体说明这几个参数:
+---------------------------------------+----------------------------------+---------------------------------------------
| Variable_name | Value | Content
+---------------------------------------+----------------------------------+---------------------------------------------
| slow_query_log | OFF |开启慢查询
| long_query_time | 10.000000 |慢查询时间阈值,执行时间超过阈值的SQL才会记录
| log_output | FILE |慢查询日志存储形式:FILE、TABLE
| slow_query_log_file | /var/lib/mysql/hostname-slow.log |慢日志存放位置
| log_queries_not_using_indexes | OFF |记录任何不使用索引的sql
| log_throttle_queries_not_using_indexes| 0 |每分钟允许记录到slow log的且未使用索引的SQL语句次数
+---------------------------------------+----------------------------------+---------------------------------------------慢查询日志相关参数
1、是否启用慢查询日志(slow_query_log)
默认情况下,MySQL并不开启慢查询日志,需要手动开启
show variables like 'slow_query_log';
mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | OFF |
+----------------+-------+
1 row in set (0.02 sec)
通过修改MySQL配置文件开启慢查询日志
2、记录慢查询SQL时间(long_query_time)
慢查询日志还有一个重要参数 long_query_time,MySQL默认慢查询日志时间为10秒,通过修改long_query_time这个阈值来修改默认大小。 设置long_query_time的值后,MySQL数据库会记录执行时间超过该值的所有SQL语句,执行时间正好等于long_query_time的SQL语句并不会被记录下来。
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
slow_query_log=on --开启慢查询日志
slow_query_log_file=slow-log --指定保存路径及文件名,默认为数据文件目录,hostname-slow.log
long_query_time=1 --指定多少秒返回查询的结果为慢查询
是否记录没有使用索引的SQL(log_queries_not_using_indexes)
另一个和慢查询日志有关的参数是log_queries_not_using_indexes,如果运行的SQL语句没有使用索引,则MySQL数据库同样会将这条SQL语句记录到慢查询日志文件。
mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF |
+-------------------------------+-------+
1 row in set (0.00 sec)
开启没有使用索引记录慢查询日志的阈值
mysql> set global log_queries_not_using_indexes=1;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | ON |
+-------------------------------+-------+
1 row in set (0.00 sec)
log_throttle_queries_not_using_indexes
MySQL 5.6.5版本开始新增了一个参数log_throttle_queries_not_using_indexes,用来表示每分钟允许记录到slow log的且未使用索引的SQL语句次数。该值默认为0,表示没有限制。在生产环境下,若没有使用索引,此类SQL语句会频繁地被记录到slow log,从而导致slow log文件的大小不断增加。
mysql> show variables like 'log_throttle_queries_not_using_indexes';
+----------------------------------------+-------+
| Variable_name | Value |
+----------------------------------------+-------+
| log_throttle_queries_not_using_indexes | 0 |
+----------------------------------------+-------+
1 row in set (0.00 sec)




