说明:
操作系统:CentOS 5.X 64位
MySQL版本:mysql-5.5.35
MySQL配置文件:/etc/my.cnf
MySQL 数据库存放目录:/data/mysql
实现目的:开启MySQL慢查询日志功能,安装使用MySQL慢查询分析mysqlsla
具体操作:
一、开启MySQL慢查询功能
mysql -u root -p #进入MySQL控制台
show variables like '%slow%'; #查看MySQL慢查询是否开启
set global slow_query_log=ON; #开启MySQL慢查询功能
show variables like "long_query_time"; #查看MySQL慢查询时间设置,默认10秒
set global long_query_time=5; #修改为记录5秒内的查询
select sleep(6); #测试MySQL慢查询
show variables like "%slow%"; #查看MySQL慢查询日志路径
show global status like '%slow%'; #查看MySQL慢查询状态
exit; #退出MySQL控制台
cat /data/mysql/127-slow.log #查看MySQL慢查询日志是否被记录
备注:还可以通过修改MySQL配置文件参数,开启MySQL慢查询。
vi /etc/my.cnf #编辑,在[mysqld]段添加以下代码
方法一:
1 | slow-query-log = on #开启MySQL慢查询功能(如果on无效的话,把on改为1即可) |
方法二:
1 | long_query_time = 1 |
log-long-format(可选) 这里需要注意这个参数,不要被网上一些关于mysql慢查询的相关文章所迷惑——他们对此参数的解释是(如果设置了,所有没有使用索引的查询也将被记录),我看了就奇怪了,这不和参数log-queries-not-using-indexes的功能是一样的么,于是百度之,可笑的是,即然有很多文章都是类似描述,实际上与这个参数对应的是另一个参数:log-short-format。
简单的说log-long-format选项是用来设置日志的格式,它是以扩展方式记录有关事件。扩展方式可记录谁发出查询和什么时候发出查询的信息。可使我们更好地掌握客户端的操作情况。
准确的说,它是记录激活的更新日志、二进制更新日志、和慢查询日志的大量信息。例如,所有查询的用户名和时间戳将记录下来。不赞成选用该选项,因为它现在代表 默认记录行为。
log-short-format(可选) 记录激活的更新日志、二进制更新日志、和慢查询日志的少量信息。例如,用户名和时间戳不记录下来。
:wq! #保存退出
service mysqld restart #重启MySQL服务
二、安装使用MySQL慢查询分析工具mysqlsla
1、安装mysqlsla
yum install wget perl perl-DBI perl-DBD-MySQL mysql #执行此命令安装依赖包
cd /usr/local/src #进入软件包存放目录
wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz #下载mysqlsla
tar zxvf mysqlsla-2.03.tar.gz #解压
cd mysqlsla-2.03 #进入安装目录
perl Makefile.PL #配置
如果报错:Can’t locate ExtUtils/MakeMaker.pm
解决:yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
make #编译
make install #安装
2、使用mysqlsla分析MySQL慢查询日志
查询记录最多的20个sql语句,并写到select.log中去
mysqlsla -lt slow --sort t_sum --top 20 /data/mysql/127-slow.log >/tmp/select.log
如果报错:Can’t locate Time/HiRes.pm in @INC
解决:yum -y install perl-Time-HiRes
统计慢查询文件为/data/mysql/127-slow.log
的所有select的慢查询sql,并显示执行时间最长的100条sql,并写到sql_select.log中去
mysqlsla -lt slow -sf "+select" -top 100 /data/mysql/127-slow.log >/tmp/sql_select.log
统计慢查询文件为/data/mysql/127-slow.log
的数据库为mydata的所有select和update的慢查询sql,并查询次数最多的100条sql,并写到sql_num.sql中去
mysqlsla -lt slow -sf "+select,update" -top 100 -sort c_sum -db mydata /data/mysql/127-slow.log >/tmp/sql_num.log
至此,Linux下MySQL慢查询分析mysqlsla安装使用教程完成。
» 本文链接:http://www.osyunwei.com/archives/7659.html
参数意义
lt:表示日志类型,有slow,general,binary,msl,udl。
sf:[+-][TYPE],[TYPE]有SELECT,CREATE,DROP,UPDATE,INSERT,例如”+SELECT,INSERT”,不出现的默认是-,即不包括。
db:要处理哪个库的日志。
top:表示取按规则排序的前多少条。
sort:按某种规则排序,t_sum按总时间排序,c_sum按总次数排序。
结果解释
Count:sql的执行次数及占总的slow log数量的百分比。
Time:执行时间,包括总时间,平均时间,最小,最大时间,时间占到总慢sql时间的百分比。
95% of Time:去除最快和最慢的sql,覆盖率占95%的sql的执行时间。
Lock Time:等待锁的时间。
95% of Lock:95%的慢sql等待锁时间。
Rows sent:结果行统计数量,包括平均,最小,最大数量。
Rows examined:扫描的行数量。
Database:属于哪个数据库
Users:哪个用户,IP,占到所有用户执行的sql百分比
Query abstract:抽象后的sql语句
Query sample:sql语句
测试:
1 | [root@mwtec-80 bin]# ./mysqlsla -lt slow /tmp/slow_query.log215 -sf "+select" -top 2 -sort c_sum |