前言
配置过几次mysql的慢查询分析,但都没记住,每次都要上网找配置参数,所以这次干脆记录下来。慢查询就是通过配置,记录查询效率低的sql语句,可以统计使用次数、未用到索引的语句等功能。实现项目中数据层的优化,这里使用mysql官方自带的分析工具mysqldumpslow,常见的还有如下:
慢查询分析工具
配置
- 查看mysql是否开启过慢查询
show variables like '%slow%';
如果slow_query_log
为ON或者为1,则表示开启,反之未开启。在mysql的配置文件my.cnf
(windows下应该是my.ini
)中配置慢查询项。顺便说一下查看mysql配置文件路径,命令如下:
zemochen:choicecollect SuperZemo$ mysqld --verbose --help |grep -A 1 'Default options'
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
如上,就是查询mysql配置文件路基,及输出结果,优先级按位置顺序依次往下。
- 修改配置文件my.cnf,在[mysqld]中增加如下:
slow_query_log=ON #开启慢查询
long_query_time = 1 #慢查询语句时间(时间超过1秒记录)
slow_query_log_file=/data/mysql/slow_query.log#慢查询日志文件路径
log_queries_not_using_indexes = true #是否调用索引
重启mysql即可,再进入mysql中查看配置是否生效,可以使用:
select sleep(1);
然后去查看/data/mysql/slow_query.log
是否有记录刚才的测试语句,确认配置成功。
mysqldumpslow工具分析慢查询日志
mysqldumpslow [options] [log_file ...]
#mysqldumpslow -s r -t 10 /data/mysql/slow_query.log
查询参数说明:
格式(参数) | 描述 |
---|---|
-a | 不抽象为N和S(因为是多条语句合并,所以会把参数和时间抽象成N和S) |
-n N | 指定抽象数字至少为N位 |
-g pattern | 只查询指定匹配的语句 |
-h | 查询指定host的语句 |
-i | 服务器示例名 |
-l | 不在总时间中减去锁表时间 |
-r | 反向排序 |
-s | 排序: t,at: 查询时间或平均时间 l,al:锁定时间或平均锁定时间 r,ar:返回记录时间或平均返回时间 c: 使用次数 |
-t N | 查询前N条记录 |
–debug,-d | debug模式启动 |
–help,-h | 帮助 |
–verbose,-v | 更多信息 |
查询结果参数说明:
参数 | 描述 |
---|---|
Count | 出现次数 |
Time | 执行最长时间; |
Lock | 等待锁的时间 |
Rows | 发送给客户端的行总数 |
有些数据后面跟了一个()
则表示累计总数
参考文献
http://dev.mysql.com/doc/en/option-files.html
http://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html
http://dev.mysql.com/doc/refman/5.7/en/mysqldumpslow.html#option_mysqldumpslow_abstract
关于我
- @Author:Zemo
- @Email:zemochen#gmail.com
- J2EE 两年多研发经验,日常公司打杂,处于迷茫期
- 欢迎转载,让更多的人学到东西