在mysql中可以开启慢查询日志,来使mysql自动记录那些执行时间超过设定的阀值的sql语句,从而方便我们进行针对性的优化。
开启慢查询日志
在mysql中,慢查询日志默认是关闭的。
mysql> show variables like "log_slow%";
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| log_slow_queries | OFF |
+------------------+-------+
1 row in set (0.00 sec)
那首先要做的就是将慢查询日志记录这个功能打开。
mysql> set global log_slow_queries=ON;
Query OK, 0 rows affected, 1 warning (0.00 sec)
好了,这样就把慢查询功能打开了。
还有一条warning,看一下是什么东西。
mysql> show warnings;
+---------+------+-----------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------------------------------------------------------------------------------+
| Warning | 1287 | The syntax '@@log_slow_queries' is deprecated and will be removed in MySQL 7.0. Please use '@@slow_query_log' instead |
+---------+------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
噢,原来是告诉我们”log_slow_queries“这个变量将被移除了,以后要使用”slow_query_log“进行替代,挺好,这个新的更贴合一些。
看一下这个新的变量情况。
mysql> show variables like "slow_query_log";
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | ON |
+----------------+-------+
1 row in set (0.00 sec)
OK,功能开启了之后,就需要设置查询时间的阀值了,这个阀值表示超过这个时间的sql查询,就会被记录到慢查询日志文件中。
mysql> show variables like "long_query_time";
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 10.000000 |
+-----------------+----------+
1 row in set (0.00 sec)
mysql中这个阀值默认的设置是10秒,这实在是太太太太长了,修改一下,对我们来说,超过1秒的,基本就需要观察一下了。(如果你把这个值设置为0,那所有的查询都将会被记录,不过这样通常没有什么意义)
mysql> set long_query_time=1;
Query OK, 0 rows affected (0.00 sec)
OK,将阀值设置为1秒了,这样只要超过这个阀值的查询,就会被记录到日志中了。
可能有的同学要问了,这个慢查询日志是在哪里呀,可以从系统中看到。
mysql> show variables like "slow%";
+---------------------+----------------------------------------+
| Variable_name | Value |
+---------------------+----------------------------------------+
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /var/lib/mysql/****-slow.log |
+---------------------+----------------------------------------+
3 rows in set (0.00 sec)
slow_query_log_file指明了慢查询日志所在的具体位置。