二、mysql优化技术-定位慢查询

如果我们在优化过程中能找到那些sql的执行拖慢了速度,就能有针对性的去优化的定的sql语句,做到事半功倍。

先来看几个跟慢查询相关的指令及配置

mysql服务端有几个跟慢查询相关的配置:

slow_query_log:是否记录慢查询日志

long_query_time:执行多长时间的sql语句算慢(不一定是查询),默认10s

log_slow_queries:慢查询日志文件位置(5.6及以上版本mysql使用slow-query-log-file参数)

 

查看慢查询时间
show variables like 'long_query_time';
 默认慢查询时间是10秒,这个时间有点长,需要把它改成1秒,可以通过命令行set方式修改
set long_query_time = 1;
 这种方式在服务器启动后会被覆盖,要想持久生效,需要修改配置文件my.cnf
在[mysqld]标签下配置这三项

 配置完重启服务
显示慢查询次数
show status like 'slow_queries';

 
接下来构建几个大表,用于测试,测试脚本见附件[sql.txt]
执行脚本时最好将脚本中的注释去掉创建函数时可能会报如下错误

在my.cnf中修改变量

 配置完重启
执行完脚本后,emp表中应该有4000000记录。
执行对表emp的查询

 可以看到,慢查询次数在增加。
仅仅知道慢查询次数还不够,需要定位到具体哪条sql执行慢。在log_slow_queries指定的位置,可以看到慢查询的日志,可以使用文本编辑器查看,也可以试用mysql自带的命令行工具mysqldumpslow查看。使用mysqldumpslow需要安装Perl模块,如果服务器还没安装Perl,需要先安装。如果能直接上网,那么可以直接使用yum install perl来安装,如果是在本地虚拟机,可以配置本地yum源,rhel下,将镜像文件加载到虚拟机,然后
cd /mnt/
mkdir cdrom
mount /dev/cdrom /mnt/cdrom/

cd /etc/yum.repos.d/
cp rhel-source.repo rhel-source.repo.bak
vi rhel-source.repo
 修改文件如下

 配置yum源的路径为挂在目录,enabled设置为1,保存退出,使用yum list查看配置是否生效,如果配置生效就可以安装Perl了。安装完,使用perl --version查看perl是否安装成功。
perl安装好后就可以使用mysqldumpslow来查看mysql的慢查询日志。
以下是mysqldumpslow的帮助

 
-s:排序顺序,主要有c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的表示按平均值来排序;
-r:翻转排序顺序;
-t:是top n的意思,即为返回前面多少条的数据;
-g:后边可以写一个正则匹配模式,大小写不敏感的。
查看慢查询日志

 
定位出执行慢的sql语句之后,就能有针对性的去优化了,比如重写sql,添加索引等。

猜你喜欢

转载自ywu.iteye.com/blog/2313530