《MySQL系列-InnoDB引擎15》文件-日志文件-慢查询日志

Posted DATA数据猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《MySQL系列-InnoDB引擎15》文件-日志文件-慢查询日志相关的知识,希望对你有一定的参考价值。

日志文件

日志文件记录了影响mysql数据库的各种类型活动。MySQL数据库中常见的日志文件有:

  • 错误日志(error log)
  • 二进制日志(bilog)
  • 慢查询日志(slow query log)
  • 查询日志(log)

这些日志文件可以帮助DBA对MySQL数据库的运行状态进行诊断,从而更好的进行数据库层面的优化。

慢查询日志

  通过错误日志(error log)可以获得关于数据库优化的信息,而慢查询日志(slow log)可以帮助DBA定位可能存在问题的SQL,从而进行SQL语句层面的优化。例如,可以在MySQL启动时设置一个阈值,将运行时间超过该值的所有SQL都记录到慢查询日志文件中。DBA每天或每过一段时间对其进行检查,确认是否有SQL语句需要进行优化。该阈值可以通过参数long_query_time来设置,默认值为10,代表10秒。

  在默认情况下,MySQL数据库并不启动慢查询日志,用户需要手动将这个参数设置为ON:

show variables like 'long_query_time'\\G;

show variables like 'long_slow_queries'\\G;

  还有两点需要注意的是。1:设置long_query_time这个阈值后,MySQL数据库会记录运行时间超过该值的所有SQL语句,但是运行时间刚好等于long_query_time的情况并不会被记录。2:从MySQL 5.1开始,long_query_time开始以微秒记录SQL语句运行的时间,之前仅用秒为单位记录。使用微妙记录SQL运行时间,可以供DBA更好的分析,对DBA来说,一条SQL语句运行0.5秒和0.05秒是非常不一样的。前者可能进行了表扫描,后面可能进行了索引。

  另一个跟慢查询日志有关的参数是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 5.6.5版本开始新增了一个参数log_throttle_queries_not_using_indexes,用来表示每分钟允许记录到slow log的且未使用索引的SQL语句次数。该值默认为0,表示没有限制。在生产环境下,若没有使用索引,此类SQL语句被频繁记录到slow log,从而导致slow log文件的大小不断增加,故DBA可通过此参数进行配置。

  DBA可以通过慢查询日志来找出有问题的SQL语句,对其进行优化。然后随着MySQL数据库服务器运行时间的增加,可能会越来越多的SQL被记录到慢查询日志中,此时要分析该文件就显得不是那么简单和直观了。这时MySQL数据库提供了mysqldumpslow命令,可以很好的帮助DBA解决该问题。也可以通过查询mysql.slow_log表查看慢查询日志记录。

以上是关于《MySQL系列-InnoDB引擎15》文件-日志文件-慢查询日志的主要内容,如果未能解决你的问题,请参考以下文章

《MySQL系列-InnoDB引擎15》慢查询日志拓展-mysqldumpslow日志分析工具

《MySQL系列-InnoDB引擎15》慢查询日志拓展-mysqldumpslow日志分析工具

《MySQL系列-InnoDB引擎15》慢查询日志拓展-如何开启MySQL慢查询日志?

《MySQL系列-InnoDB引擎15》慢查询日志拓展-如何开启MySQL慢查询日志?

《MySQL系列-InnoDB引擎23》文件-InnoDB存储引擎文件-重做日志文件

《MySQL系列-InnoDB引擎14》文件-日志文件-错误日志