一、慢查询日志是什么
慢查询日志是MySQL提供的一种日志文件,可以记录执行时间大于所设置值的sql语句(不记录ddl语句),用于用户分析。不过它默认是关闭的,需要用户自己设置启用。
二、使用方法
1、查看是否已启用
mysql> show variables like 'slow_query%';
+---------------------------+----------------------------------+
| Variable_name | Value |
+---------------------------+----------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /mysql/data/localhost-slow.log |
+---------------------------+----------------------------------+
OFF表示功能未启用。
2、设置开启
mysql> set global slow_query_log='ON';
3、设置日志保存路径
mysql> set global slow_query_log_file='/mysql/data/slow.log';
4、设置记录范围
mysql> set global long_query_time=1;
单位是秒,表示只要执行时间大于(不包括等于)该值的sql查询都会记录下来。MySQL5.1版本后,支持的时间粒度精确到了微妙,例如可以设置为0.000001。
一种设置技巧是:可以通过设置long_query_time为0来捕获所有的查询。因为有时候对所有的语句进行分析是有必要的。
另外也可以通过在配置文件my.cnf中添加参数的方式进行设置:
slow_query_log = ON
slow_query_log_file = /mysql/data/slow.log
long_query_time = 1
设置完成后需要重启MySQL服务。
三、如何分析日志文件
直接打开整个慢查询日志是不明智的。
1、第一种分析方法是利用MySQL自身提供的mysqldumpslow命令。
注意事项:如果直接在Windows系统下执行mysqldumpslow命令是不可行的,还需要安装perl环境,mysqldumpslow.pl脚本位于MySQL安装目录bin目录中
如果希望得到执行时间最长的10条sql语句,可以运行如下命令:
mysqldumpslow -s al -n 10 slow.log
2、第二种分析方法是使用pt-query-digest工具
这也是推荐的方法,该工具的分析结果更具体、更完善。
三、注意事项
- 在mysql当前版本中,慢查询日志是开销最低,精度最高的测量查询时间的工具;
- 慢查询日志带来的I/O开销可以忽略不计;
- 需要注意的是,日志可能消耗大量的磁盘空间;
- MySQL支持将慢查询日志记录到表中,但这样做没什么意义,因为这会导致时间粒度退化到秒级,并且对性能有较大影响。