慢查询日志

  • 慢查询日志是MySql提供的一种日志记录,它用来记录在MySql中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。
  • 具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句。
  • 根据日志来查看哪些SQL超出了我们的最大忍耐时间值,比如一条SQL执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒的SQL,结合EXPLAIN进行分析。


查看是否开启慢查询:

  1. 查看是否开启:SHOW VARIABLES LIKE '%slow_query_log%';

    +---------------------+--------------------------+
    | Variable_name       | Value                    |
    +---------------------+--------------------------+
    | slow_query_log      | ON                       |
    | slow_query_log_file | DESKTOP-78I02VU-slow.log |
    +---------------------+--------------------------+
  2. 开启慢查询:SET GLOBAL slow_query_log=1;(临时生效)

永久开启:

  • 修改my.cnf文件,[mysqld]下增加或修改参数:
    slow_query_log=1
    slow_query_log_file=/var/lib/mysql/slowQuery.log

如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会带来一定的性能影响。

小试牛刀

  • 查看当前慢查询阈值:SHOW VARIABLES LIKE 'long_query_time%';
  • 设置自定义阈值:set global long_query_time=3;
  • 重新开启新会话查看是否设置成功:SHOW GLOBAL VARIABLES LIKE 'long_query_time';
  • 执行SELECT SLEEP(4);毫无疑问这是一个慢查询
  • 查看慢查询SQL条目数:SHOW GLOBAL STATUS LIKE '%Slow_queries%';

日志分析工具mysqldumpslow

常用参数:

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

常用参考命令:

得到返回记录集最多的10个SQL
mysqldumpslow -s r -t 10 slowLog.log

得到访问次数最多的10个SQL
mysqldumoslow -s c -t 10 slowLog.log

得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow -s t -t 10 -g "left join" slowLog.log

建议结合|和more使用,否则可能出现爆屏情况
mysqldumpslow -s r -t 10 slowLog.log | more
Last modification:September 7th, 2020 at 11:37 am
如果觉得我的文章对你有用,请随意赞赏