慢查询日志(慢SQL的抓取)
  • 什么是MySQL慢查询日志?
    慢查询日志是MySQL一种记录日志,用于记录执行时间超过设定的一个规定时间的SQL语句
  • 开启慢查询日志
    MySQL默认没有开启慢查询日志,需要手动设置参数开启
    如果不是调优需要的话,一般不建议开启该参数,因为开启慢日志会或多或少带来一定的性能影响
    慢查询日志支持将日志记录写入文件
  • 查看慢日志是否开启
show variables like '%slow_query_log%';

windows mysql log地址 mysql slow log_java

  • 开启慢日志
1)set global slow_query_log=ON; //ON开启,OFF关闭
2)set global slow_query_log=1; //1表示开启,0表示关闭

这两种方式都可开启慢查询日志,但是只是暂时有效,MySQL重启之后将失效

  • 设置慢查询阙值

什么样的SQL才算慢查询SQL呢,这里就有一个阙值(long_query_time)设置一个规定的时间,默认情况下为10秒,也就是说执行时间超过10秒的SQL语句,将被记录到慢查询日志中
在MySQL的源码里是判断大于long_query_time,而非大于等于,只有大于这个值才会被记录下来

查看当前阙值语句:

show variables like 'long_query_time%';

windows mysql log地址 mysql slow log_慢查询_02


设置语句:

set global long_query_time=3; //这里设置为3秒

但是设置之后立刻用查看语句查看修改后的阙值,是没有变化的,还是默认10秒
这里就要注意:需要重新连接或者新开一个会话才能看到修改值show variables like ‘long_query_time%’;
或者使用加global 的命令查看语句:

show global variables like 'long_query_time%';

windows mysql log地址 mysql slow log_SQL_03

  • 慢查询日志分析
    需要到慢日志记录.log文件中去看抓取出来的的慢SQL的信息
  • 查看当前系统中有多少条慢查询记录(慢SQL语句)
    查看语句:
show global status like '%Slow_queries%';
  • 开启MySQL慢日志(永久有效)
    编辑mysql配置文件my.ini或者my.cnf
[mysqld]
slow_query_log = 1#是否开启慢查询日志,1表示开启,0表示关闭,也可以使用off和on
slow-query-log-file=/var/log/slowquery.log #记录慢日志文件
long_query_time = 5#慢查询时间
log_output=FILE
日志分析工具mysqldumpslow

cmd后键入mysqldumpslow --hlep查看命令行帮助

windows mysql log地址 mysql slow log_慢查询_04


工作中常用参考:

windows mysql log地址 mysql slow log_windows mysql log地址_05

总结
  • 通过修改配置文件my.ini中的slow-query-log、long_query_time来调整慢查询日志的开关和具体阈值
  • 通过mysqldumpshow工具可以格式化慢查询日志,方便定位问题和分析问题