什么是慢SQL

这里指的是MySQL慢查询,具体指运行时间超过long_query_time值的SQL。
我们常见的MySQL中有二进制日志binlog、中继日志relaylog、重做回滚日志redolog、undolog等。针对慢查询,还有一种慢查询日志slowlog,用来记录在MySQL中响应时间超过阀值的语句。
慢查询日志不只会记录select语句,其实也会记录执行时间超过了long_query_time设定的阈值的insert、update等DML语句。

  1. # 查看慢SQL是否开启
  2. show variables like 'slow_query_log%';
  3. # 查看慢查询设定的阈值 单位:秒 默认10S
  4. show variables like 'long_query_time';

image.png
图中slow_query_log默认是关闭的,可以使用命令开启,需要退出下,重新进入才能生效。

# 设置查询时间为3秒
set global long_query_time=3;
# 开启慢日志
set global slow_query_log=1

慢SQL为何会导致故障

真实的慢SQL往往会伴随着大量的行扫描、临时文件排序或者频繁的磁盘flush,直接影响就是磁盘IO升高,正常SQL也变为了慢SQL,大面积执行超时。