1.什么是慢查询日志
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,会被记录到慢查询日志中,long_query_time的默认值为10,意思是运行10秒以上的语句。默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置相关参数slow_query_log。当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件
2.开启慢查询日志
2.1查看参数
SHOW VARIABLES LIKE '%slow_query_log%'
如果是off,需要手动开启
2.2开启
SET GLOBAL slow_query_log = 1
2.3查看时长阀值
SHOW VARIABLES LIKE '%long_query_time%'
默认是10秒,但是我们不会允许sql这么长的时间,一般需要调小
2.4设置时长阀值
SET GLOBAL long_query_time = 2
这里设置好了,打开新的连接窗口查看,值才会更新
3.查询当前系统中有多少条慢查询记录
show global status like '%Slow_queries%';
4.慢查询日志路径
SHOW VARIABLES LIKE '%slow_query_log_file%'
5.日志分析工具mysqldumpslow
在生产环境中,如果要手工分析慢查询日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow。
5.1语法格式
mysqldumpslow [ OPTS... ] [ LOGS... ] -- 后跟参数以及log文件的绝对地址;
5.2参数
1)s: 是表示按照何种方式排序;
2)c: 访问次数
3)l: 锁定时间
4)r: 返回记录
5)t: 查询行数
6)al:平均锁定时间
7)ar:平均返回记录数
8)at:平均查询时间
9)t:即为返回前面多少条的数据;
10)g:后边搭配一个正则匹配模式,大小写不敏感的;
5.3示例
1)得到返回记录集最多的10个SQL
mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log
2)得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /var/lib/mysql/atguigu-slow.log
3)得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/atguigu-slow.log
4)另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现爆屏情况
mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log | more