{{ it.name }}
{{ it.text }}
一、 简介
慢查询日志,开启它我们可以通过参数来控制其记录执行或查询时间长的 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 来进行分析。
那么如何读懂慢日志里面对这些信息呢?
通过这些我们就可以来明确的知道一条 SQL 究竟执行了多长时间的查询,有没有发生锁等待,此查询实际在数据库中读取了多少行数据了。
三、如何在线安全清空 slow.log 文件
在开启 log_queries_not_using_indexes 后,slow log 文件不仅仅会记录慢查询日志,还会把查询过程中未使用索引或全表扫描的 SQL 记录到日志中,久而久之日志的空间便会变得越来越大,那么如何在线且安全的清空这些 slow log 日志,为磁盘释放空间呢?
MySQL 对于慢日志的输出方式支持两种,TABLE 和 FILE,查看方法如下:
确认清楚输出方式后,可以分别对不同的输出方式选择不同的清空方法,本次将对两种清空方法共同介绍。
3.1 FILE 类型清空方法
1、查询 slow query log 开启状态
2、关闭 slow query log
3、确认关闭成功
4、对日志进行重命名或移除
5、重新开启 slow query log
6、执行 SQL 进行验证
7、验证新生成文件记录成功
8、清理旧的 slowlog 文件
3.2 TABLE 类型清空方法
1、先关闭 slow query log
2、确认关闭成功
3、TABLE 类型的 slowlog 存放在 mysql.slow_log 表中,对 slow_log 进行重命名为 old_slow_log
4、创建全新的 slow_log 文件拷贝原来 slow_log 文件的表结构
5、启动 slow query log
6、测试验证
7、删除旧的 slow_log 表
总结
该文章主要讲述了 slow log 的开启方式、分析方法与清空操作,熟练使用分析 slow log 文件可以实时观察数据库 SQL 的执行情况,并为 SQL 优化奠定基础。