快捷搜索:  汽车  科技

mysql慢查询的优化思路(详解慢查询日志的相关设置及mysqldumpslow工具)

mysql慢查询的优化思路(详解慢查询日志的相关设置及mysqldumpslow工具)1、得到返回记录最多的20个sql-s 按照那种方式排序 c:访问计数 l:锁定时间 r:返回记录 al:平均锁定时间 ar:平均访问记录数 at:平均查询时间 -t 是top n的意思,返回多少条数据。 -g 可以跟上正则匹配模式,大小写不敏感。 实例:#设置慢查询阀值,单位为秒 long_query_time=30 slow_query_log=1 #开启mysql慢sql的日志 log_output=table File #日志输出会写表,也会写日志文件,为了便于程序去统计,所以最好写表 slow_query_log_file=/data/log/slow.log 3、不重启设置慢查询:set global log_output='TABLE'; -- 输出到表 set global general_log = on; -- 打开所有命令执行记录功能general_log

概述

mysql慢查询日志是mysql提供的一种日志记录,它是用来记录在mysql中相应时间超过阈值的语句,就是指运行时间超过long_query_time值的sql,会被记录在慢查询日志中。long_query_time的默认值是10,意思是运行10S之上的语句。

今天主要介绍怎么用mysqldumpslow工具来监控慢查询日志。


一、慢查询日志的相关设置

1、查看是否开启慢查询日志:

show variables like '%slow_query_log%';

mysql慢查询的优化思路(详解慢查询日志的相关设置及mysqldumpslow工具)(1)

2、配置文件设置

#设置慢查询阀值,单位为秒 long_query_time=30 slow_query_log=1 #开启mysql慢sql的日志 log_output=table File #日志输出会写表,也会写日志文件,为了便于程序去统计,所以最好写表 slow_query_log_file=/data/log/slow.log

mysql慢查询的优化思路(详解慢查询日志的相关设置及mysqldumpslow工具)(2)

3、不重启设置慢查询:

set global log_output='TABLE'; -- 输出到表 set global general_log = on; -- 打开所有命令执行记录功能general_log 所有语句: 成功和未成功的. set global slow_query_log = on; -- 打开慢查询sql记录slow_log set global long_query_time=30; -- 慢查询时间限制(秒) set global log_queries_not_using_indexes=ON; -- 记录未使用索引的sql语句 --查询 select * from mysql.slow_log order by 1; -- 执行成功的:慢查询语句 和未使用索引的语句

mysql慢查询的优化思路(详解慢查询日志的相关设置及mysqldumpslow工具)(3)

4、查询有多少条慢查询记录

show global status like '%Slow_queries%';

mysql慢查询的优化思路(详解慢查询日志的相关设置及mysqldumpslow工具)(4)


二、mysqldumpslow 慢日志分析工具

命令:

-s 按照那种方式排序 c:访问计数 l:锁定时间 r:返回记录 al:平均锁定时间 ar:平均访问记录数 at:平均查询时间 -t 是top n的意思,返回多少条数据。 -g 可以跟上正则匹配模式,大小写不敏感。

实例:

1、得到返回记录最多的20个sql

mysqldumpslow -s r -t 20 slow.log

mysql慢查询的优化思路(详解慢查询日志的相关设置及mysqldumpslow工具)(5)

2、得到平均访问次数最多的20条sql

mysqldumpslow -s ar -t 20 slow.log

mysql慢查询的优化思路(详解慢查询日志的相关设置及mysqldumpslow工具)(6)

3、得到平均访问次数最多 并且里面含有mq字符的20条sql

mysqldumpslow -s ar -t 20 -g "mq" slow.log

mysql慢查询的优化思路(详解慢查询日志的相关设置及mysqldumpslow工具)(7)

这里提示Died at /usr/bin/mysqldumpslow line 161 <> chunk 8.的报错是因为有 -t 20这一句,那么就是要显示出前20个记录,但我的slow.log统计出来只有1个不到20个,而这里有继续遍历到20的话,那进程肯定会Died。


后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

mysql慢查询的优化思路(详解慢查询日志的相关设置及mysqldumpslow工具)(8)

猜您喜欢: