这个是由参数long_query_time控制,默认情况下long_query_time的值为10秒,命令:SHOW VARIABLES LIKE 'long_query_time%'; 可以使用命令修改,也可以在my.cnf参数里面修改。 假如运行时间正好等于long_query_time的情况,并不会被记录下来。也就是说,在mysql源码里是判断大于long_query_time,而非大于等于。
查看当前多少秒算慢:SHOW VARIABLES LIKE 'long_query_time%';
设置慢的阙值时间:
使用命令 set global long_query_time=3修改为阙值到3秒钟的就是慢sql ,修改后使用命令SHOW VARIABLES LIKE 'long_query_time%';发现long_query_time并没有改变。为什么设置后看不出变化? 使用命令 set global long_query_time=3修改后,需要重新连接或新开一个会话才能看到修改值。 之后通过SHOW GLOBAL VARIABLES LIKE 'long_query_time%';查看通过set session long_query_time=1来改变当前session变量;记录慢SQL并后续分析
查询当前系统中有多少条慢查询记录 show global status like '%Slow_queries%';
【mysqld】下配置: slow_query_log=1; slow_query_log_file=/var/lib/mysql/atguigu-slow.log long_query_time=3; log_output=FILE
mysqldumpslow是什么:在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow。
查看mysqldumpslow的帮助信息:命令是mysqldumpslow --help s: 是表示按照何种方式排序; c: 访问次数 l: 锁定时间 r: 返回记录 t: 查询行数 al:平均锁定时间 ar:平均返回记录数 at:平均查询时间 t:即为返回前面多少条的数据; g:后边搭配一个正则匹配模式,大小写不敏感的; 工作常用参考工作参考 得到返回记录集最多的10个SQL mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log得到访问次数最多的10个SQL mysqldumpslow -s c -t 10 /var/lib/mysql/atguigu-slow.log得到按照时间排序的前10条里面含有左连接的查询语句 mysqldumpslow -s t -t 10 -g “left join” /var/lib/mysql/atguigu-slow.log另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现爆屏情况 mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log | more