slow query log

慢查询日志(slow query log):用来记录在 MySQL 中执行时间超过指定时间的查询语句,在 SQL 优化过程中会经常使用到。通过慢查询日志,可以查找出哪些查询语句的执行效率低,耗时严重。
出于性能方面的考虑,一般只有在排查慢 SQL、调试参数时才会开启,默认情况下,慢查询日志功能是关闭的。可以通过以下命令查看是否开启慢查询日志:

  1. mysql> SHOW VARIABLES LIKE 'slow_query%';
  2. +---------------------+--------------------------------------------------------+
  3. | Variable_name | Value |
  4. +---------------------+--------------------------------------------------------+
  5. | slow_query_log | OFF |
  6. | slow_query_log_file | /usr/local/mysql/data/iZ2zebfzaequ90bdlz820sZ-slow.log |
  7. +---------------------+--------------------------------------------------------+

通过如下命令开启慢查询日志后,可以发现 iZ2zebfzaequ90bdlz820sZ-slow.log 日志文件里并没有内容,可能因为执行的 SQL 都比较简单没有超过指定时间。

  1. mysql> SET GLOBAL slow_query_log=ON;
  2. Query OK, 0 rows affected

上边提到超过指定时间的查询语句才算是慢查询,那么这个时间阈值又是多少呢?通过 long_query_time 参数来查看一下,发现默认是 10 秒。

  1. mysql> SHOW VARIABLES LIKE 'long_query_time';
  2. +-----------------+-----------+
  3. | Variable_name | Value |
  4. +-----------------+-----------+
  5. | long_query_time | 10.000000 |
  6. +-----------------+-----------+

这里将 long_query_time 参数改小为 0.001秒再次执行查询 SQL,看看慢查询日志里是否有变化。

  1. mysql> SET GLOBAL long_query_time=0.001;
  2. Query OK, 0 rows affected

果然再执行 SQL 的时,执行时间大于0.001秒,发现慢查询日志开始记录了。
慢查询日志 - 图1