您的位置:首页 > 数据库 > MySQL

MySQL慢日志分析工具mysqlsla

2017-09-13 15:01 381 查看
mysql数据库的慢查询日志是非常重要的一项调优辅助日志,但是mysql默认记录的日志格式阅读时不够友好,这是由mysql日志记录规则所决定的,捕获一条就记录一条,虽说记录的信息足够详尽,但如果将浏览慢查询日志做为一项日常工作,直接阅读mysql生成的慢查询日志就有可能比较低效了。
除了操作系统命令直接查看slowlog外,mysql自己也提供了一个阅读slowlog的命令行工具:mysqldumpslow,该命令行提供了一定的分析汇总功能,可以将多个类似的SQL语句抽象显示成一个,不过功能还是有些简陋,除此之外,还有不少的第三方工具,可用于分析mysql慢查询日志,mysqlsla不仅仅可用来处理慢查询日志,也可以用来分析其它日志比如二进制日志,普通查询日志等等,其对sql语句的抽象功能非常实用
get http://www.cpan.org/modules/by-module/DBI/DBI-1.630.tar.gz
wget http://www.cpan.org/modules/by-module/DBD/DBD-mysql-4.025.tar.gz
tar xf DBI-1.630.tar.gz
cd DBI-1.630
perl Makefile.PL
make &&make install

ls
tar xf DBD-mysql-4.025.tar.gz
cd DBD-mysql-4.025
perl Makefile.PL
echo $?
make &&make install

rpm -qa mysql-devel
yum install mysql-devel -y

tar xf mysqlsla-2.03.tar.gz
cd mysqlsla-2.03
perl Makefile.PL
make &&make install

[root@localhost opt]# tar xf mysqlsla-2.03.tar.gz
[root@localhost opt]# cd mysqlsla-2.03
[root@localhost mysqlsla-2.03]# ls
bin Changes INSTALL lib Makefile.PL MANIFEST META.yml README
[root@localhost mysqlsla-2.03]# perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for mysqlsla

[root@localhost mysqlsla-2.03]# make &&make install
cp lib/mysqlsla.pm blib/lib/mysqlsla.pm
cp bin/mysqlsla blib/script/mysqlsla
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/mysqlsla
Manifying blib/man3/mysqlsla.3pm
Installing /usr/local/share/perl5/mysqlsla.pm
Installing /usr/local/share/man/man3/mysqlsla.3pm
Installing /usr/local/bin/mysqlsla
Appending installation info to /usr/lib64/perl5/perllocal.pod
下面报错:
[root@localhost mysqlsla-2.03]# mysqlsla --help
Can't locate Time/HiRes.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/bin/mysqlsla line 2095.
BEGIN failed--compilation aborted at /usr/local/bin/mysqlsla line 2095.

解决方案:
.pm实际上是Perl的包,只需安装如下软件包即可:
yum install perl-Time-HiRes
验证解决:
[root@localhost mysqlsla-2.03]# mysqlsla --help
man mysqlsla for help or visit http://hackmysql.com/mysqlsla 参数意义

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语句
参考博文: http://blog.csdn.net/ls3648098/article/details/9303237 测试:
[root@localhost ~]# mysqlsla -lt slow /root/test.slow.log -sf "+select" -top 2 -sort c_sum
Report for slow logs: /root/test.slow.log
5 queries total, 1 unique
Sorted by 'c_sum'
Grand Totals: Time 19 s, Lock 0 s, Rows sent 5, Rows Examined 88.00k

______________________________________________________________________ 001 ___
Count : 5 (100.00%)
Time : 19 s total, 3.8 s avg, 3 s to 5 s max (100.00%)
Lock Time (s) : 0 total, 0 avg, 0 to 0 max (0.00%)
Rows sent : 1 avg, 1 to 1 max (100.00%)
Rows examined : 17.60k avg, 17.60k to 17.60k max (100.00%)
Database :
Users :
junsansi@ 192.168.1.27 : 60.00% (3) of query, 60.00% (3) of all users
jss@ 192.168.1.26 : 40.00% (2) of query, 40.00% (2) of all users

Query abstract:
SELECT MIN(doc_his_id) AS doc_his_id FROM t_******** WHERE doc_his_isteammate=N AND doc_his_editor_user_id_encrypt='S';

Query sample:
select min(DOC_HIS_ID) AS DOC_HIS_ID from t_******** where DOC_HIS_ISTEAMMATE=1 and DOC_HIS_EDITOR_USER_ID_ENCRYPT='nfEACAwQEW1MICAN2';
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息