[TOC] 序言: 在我面试不少人的过程当中,不少人谈到SQL优化都头头是道,建索引,explain分析,like全模糊会致使索引失效 云云,因而我问道:优化以前,须要找出数据库中好比超过2s的慢SQL,你是怎么找的?不少人答不上来,要是找都找不到,怎么去优化呢,一个中大型系统可能成千上万条SQL都不过度,难道要一个个去分析么。html
因此今天和你们聊聊 慢SQL的挖掘机-慢查询日志mysql
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time
值的SQL,则会被记录到慢查询日志中。linux
固然,若是不是调优须要的话,通常不建议启动该参数,由于开启慢查询日志会或多或少带来必定的性能影响。面试
###1. 慢查询日志开启sql
开启了慢查询日志后,什么样的SQL才会记录到查询日志里面?数据库
这个是由参数long_query_time控制,默认状况下long_query_time的值为10秒工具
查看命令: show variables like 'long_query_time%';性能
注: 永久设置慢查询日志开启,以及设置慢查询日志时间临界点(不建议)优化
linux中,mysql配置文件通常默认在 /etc/my.cnf 更改对应参数便可ui
为何设置后看不出变化:
查看慢查询日志:
cat -n /data/mysql/mysql-slow.log
从慢查询日志中,咱们能够看到每一条查询时间高于3s 的sql语句,并能够看到执行的时间是多少。
好比上面,就表示 sql语句 select * from comic where comic_id < 1952000; 执行时间为3.902864秒,超出了咱们设置的慢查询时间临界点3s,因此被记录下来了
查看有多少条慢查询记录: show global status like '%Slow_queries%';
在生产环境中,若是要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具 <u>mysqldumpslow</u>
工做经常使用参考:
获得返回记录集最多的10个SQL: mysqldumpslow -s r -t 10 /var/lib/mysql/mysql-slow.log
获得访问次数最多的10个SQL: mysqldumpslow -s c -t 10 /var/lib/mysql/mysql-slow.log
获得按照时间排序的前10条里面含有左链接的SQL: mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/mysql-slow.log
建议: 为方便 能够结合 | 和 more 使用,不然可能出现爆屏
mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log | more
原文出处:https://www.cnblogs.com/dwlovelife/p/11061778.html