Mysql 的慢查询日志

数据库 新民 1546℃ 已收录 0评论

1、慢查询日志是什么?

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

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

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

             默认情况下mysql 没有开启慢查询日志,需要我们手动来设置这个参数;

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

2、如何查看mysql 是否开启了慢查询日志?

        Show variables like %slow_query_log%

       默认情况下 mysql slow_query_log 的值是OFF,表示慢查询日志是禁用的;可以通过设置              slow_query_log 的值来开启;

Show variables like ‘%slow_query_log%’; 执行的结果如下:

3、如何开启mysql 慢查询日志?

Set global slow_query_log=1;

          使用Set global slow_query_log=1; 来开启慢查询日志,只针对当前数据库有效;

           如果mysql重启后会失效;

 

如果要永久生效,就需要修改my.cnf 文件(其他系统变量也是如此)

修改my.cnf 文件,在[mysqld] 增加或修改参数 slow_query_log 和 slow_query_log_file 后,然后           重启mysql 服务,也即将如下两行配置进my.cnf文件:

 

slow_query_log=1

slow_query_log_file=/var/lib/mysql/localhost-slow.log

关于慢查询的参数slow_query_log_file,它指定慢查询日志文件的存放路径,系统默认会给一个              缺省的文件host_name-slow.log(如果没有指定参数slow_query_log_file的话);

4、开启了慢查询日志后,什么样的sql才会被记录到慢查询日志文件里面?

这个是由参数 long_query_time 控制,默认情况下 long_query_time 的值为10秒;

          命令:show variables like %long_query_time%; 来查看

可以使用命令(set global long_query_time=3)修改,也可以在my.cnf 文件里修改;

假如运行时间正好等于 long_query_time 的值,并不会被记录下来,也就是说,在mysql 源码里       是判断大于long_query_time ,而非大于等于;

5、使用命令设置long_query_time 后,为何无变化?

需要重新连接或新开一个会话才能看到修改值,show variables like ‘%long_query_time%’;

Show global variables like ‘%long_query_time%’;

6、查看慢sql有多少条?

Show global status like ‘%slow_queries%’;

7、mysql 日志分析工具mysqldumpslow

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

7.1 mysql 日志分析工具 mysqldumpslow 的帮助信息 mysqldumpslow  –help:

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

7.2 案例:

  • 得到返回记录及最多的10个sql:
    1. mysqldumpslow -s r -t 10 /var/lib/mysql/localhost-slow.log
  • 得到访问次数最多的10个sql:
    1. mysqldumpslow -s c -t 10 /var/lib/mysql/localhost-slow.log
  • 得到按照时间排序的前10条里面含有左连接的查询语句:
    1. mysqldumpslow -s t -t 10 -g “left join”/var/lib/mysql/localhost-slow.log
  • 另外在使用这些命令时结合 | 和 more 使用,否则有可能出现爆屏情况:
  1. a)   mysqldumpslow -s r -t 10 /var/lib/mysql/localhost-slow.log | more
本站文章如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:https://www.snowruin.com/?p=1670
喜欢 (1)or分享 (0)
发表我的评论
取消评论
表情 代码 贴图 加粗 链接 私信 删除线 签到

Hi,请填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址