慢日志(slow-log)
作用
记录运行较慢的语句,优化过程中常用的工具日志.
查看慢日志状态
show variables like '%slow_query_log%';
开关
slow_query_log=1
## 文件位置及名字
slow_query_log_file=/data/slow.log
## 设定慢查询时间
long_query_time=0.1
## 没走索引的语句也记录
log_queries_not_using_indexes
vim /etc/my.cnf
slow_query_log=1
slow_query_log_file=/data/slow.log
long_query_time=0.1
log_queries_not_using_indexes
3.3 模拟慢查询
create database test;
use test;
source /root/t100w.sql -这里可以导入一个数据库数据多的测试
select * from t100w limit 100;
select * from t100w where id=1568;
select * from t100w where num=1100;
select * from t100w where num=102000 order by k1;
select * from t100w where k2='MN88';
3.4 分析慢日志
mysqldumpslow -s c -t 10 /data/slow.log
# 3.5 第三方工具(自己扩展)
下载地址:https://www.percona.com/downloads/percona-toolkit/LATEST/
yum -y install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-Digest-MD5 perl-TermReadKey
没有软件可以私博主
toolkit工具包中的命令:
pt-query-digest /data/slow.log
第一部分:总体统计结果
Overall:总共有多少条查询
Time range:查询执行的时间范围
unique:唯一查询数量,即对查询条件进行参数化以后,总共有多少个不同的查询
total:总计 min:最小 max:最大 avg:平均
95%:把所有值从小到大排列,位置位于95%的那个数,这个数一般最具有参考价值
median:中位数,把所有值从小到大排列,位置位于中间那个数
第二部分:查询分组统计结果
Rank:所有语句的排名,默认按查询时间降序排列,通过--order-by指定
Query ID:语句的ID,(去掉多余空格和文本字符,计算hash值)
Response:总的响应时间
time:该查询在本次分析中总的时间占比
calls:执行次数,即本次分析总共有多少条这种类型的查询语句
R/Call:平均每次执行的响应时间
V/M:响应时间Variance-to-mean的比率
Item:查询对象
第三部分:每一种查询的详细统计结果
由下面查询的详细统计结果,最上面的表格列出了执行次数、最大、最小、平均、95%等各项目的统计。
ID:查询的ID号,和上图的Query ID对应
Databases:数据库名
Users:各个用户执行的次数(占比)
Query_time distribution :查询时间分布, 长短体现区间占比,本例中1s-10s之间查询数量是10s以上的两倍。
Tables:查询中涉及到的表
Explain:SQL语句
常见用法:
分析半个小时内慢查询:
pt-query-digest --since 1800s slow.log
分析一段时间范围内的慢查询:
pt-query-digest --since '2023-03-16 15:03:00' --until '2023-03-16 15:06:00' slow.log
显示所有分析的查询命令如下。
pt-query-digest --limit 100% slow.log
其中,“--limit”参数默认是“95%:20”,表示显示95%的最差的查询,或者20个最差的查询。
此外,也可以用这个工具来分析二进志日志,以查看我们日常的修改语句是如何分布的,首先需要把二进志日志转换为文
本格式。
mysqlbinlog mysql-bin.000005 > /tmp/mysql_bin_000005.log
pt-query-digest --type binlog /tmp/mysql_bin_000005.log
-------------------
Anemometer基于pt-query-digest将MySQL慢查询可视化