Slow Query Log 使用详解

Slow Query Log 使用详解

发布时间:2022-04-20 浏览次数:17062

一、 简介

慢查询日志,开启它我们可以通过参数来控制其记录执行或查询时间长的 SQL、全表扫描的 SQL、没有使用索引的 SQL。没错,它的作用就是记录哪些糟糕的、让数据库变慢的 SQL,把它们揪出来。

我们一般通过如下参数来控制 slow 的开启与记录:slow_query_log、slow_query_log_file、long_query_time、min_examined_row_limit、log_output、log_queries_not_using_indexes、log_throttle_queries_not_using_indexes。

  • slow_query_log:控制 slow_query_log 是否开启,参数 ON|OFF

  • slow_query_log_file:控制文件的写入位置,参数为文件的具体位置,如:/data/slow.log

  • long_query_time:设置 SQL 执行时间大于等于多少秒(可精确到微秒)时记录到日志中

  • min_examined_row_limit:设置检查的行数大于等于多少行时记录到日志中

  • log_output:设置慢查询记录到哪里,参数 FILE|TABLE

  • log_queries_not_using_indexes:控制查询过程中未使用索引或全表扫描的 SQL 是否记录到日志中

  • log_throttle_queries_not_using_indexes:开启 log_queries_not_using_indexes 后,此参数会限制每分钟可以写入慢速查询日志的此类查询的数量,参数设置 0 为不限制

二、查看方式与内容分析

慢日志分析的方式有两种,因为慢日志文件一般较小,所以一种方式为在慢日志文件中直接使用 less 或 more 命令来查看。第二种方式则是利用 MySQL 官方提供给我们的程序:mysqldumpslow 来快速查看 slowlog 日志中记录的慢 SQL。

对于我们详细来分析 SQL 的话,一般采用第一种方式,查找到对应时间点的对应 SQL 来进行分析。

image

那么如何读懂慢日志里面对这些信息呢?

image

通过这些我们就可以来明确的知道一条 SQL 究竟执行了多长时间的查询,有没有发生锁等待,此查询实际在数据库中读取了多少行数据了。

三、如何在线安全清空 slow.log 文件

在开启 log_queries_not_using_indexes 后,slow log 文件不仅仅会记录慢查询日志,还会把查询过程中未使用索引或全表扫描的 SQL 记录到日志中,久而久之日志的空间便会变得越来越大,那么如何在线且安全的清空这些 slow log 日志,为磁盘释放空间呢?

MySQL 对于慢日志的输出方式支持两种,TABLE 和 FILE,查看方法如下:

image

3.1 FILE 类型清空方法

1、查询 slow query log 开启状态

image

2、关闭 slow query log

image

3、确认关闭成功

image

4、对日志进行重命名或移除

image

5、重新开启 slow query log

image

6、执行 SQL 进行验证

image

7、验证新生成文件记录成功

image

image

8、清理旧的 slowlog 文件

image

3.2 TABLE 类型清空方法

1、先关闭 slow query log

image

2、确认关闭成功

image

3、TABLE 类型的 slowlog 存放在 mysql.slow_log 表中,对 slow_log 进行重命名为 old_slow_log

image

4、创建全新的 slow_log 文件拷贝原来 slow_log 文件的表结构

<img src="res/202204/20/a1a38b202ace3270.png" title=""Slow Query Log " alt="image"/>

5、启动 slow query log

image

6、测试验证

image

image

7、删除旧的 slow_log 表

image

总结

该文章主要讲述了 slow log 的开启方式、分析方法与清空操作,熟练使用分析 slow log 文件可以实时观察数据库 SQL 的执行情况,并为 SQL 优化奠定基础。


相关推荐

产品试用 产品试用
400-820-6580 免费电话