mysql 慢查询日志分析与使用
查询是否开启: SHOW VARIABLES LIKE ‘%slow_query_log%‘;
开启:SET GLOBAL slow_query_log=1; mysql重启后会失效,如果需要永久生效(生产环境不建议一直开启,会损耗性能。)可以修改my.cnf文件加入如下配置,然后重启mysql。
slow_query_log=1
slow_query_log_file=/usr/local/mysql/slog-sql.log
那么开启了慢查询后,什么样的sql才会被记录到慢查询日志里面呢?
这个是由参数long_query_time控制,默认情况下,long_query_time 的值为10秒。
设置慢查询时间命令:SHOW VARIABLES LIKE ‘%long_query_time%‘;
可以使用命令修改,也可以在my.cnf配置文件中修改,假如运行时间正好等于long_query_time 并不会被记录下来,在mysql的源码中是判断大于long_query_time的sql才会被记录下来。
设置慢sql 的阈值时间:SET GLOBAL long_query_time=3;
查询当前系统有多少慢sql: SHOW GLOBAL STATUS LIKE ‘%Slow_queries%‘;
Mysql: 提供的日志分析工具:mysqldumpslow:
常用日志分析命令:
1: 得到返回记录集最多的10个sql:
mysqldumpslow -s r -t 10 /usr/local/mysql/slow-sql.log
2: 得到访问次数最多的10个慢sql:
Mysqldumpslow -s c -t 10 /usr/local/mysql/slow-sql.log
3:mysqldumpslow -s t -t 10 -g “left join” /usr/local/mysql/slow-sql.log
另外建议防止数量过多建议搭配 | more 使用:
mysqldumpslow -s t -t 10 -g “left join” /usr/local/mysql/slow-sql.log | more