mysql 慢查询日志

时间:14-06-15 栏目:性能测试技术 作者:乐测网 评论:0 点击: 636 次

慢查询定义及作用

慢查询日志,顾名思义,就是查询慢的日志,是指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句的日志。该日志能为SQL语句的优化带来很好的帮助。默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能。

开启慢查询日志

在mysql的配置文件中的mysqld下方添加以下参数

有关慢查询日志功能的相关参数说明:

log-slow-queries

指定日志文件存放位置,该目录文件一定要有写的权限。可以不用设置,系统会给一个缺省的文件host_name-slow.log

long_query_time

SQL执行时间阈值,默认为10秒。

注意以下三点:

1、设置long_query_time这个阈值后,mysql数据库会记录运行时间超过该值的所有SQL语句,但对于运行时间正好等于long_query_time的情况,并不会被记录下来。也就是说,在mysql源码里是判断大于long_query_time,而非大于等于。

2、从mysql 5.1开始,long_query_time开始以微秒记录SQL语句运行时间,之前仅用秒为单位记录。这样可以更精确地记录SQL的运行时间,供DBA分析。

3、建议该时间不应太小或太大,最好在5-10秒之间。当然可以根据自己情况决定。

log-queries-not-using-indexes

如果运行的SQL语句没有使用索引,则mysql数据库同样会将这条SQL语句记录到慢查询日志文件中。

log-long-format

这里需要注意这个参数,不要被网上一些关于mysql慢查询的相关文章所迷惑——他们对此参数的解释是(如果设置了,所有没有使用索引的查询也将被记录),我看了就奇怪了,这不和参数log-queries-not-using-indexes的功能是一样的么,于是百度之,可笑的是,即然有很多文章都是类似描述,这些只知道copy的站长或那些只顾转载的朋友,你要我怎么说你们呢。。。。

与这个参数对应的是另一个参数:log-short-format

简单的说log-long-format选项是用来设置日志的格式,它是以扩展方式记录有关事件。扩展方式可记录谁发出查询和什么时候发出查询的信息。可使我们更好地掌握客户端的操作情况。

准确的说,它是记录激活的更新日志、二进制更新日志、和慢查询日志的大量信息。例如,所有查询的用户名和时间戳将记录下来。不赞成选用该选项,因为它现在代表 默认记录行为。

log-short-format

记录激活的更新日志、二进制更新日志、和慢查询日志的少量信息。例如,用户名和时间戳不记录下来。

log-slow-admin-statements

将慢管理语句例如OPTIMIZE TABLE、ANALYZE TABLE和ALTER TABLE记入慢查询日志。

慢查询日志分析

我们可以通过慢查询日志来找出有问题的SQL语句,对其进行优化。随着mysql数据库服务器运行时间的增加,可能会有越来越多的SQL查询被记录到了慢查询日志文件中,这时要分析该文章就显得不是很容易了。mysql提供的mysqldumpslow命令,可以很好地解决这个问题。

使用方法如下:

命令行下,进入 mysql/bin 目录,输入 mysqldumpslow ?help 或 --help 可以看到这个工具的参数

mysqldumpslow -s c -t 20 host-slow.log

mysqldumpslow -s r -t 20 host-slow.log

上述命令可以看出访问次数最多的 20 个 sql 语句和返回记录集最多的 20 个 sql

mysqldumpslow -t 10 -s t -g "left join" host-slow.log

这个是按照时间返回前 10 条里面含有左连接的 sql 语句。

mysqldumpslow -s c -t 10 /database/mysql/slow-log

这会输出记录次数最多的10条SQL语句,其中:

-s order,是表示按照何种方式排序,order值有:c、t、l、r 分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒序;
-t num,即为返回前面多少条的数据;
-g pattern,pattern可以写一个正则匹配模式,大小写不敏感的;

使用mysqldumpslow命令可以非常明确的得到各种我们需要的查询语句,对MySQL查询语句的监控、分析、优化是MySQL优化的第一步,也是非常重要的一步。

相关命令

查看慢查询的记录数

mysql> show global status like '%slow%';

查看long_query_time值

 mysql> show variables like '%long%';

查看是否开启慢查询

 mysql> show variables like 'log_slow_queries';

查看log_queries_not_using_indexes状态

mysql> show variables like 'log_queries_not_using_indexes';

 

相关文献

1、mysql 开启慢查询日志

2、MySQL详解--日志类型

3、mysql优化基础

4、MYSQL教程:状态文件和日志文件

5、常用的 mysql slowquery 日志分析工具

6、MySQL 5.1参考手册-数据库管理

声明: 本文由( 乐测网 )原创编译,转载请保留链接: mysql 慢查询日志

mysql 慢查询日志:等您坐沙发呢!

发表评论(需填写下方的验证回答,无用户名的评论将视为匿名发表,您也可以登陆或注册后再发表评论)

您必须 [ 登录 ] 才能发表留言!

@关注乐测网

-----==== 本站公告 ====-----
1.本站是目前唯一能支持智能手机平板电脑访问的软件测试技术网站.
2.具体访问方法请参考本站的手机访问说明,或直接点击以下链接:

→点击这里打开手机平板访问说明←

    智能手机平板电脑访问方法

1.用手机浏览器输入本站网址http://www.test666.com就可直接访问
2.微信、QQ、微博或手机浏览器的二维码扫描功能扫描以下二维码图

标签云球