慢查询日志

MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。

具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句。

由他来查看哪些 SQL 超出了我们的最大忍耐时间值,比如一条 sql 执行超过 5 秒钟,我们就算慢 SQL ,希望能收集超过 5 秒的 sql ,结合之前 explain 进行全面分析。

SHOW VARIABLES LIKE '%slow_query_log%';查看是否开启。下面是日志文件。

image-20201029121516154

默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的,

可以通过设置slow_query_log的值来开启set global slow_query_log=1

使用set global slow_query_log=1;开启了慢查询日志 只对当前数据库生效, 如果MySQL重启后则会失效。 要想一直生效在配置文件中配置。

那么开启了慢查询日志后,什么样的SQL才会记录到慢查询日志里面呢?

查看当前多少秒算慢 SHOW VARIABLES LIKE 'long_query_time%';

设置慢的阙值时间 set long_query_time=0.1当前连接有效

开启输入一条查询语句。

image-20201029122347969

进入到我们的目录里查看日志文件

image-20201029122527699

日志分析工具mysqldumpslow

在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow

  • -a: 不将数字抽象成N,字符串抽象成S
  • -s: 是表示按照何种方式排序;
  • c: 访问次数
  • l: 锁定时间
  • r: 返回记录
  • t: 查询时间
  • al:平均锁定时间
  • ar:平均返回记录数
  • at:平均查询时间
  • -t:即为返回前面多少条的数据
  • -g:后边搭配一个正则匹配模式,大小写不敏感的

mysqldumpslow -s c -t 3 日志文件

SHOW PROCESSLIST:查询所有用户正在干什么

如果出现不顺眼的kill [id]

image-20201029152301686