记一次mysql慢查询日志分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次mysql慢查询日志分析相关的知识,希望对你有一定的参考价值。

MySQL慢查询日志分析

分析工具mysqlsla的安装以及使用,mysqlsla是hackmysql.com推出的一款MySQL的日志分析工具,功能非常强大. 数据报表,非常有利于分析慢查询的原因, 包括执行频率, 数据量, 查询消耗等。

在CentOS下安装mysqlsla

yum install perl-DBI perl-DBD-MySQL perl-devel -y #安装依赖包
wget  ftp://ftp.tw.freebsd.org/pub/distfiles/mysqlsla-2.03.tar.gz
#下载
perl Makefile.PL #预编译
make #编译
make install 安装
PS:最好把此工具安装在本地的测试服务器上,然后将你的慢查询日志拷贝至本地进行分析,以免影响生产环境数据库。

技术图片

yum -y  install perl-Time-HiRes  ## 解决方法

参数详解

lt:表示日志类型,有slow, general, binary, msl, udl。
sf:[+-][TYPE],[TYPE]有SELECT, CREATE, DROP, UPDATE, INSERT,例如”+SELECT,INSERT”,不出现的默认是-,即不包括。
db:要处理哪个库的日志。
top:表示取按规则排序的前多少条。
sort:按某种规则排序,t_sum按总时间排序, c_sum按总次数排序。

示例使用

mysqlsla -lt slow mysql-slow.log
或者
mysqlsla -lt slow mysql-slow.log -sf “+SELECT” -db dbName -top 10 -sort t_sum
也可以将结果输入到文件中,在windows下用Sublime Text 3查看。
mysqlsla -lt slow /root/slow_queries_1013.log > /tmp/fx.log

#查询记录最多的20个sql语句,并写到select.log中去

mysqlsla -lt slow --sort t_sum --top 20  /data/mysql/127-slow.log >/tmp/select.log

#统计慢查询文件为/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

分析结果

总查询次数 (queries total), 去重后的sql数量 (unique)
输出报表的内容排序(sorted by)
最重大的慢sql统计信息, 包括 平均执行时间, 等待锁时间, 结果行的总数, 扫描的行总数.
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语句

示例截图

技术图片

索引优化前

技术图片

ALTER TABLE `xkx2_online` DROP INDEX `idx_date`;
ALTER TABLE `xkx2_online` DROP INDEX `idx_server`;
ALTER TABLE `xkx2_online` ADD INDEX `idx_datetime`(`server_id`, `datetime`) USING BTREE;

优化后

技术图片

以上是关于记一次mysql慢查询日志分析的主要内容,如果未能解决你的问题,请参考以下文章

记一次mysql查询慢的优化历程

一次MySQL线上慢查询分析及索引使用

一次MySQL线上慢查询分析及索引使用

记一次order by desc limit导致的查询慢

记一次神奇的MySQL查询经历,group by慢查询优化

2022年记一次慢查询优化指南,MySQL 优化学习第9天