使用pt-query-digest工具分析MySQL慢查询日志报告

上周我尝试使用 pt-query-digest 来分析慢 MySQL 查询日志。

我们先来说说如何配置日志参数。

必须启用慢查询日志。
Slow_query_log=ON。
如果不添加这个,就根本没有数据。

阈值应适当调整。
长查询时间=1 默认设置 1 秒可能太长。
敏感系统可调整至 0.1 秒。
但这取决于业务SLA。

日志输出格式必须为FILE。
log_output=文件。
这样就可以直接使用pt-query-digest了。

准确捕获 SQL 问题。
log_queries_not_using_indexes=ON。
应该打开此功能。
否则您将无法看到非索引查询。

min_examined_row_limit=1 00。
在此过滤器下扫描的行数很少。
降噪。

管理日志文件也很重要。
Experience_logs_days=7 只需保留7 天即可。
不要让光盘爆炸。

使用logrotate再次压缩旧日志。
这必须与系统的运行相协调。

然后是pt-query-digest分析指标。

Query_time是最重要的。
查看总时间百分比。
高度重视改进。
即使一次时间很短,但电话却很频繁。

调用取决于执行次数。
还要注意高频次、低消耗。

高Lock_time非常烦人。
验证事务隔离、索引或长事务。

必须比较 Scanned_rows 和 sent_rows。
如果扫描的行数远大于返回的行数。
基本上就是没有索引或者条件不对。

使用太多临时表是不够的。
tmp_disk_tables 必须受到控制。
由此可见,JOIN 和 GROUPBY 使用起来很复杂。

对多个数据源的支持很有用。

一般查询日志一般不使用。
很多信息。
除非是补丁。
SHOWPROCESSLIST可以实时查看。
使用 pt-stalk 捕获数据。
然后将其传递给 pt-query-digest。
tcpdump 可以捕获网络流量。
当您没有 SSH 权限时特别有用。
直接分析协议包。

您可以参考此了解操作流程。

首先进行基本面分析。
pt-query-digest /var/log/mysql/mysql-slow.log > Slow_report.txt
然后进行详细分析。
例如,按日期范围过滤。
--Since '2 02 3 -01 -01 00:00:00' --Until '2 02 3 -01 -02 00:00:00'
或者过滤较小的结果集。
--filter '($event->{Rows_sent} > 1 00)'
用于摘要。
或许对于pt-query-digest快速定位瓶颈。
将分散的记录转换为有组织的报告。

锁频、耗时高、竞争严重。
为索引优化和SQL重写提供数据支持。

但必须自己修改指定的参数值。
每个系统都是不同的。

算了。
由你决定。

营销MM让我讲MySQL日志顺序读写及数据文件随机读写原理

说白了,MySQL的性能瓶颈就卡在这两种磁盘读写机制上——一种是随机读,一种是顺序写。
复杂的是,这两种机制既独立又紧密耦合。

我们先来说说最重要的事情。
随机读取是增删改操作的基础。
去年我们跑一个电商项目,3 000TPS的并发直接被IOPS压垮了。
单表随机读延迟飙升至5 0ms,SQL响应时间直接变成闪现。
还有一点是,顺序写虽然快,但是很多人不注意。
比如redolog的OSCache机制在默认开启的情况下可以节省一半的磁盘刷新延迟。
但如果在某些系统中禁用它,则会影响耐用性。
还有另一个关键细节。
SSD的随机读写性能并不是线性的。
例如,从7 2 00转机械盘更换为NVMe SSD时,QPS可提升5 倍以上。

我一开始以为提高随机读只需要堆BP缓存即可,后来发现是错误的。
数据页大小(默认1 6 KB)和表索引设计(例如覆盖索引可以减少随机读取次数)是隐藏变量。
等等,还有一件事,顺序写和随机读的负载均衡尤为重要。
去年调优的时候,我们把redolog文件分成4 块,顺序写延迟直接降低了3 0%。

建议您下次进行硬件选型时,日志盘优先使用SSD,数据盘使用高性能SAS SSD,而不必做任何NVMe堆叠。
说实话,这有点棘手,但值得一试。