慢查询日志
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL。
long_query_time
的默认值为10,意思是运行10秒以上的语句。
使用
默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的,
可以通过设置slow_query_log的值来开启
SHOW VARIABLES LIKE '%slow_query_log%';
使用set global slow_query_log=1;
开启了慢查询日志只对当前数据库生效,
如果MySQL重启后则会失效。
全局变量设置,对当前连接不影响
对当前连接立刻生效
如果要永久生效,就必须修改配置文件my.cnf(其它系统变量也是如此)
slow_query_log =1
slow_query_log_file=/var/lib/mysql/atguigu-slow.log
关于慢查询的参数slow_query_log_file ,它指定慢查询日志文件的存放路径,如果没有指定参数slow_query_log_file的话,系统默认会给一个缺省的文件host_name-slow.log
问题
那么开启了慢查询日志后,什么样的SQL才会记录到慢查询日志里面呢?
如果运行时间正好等于long_query_time,不会被记录下来。也就是说,在mysql源码里是判断大于long_query_time,而非大于等于。
案例
# 查看当前多少秒算慢
SHOW VARIABLES LIKE 'long_query_time%';
# 设置慢的阈值时间
set long_query_time=1
# 查询当前系统中有多少条慢查询记录
show global status like '%Slow_queries%';
记录慢SQL并后续分析
实验一条慢sql
跟踪日志信息
配置版
my.cnf
【mysqld】下配置:
slow_query_log=1
slow_query_log_file=/var/lib/mysql/atguigu-slow.log
long_query_time=3
log_output=FILE
日志分析工具mysqldumpslow
MySQL提供了日志分析工具mysqldumpslow
mysqldumpslow --help
SHOW PROCESSLIST
查询所有用户的进程