一文了解Mysql的慢日志,以及使用慢日志分析工具
当应用程序响应慢时,你是不是首先想到数据的问题,慢怎么排查是否有慢sql呢,如果这个都不会是不是太渣了。
Mysql的慢日志是mysql提供的一种日志记录,它用来记录在mysql中响应时间超过阈值的语句,具体指运行时间超过配置文件中long_query_time值的sql,则会被记录到慢查询日志中。
如果需要使用慢日志查询记录首先需要开启慢日志查询。
使用命令查看是否开启慢日志查询
show variables like '%slow_query_log%'
这里两个属性分别表示
slow_query_log:是否开启慢日志查询,ON:开启 OFF:关闭
slow_query_log_file:慢日志记录文件所在的目录
我这里是已经开启了,如果没开启的可以修改配置文件my.cnf,一般是在目录etc/my.cnf或者/etc/mysql/my.cnf,在配置文件的[mysqld]中配置如下内容。
slow_query_log=1
slow-query-log-file=/www/server/data/mysql-slow.log
如果只是临时开启可以使用命令开启,只对当前会话有效。
Set global slow_query_log = 1
慢日志功能默认情况是关闭的,只当需要调优的时候才开启,因为开启或多或少会影响性能。刚说到当mysql查询响应时间超过配置的阈值时,才会记录到慢sql中,那这个阈值怎么查看,可以直接使用命令查看
long_query_time:表示响应时间操作3秒的将会被记录
这个值也可以在配置文件my.cnf中配置,下面我们就模拟一条慢sql,mysql中有一个睡眠函数sleep,那就执行一条睡眠4秒的语句。
接着我们去慢日志文件中看看有没有被记录。
我们看到确实记录了,也是使用命令查看记录了多少条慢日志,
show global status like '%Slow_queries%';
有同学会问,如果是在生产环境中可能会有几十条甚至上百条慢日志记录,这么多有没有什么工具可以分析它呢,答案肯定是有的。
Mysql自带的慢日志分析工具mysqldumpslow,可以按慢sql的访问次数、锁定时间、返回记录、查询时间等对慢日志记录进行筛选,默认mysqldumpslow是在mysql的bin目录下。
那怎么使用呢,例如我们需要返回记录集最多的十个慢sql
/www/server/mysql/bin/mysqldumpslow -s r -t 10 /www/server/data/mysql-slow.log
显示了刚刚我们所记录的那条慢日志,在比如返回访问次数最多的5个慢sql
/www/server/mysql/bin/mysqldumpslow -s -c -t 5 /www/server/data/mysql-slow.log
得到了慢日志,我们就可以通过日志优化工具explain和showprofile 进行性能优化。