MySQL高级--慢查询日志

慢查询日志是什么

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

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

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

  1. 慢查日志的使用:
    • 说明:
      1. 默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。

      2. 当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件 

    • 查看是否开启及如何开启
      • 查看默认值 :SHOW VARIABLES LIKE '%slow_query_log%;

      • 设置开启查询慢日志 : set global slow_query_log=1;

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

      • 可以通过设置slowquery_log的值来开启

      • SHOW VARIABLES LIKE '%slow_query_log%';

      • 使用set global slow_ query_ log=1开启了慢查询日志只对当前数据库生效,如果MySQL重启后则会失效。

        1. 如果要永久生效,就必须修改配置文件my.cnf (其它系统变量也是如此)
        2. 修改my.cnf文件,[mysqld]下 增加或修改参数

        3. slow_ query_ _log 和slow_ _query_ _log_ file后, 然后重启MySQL服务器。也即将如下两行配置进my .cnf文件

        4. slow query_ log =1

        5. slow_ query_ log_ file=/var/lib/mysql/localhost-slow.log

      • 关于慢查询的参数slow_ _query_ _log_ file ,它指定慢查询日志文件的存放路径,系统默认会给一个缺省 的文件host_ _name-slow.log (如果没有指定参数slow_ _query_ log_ file的话)

  2. 什么样的sql才会记录到慢查询日志中
    • 这个是由参数long_ query_time控制, 默认情况下long_ query_ _time的值为10秒,

    • 命令: SHOW VARIABLES LIKE 'long_ query_ _time%';

    • 可以使用命令修改,也可以在my.cnf参数里面修改。

    • 假如运行时间正好等于long_ _query_ time的情况,并不会被记录下来。也就是说,

    • 在mysq|源码里是判断大于long_ query_ time, 而非大于等于。

  3. 实际使用:  
    1. 查看当前多少秒算是慢的sql:show  variables like ‘long_query_time%’;
    2. 设置慢的阙值时间:set  global long_query_time =3;
    3. 设置之后发现还是10s,并不是我们设置的3。
    • 为什么设置之后还是看不出来变化呢:
    • 需要重新连接后重新开一个会话才能看到修改值
    • show  variables  like 'long_query_time%'
    • show global variables like 'long_query_time';
  4. 使用语句执行时间是4秒钟:select sellp(4);在另一个窗口使用命令:tail -5 /var/lib/mysql/主机名-slow.log
  5. 查询当前数据库中有多少条慢询记录:show global status like '%Slow_queries%' ;
    • 配置文件配置永久生效:
      • slow_query_log=1;

      • slow_query_log_file=/var/lib/mysql/localhost-slow.log;
      • long_query_time=3;
      • log_output=FILE;   
  6. 日志分析工具mysqldumpslow:在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow
    • 查看mysqldumpslow 的帮助信息:  mysqldumpslow --help  

      • s:是表示按照何种方式排序;

      • c:访问次数

      • l:锁定时间

      • r:返回记录

      • t:查询时间

      • al:平均锁定时间

      • ar:平均返回记录数

      • at:平均查询时间

      • t:即为返回前面多少条的数据;

      • g:后边搭配一个正则匹配模式,大小写不敏感的;

    • 得到返回记录集最多的10个SQL
      mysqldumpslow S r -t 10 /var/ib/mysql/atguigu-slow.log

    • 得到访问次数最多的10个SQL
      mysqldumpslow -S C -t 10 /var/ib/mysql/atguigu-slow.log

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

    • 另外建议在使用这些命令时结合|和more 使用,否则有可能出现爆屏情况
      mysqldumpslow -S r -t 10 Nvar/lib/mysql/atguigu-slow.log| more

        

 

posted @ 2021-05-18 16:45  张紫韩  阅读(63)  评论(0编辑  收藏  举报