慢查询日志(慢SQL的抓取)
- 什么是MySQL慢查询日志?
慢查询日志是MySQL一种记录日志,用于记录执行时间超过设定的一个规定时间的SQL语句 - 开启慢查询日志
MySQL默认没有开启慢查询日志,需要手动设置参数开启
如果不是调优需要的话,一般不建议开启该参数,因为开启慢日志会或多或少带来一定的性能影响
慢查询日志支持将日志记录写入文件 - 查看慢日志是否开启
show variables like '%slow_query_log%';
- 开启慢日志
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%';
设置语句:
set global long_query_time=3; //这里设置为3秒
但是设置之后立刻用查看语句查看修改后的阙值,是没有变化的,还是默认10秒
这里就要注意:需要重新连接或者新开一个会话才能看到修改值show variables like ‘long_query_time%’;
或者使用加global 的命令查看语句:
show global variables like 'long_query_time%';
- 慢查询日志分析
需要到慢日志记录.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查看命令行帮助
工作中常用参考:
总结
- 通过修改配置文件my.ini中的slow-query-log、long_query_time来调整慢查询日志的开关和具体阈值
- 通过mysqldumpshow工具可以格式化慢查询日志,方便定位问题和分析问题