Linux下MySQL慢查询分析mysqlsla安装使用

目录
  1. 1. 一、开启MySQL慢查询功能
  2. 2. 二、安装使用MySQL慢查询分析工具mysqlsla

说明:

操作系统: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
2
3
4
5
6
7
slow-query-log = on  #开启MySQL慢查询功能(如果on无效的话,把on改为1即可)

slow_query_log_file = /data/mysql/127-slow.log #设置MySQL慢查询日志路径

long_query_time = 5 #修改为记录5秒内的查询,默认不设置此参数为记录10秒内的查询

log-queries-not-using-indexes = on #记录未使用索引的查询(如果on无效的话,去掉on即可)

方法二:

1
2
3
4
5
long_query_time = 1 

log-slow-queries = /var/youpath/slow.log

log-queries-not-using-indexes

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[root@mwtec-80 bin]# ./mysqlsla -lt slow /tmp/slow_query.log215 -sf "+select" -top 2 -sort c_sum
Report for slow logs: /tmp/slow_query.log215
13 queries total, 7 unique
Sorted by 'c_sum'
Grand Totals: Time 219 s, Lock 0 s, Rows sent 10.63k, Rows Examined 59.31M


______________________________________________________________________ 001 ___
Count : 3 (23.08%)
Time : 3.730898 s total, 1.243633 s avg, 1.243623 s to 1.243651 s max (1.70%)
Lock Time (s) : 0 total, 0 avg, 0 to 0 max (0.00%)
Rows sent : 1 avg, 1 to 1 max (0.03%)
Rows examined : 0 avg, 0 to 0 max (0.00%)
Database :
Users :
diandong@ 10.31.247.159 : 66.67% (2) of query, 46.15% (6) of all users
diandong@ 10.31.247.212 : 33.33% (1) of query, 7.69% (1) of all users

Query abstract:
SELECT @@session.tx_isolation;

Query sample:
SELECT @@session.tx_isolation;

______________________________________________________________________ 002 ___
Count : 3 (23.08%)
Time : 27.367664 s total, 9.122555 s avg, 9.121485 s to 9.124615 s max (12.48%)
Lock Time (s) : 0 total, 0 avg, 0 to 0 max (0.00%)
Rows sent : 1 avg, 1 to 1 max (0.03%)
Rows examined : 0 avg, 0 to 0 max (0.00%)
Database : diandong
Users :
diandong@ 10.31.247.159 : 100.00% (3) of query, 46.15% (6) of all users

Query abstract:
SELECT N;

Query sample:
select 1;