1、什么是慢查询
慢查询,顾名思义为执行比较慢的SQL查询。默认情况下,MySQL是关闭慢查询日志的,因为开启慢查询日志一定程度上会影响数据库性能。
MySQL提供了慢查询日志记录功能,用于记录执行时间超过参数long_query_time阈值的SQL执行日志,同时可以自定义配置、关闭、开启慢查询日志,用以帮助MySQL使用者更好的分析慢查询SQL,便于开展SQL性能优化工作。
2、如何开启慢查询日志
-
查看是否开启日志
show variables like '%slow_query_log%';
-
开启/关闭日志
set global slow_query_log=1; //开启 set global slow_query_log=0; //关闭
-
开启效果
MySQL开启慢查询日志之后,会自动记录执行时间超过参数long_query_time的SQL日志,参数long_query_time默认数值为10s。
show variables like 'long_query_time%'; show global variables like 'long_query_time%';// 实时查看修改之后的参数值,不需要重新创建会话。
3、如何配置慢查询日志
-
修改慢查询阈值
set global long_query_time=5
-
如何查找慢查询日志
show global variables like 'slow_query_log_file%';
-
如何统计慢查询记录数量
show global status like '%Slow_queries%';
4、如何永久配置慢查询日志
实际上,上文对慢查询日志的配置都是基于命令set操作,这些配置在MySQL重启之后都会失效。MySQL对这些参数的设置都是有相应的配置文件进行管理,
- Linux,默认在/etc/my.cnf。
- Windows,默认在my.ini。
打开配置文件,包含慢查询相关参数,可以自定义修改:
因此,可以通过修改MySQL配置文件来永久配置慢查询日志。
但是不建议这样做,因为开启慢查询日志会造成MySQL性能受到一定影响,一般情况只是在SQL调优阶段开启慢查询日志。
5、日志分析工具
MySQL提供了日志分析工具mysqldumpslow,帮助使用者自动化分析慢查询日志,将分析结果按照参数所指定的顺序输出。
常见参数:
- r:返回记录
- t: 查询时间
- c: 访问次数
- -t:即为返回前面多少条的数据
- -s: 是表示按照何种方式排序
- -g:后边搭配一个正则匹配模式,大小写不敏感的
通常,命令可以结合 | 和 less、more 等其他命令使用,便于参看。
常见使用:
- 获取访问次数最多的前10个SQL: mysqldumpslow -s c -t 10 /var/lib/mysql/mysql-slow.log | less
- 获取返回记录集最多前10个SQL: mysqldumpslow -s r -t 10 /var/lib/mysql/mysql-slow.log | less
- 获取按照时间排序的前10条含有左连接的SQL: mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/mysql-slow.log | more