Fork me on GitHub

6.5 慢查询日志

1. 是什么?

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

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

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

2.查看和开启

a.查看是否开启慢查询

show variables like '%slow_query_log%'

b.开启慢查询

set global slow_query_log=1
如果想永久生效,就必须修改配置文件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/xxxx-show.log 关于慢查询的参数slow_query_log_file,它指定慢查询日志文件的存放路径,系统默认会给一个缺省的文件host_name-show.log(如果没有指定参数slow_query_file的话)

3. 查看设置的阀值

show VARIABLES LIKE 'long_query_time%';

4. 设置阀值

set global long_query_time=3;#设置为3秒,默认是10秒。
#设置后需要重新连接或打开一个新的回话才能看到修改的值。
show VARIABLES LIKE 'long_query_time%';
#不用重新连接的语句
show global variables like 'long_query_time';

#也可以在my.cnf参数里面修改。

#假如运行时间等于long_query_time的情况,并不会被记录下来,也就是说,在mysql源码里是大于long_query_time,而非大于等于。

5. 查询当前系统中有多少条慢查询记录

show globle status like 'slow_queries';

6. 配置模板

#mysqld下的配置
slow_query_log=1;
slow_query_log_file=/var/lib/mysql/xxxx-slow.log;
long_query_time=3;
log_output=file;

7.日志分析工具mysqldumpslow

#得到返回记录集最多的10个SQL
mysqldumpslow -s r -t 10 /var/lib/mysql/xxxx-slow.log

#得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /var/lib/mysql/xxxx-slow.log

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

#另外建议在使用这些命令的时候结合 | 和more 使用,否则可能出现爆屏情况
mysqldumpslow -s r -t 10 /var/lib/mysql/xxxx-slow.log | more

 

 

关注我的公众号,精彩内容不能错过

  

posted @ 2017-10-13 15:03  程序员果果  阅读(153)  评论(0编辑  收藏  举报