MySQL高级知识(十)——慢查询日志
此博客的内容主要来源于尚硅谷的视频中,在此记录,以备以后自己查看。
1. 慢查询是什么
MySQL的慢查询日志是MySQL提供的一种日志记录,他用来记录在MySQL中响应时间啊你超过阀值的语句。
具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句将被记录下来。
由他来查看哪些SQL超出我们的最大忍耐时间值,比如一条sql执行超过5秒,我们就算慢SQL,希望能收集超过5秒的sql,结合之前的explain进行全面分析。
2. 如何开启慢查询
默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。
当然,如果不是调优的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件。
查看慢查询日志是否开启
show variables like '%slow_query_log%';

如图:Value的值为OFF表示慢查询日志关闭,ON为开启。
- 使用如下命令开启慢查询日志
set global slow_query_log=1;
注意:该命令开启慢查询日志只对当前数据库生效,MySQL重启失效,如果要配置长期有效,请在my.cnf中进行配置。
3. 慢查询相关参数
3.1. 查看慢查询的阈值时间:
show variables like '%long_query_time%';
注意:
该值默认情况下为10秒;
假如sql语句的运行时间正好等于long_query_time时候,sql语句并不会被记录下来,因为判断慢查询是sql的执行时间大于long_query_time,而不是大于等于。
3.2. 设置long_query_time的值:
set global long_query_time=3;
注意:当设置long_query_time值后,查看其值并没有变化,解决方法:
- 关闭当前连接,重新开一个新的连接
- 使用如下命令:
show global variables like '%long_query_time%';
#或者
set session long_query_time = 1;
3.3. 记录慢查询sql的数码
show global status like '%Slow_queries%';


从图中可以看出select sleep(15)语句。
4. 日志分析工具mysqliumpslow
4.1. 查看帮助信息
- -v verbose
- -d debug
- -s ORDER what to sort by (al, at, ar, c, l, r, t), ‘at’ is default
- al: average lock time
- ar: average rows sent
- at: average query time
- c: count
- l: lock time
- r: rows sent
- t: query time
- -r reverse the sort order (largest last instead of first)
- -t NUM just show the top n queries
- -a don’t abstract all numbers to N and strings to ‘S’
- -n NUM abstract numbers with at least n digits within names
- -g PATTERN grep: only consider stmts that include this string
- -h HOSTNAME hostname of db server for -slow.log filename (can be wildcard),
default is '’, i.e. match all - -i NAME name of server instance (if using mysql.server startup script)
- -l don’t subtract lock time from total time
4.2. 工作常用参考
- 得到返回记录集最多的10个SQL
mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log
- 得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /var/lib/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 /var/lib/mysql/atguigu-slow.log | more
版权声明:本文为dh12313012原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。