本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • MySQL
  • 【MySQL配置教程】MySQL慢查询日志配置与explain语句

【MySQL配置教程】MySQL慢查询日志配置与explain语句

发布:TangLu2018-10-18 14:42分类: MySQL 标签: mysql mysql慢查询

慢查询日志用于记录一些过慢的查询语句,可以帮助管理员分析问题所在,对SQL进行优化。在慢查询日志中需要关注的是那些查询次数多并且执行时间长的SQL、IO大的SQL、未命中索引的SQL

一、查询与开启慢查询日志

通过MySQL命令可以看到慢查询日志默认是没有开启的

show variables like '%slow%';


编辑my.cnf文件,在[mysqld]模块下增加以下内容以开启慢查询日志:

[mysqld]
slow_query_log = on #开启慢查询日志 
slow_query_log_file = /data/mysql/logs/mysql-slow.log #指定日志文件保存路径,不指定的话默认在数据库文件目录下,名为hostname-slow.log 
long_query_time = 2 #指定达到多少秒才算慢查询 
#long-queries-not-using-indexes #记录没有使用索引的查询语句 
#min_examined_row_limit = 1000 #记录查找了多达1000次而引起的慢查询 
#log-slow-admin-statements #记录ALTER TABLE等语句引发的慢查询 
#log-slow-slave-statements #记录从服务器产生的慢查询


重启MySQL服务使配置生效

service mysqld restart 


登陆数据库查询下环境

show variables like '%slow%'; 


执行一个慢查询语句

select sleep(3); 


查看慢查询日志已经生成,箭头处显示了执行用户、执行时间以及查询语句

QQ图片20150807150352.png

 

二、分析慢查询日志

在有大量慢查询内容的日志文件中直接查看文本会很麻烦,这里建议使用一些慢查询分析工具:

1、官方自带的mysqldumpslow,使用示例:

mysqldumpslow -t 10 mysql-slow.log  #显示top10的慢查询语句



QQ截图20150807151604.png

 

2、第三方工具percona-toolkit软件包中提供的pt-query-digest,分析结果会非常详细。

pt-quert-digest mysql-slow.log > slow_log.report  #将分析结果输出到文件

结合文章开始提到的几个关注点,在pt-query-digest中都有展示:

查询次数多且执行时间长的SQLpt-query-digest分析结果中的前几个值

IO大的SQL:注意pt-query-digest中的Rows examine项

未命中索引的SQL:注意pt-query-digest中的Row examine(扫描行数)和Rows send(实际发送行数)的对比,如果扫描行数大于了发送行数说明命中次数不高


三、根据慢查询日志如何做优化

使用MySQL自带的explain语句可以显示出SQL的执行计划,通过执行结果可以看出SQL是通过索引查询还是遍历整个表等信息,该语句不会真正执行后面的SQL,所以不会占用资源,非常方便,下面是使用示例

mysql > EXPLAIN SELECT id,name FROM table;


explain1.png

explain返回结果说明:

table:这一条SQL是对哪张表在做操作

type:重要列,显示连接使用了何种类型,性能从高到底分为const(基于主键或者唯一索引的查找)、eq_reg(范围查找)、ref(基于索引查找)、range(基于索引的范围查找)、index(基于索引扫描)、all(全表扫描)

possible_keys:显示可能应用在这张表中的索引,如果为空代表没有索引。

key:实际用到的索引

key_len:索引长度,越短越好

ref:显示索引哪一列被使用了

rows:表扫描的行数

extra:扩展列,如果出现以下两种情况代表需要优化SQL语句:Using filesort,这是说MySQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行; Using temporary,这是说MySQL用到了临时表来存储结果,这通常发生在对不通的列集进行ORDER BY上,而不是GROUP BY上。

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《【MySQL配置教程】MySQL慢查询日志配置与explain语句
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-232.html  [生成短网址]

已有 0/1750 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~