mysql 慢查询日志

  • 配置参数 long_query_time 的值(默认是10秒),超过这个值的就会被是为慢查询,后面可以根据 EXPLAIN 来跟踪

  • 默认是关闭的。如果打开超过阈值的会被记录,所以建议在调优的时候才打开这个参数

    -- 查看慢查询是否开启
    show variables like 'slow_query_log';
    
    -- 打开
    set global slow_query_log = on;
    
    -- 慢查询日志文件位置
    show variables like 'slow_query_log_file';
    
    -- 同时查看慢查询状态和日志文件位置
    show variables like 'slow_query_log%';
    
    -- 配置阈值为 1 秒(这只对新建的会话生效,如果要使当前会话也生效,还要配置)
    set global long_query_time = 1;
    -- 当前会话也生效
    set long_query_time = 1;
    
    -- 查看阈值(全局)
    show global variables like 'long_query_time';
    -- 当前会话阈值
    show variables like 'long_query_time';
    
    -- 慢查询日志记录
    show status like 'slow_queries';
    
  • min_examined_row_limit,慢查询记录时,默认不管多少条结果,哪怕是 0 条,只要查询时间超过阈值,就会被记录。通过 min_examined_row_limit 参数能指定最少查询条数。比如慢查询阈值是 2 秒,最少条数是 100 条,当查询时间大于2秒并且结果集大于 100 才会被记录到日志文件中

  • 查看慢查询日志的 sql,使用 mysqldumpslow ...(参数) 慢查询文件(slow_query_log_file)命令查看。mysqldumpslow 命令全部的参数使用 mysqldumpslow -help 查看,下面列举部分

    • 这是系统命令(不能再 navicat 中执行)
    • s:排序方式。c:访问次数;r:返回记录;t:查询时间;at:平均查询时间(默认)
    • t:取多少条
    • a:不抽象参数(说人话就是显示 where 字段值)
  • g:正则表达式,过滤 指定的sql,大小写不敏感

    -- 取最长查询时间前 20 条
    mysqldumplog -s t -t  20 -a /home/mysql/data3002/mysql/slow_query.log
    
    -- 取最长查询时间前 20 条(只查询 sql 中有 join 的即多表查询)
    mysqldumplog -s t -t  20 -a -g 'join' /home/mysql/data3002/mysql/slow_query.log
    
posted @ 2023-05-17 16:41  CyrusHuang  阅读(48)  评论(0编辑  收藏  举报