使用 pt-query-digest 工具可以帮助分析 MySQL 查询的性能,找出慢查询、频繁查询以及消耗资源较多的查询,从而为优化提供依据。以下是详细深入的使用 pt-query-digest 进行查询分析的步骤和相关示例。

一、安装 pt-query-digest

pt-query-digest 是 Percona Toolkit 中的一个工具。可以通过以下方式安装:

1.1 使用包管理器安装

在 Debian/Ubuntu 系统上:

sudo apt-get update
sudo apt-get install percona-toolkit

在 CentOS/RHEL 系统上:

sudo yum install percona-toolkit
1.2 使用源代码安装

从 Percona Toolkit 官网下载并安装:

wget https://www.percona.com/downloads/percona-toolkit/3.0.13/source/tarball/percona-toolkit-3.0.13.tar.gz
tar -zxvf percona-toolkit-3.0.13.tar.gz
cd percona-toolkit-3.0.13
perl Makefile.PL
make
sudo make install

二、收集查询日志

pt-query-digest 可以分析多种格式的日志文件,常见的是 MySQL 的慢查询日志和通用查询日志。

2.1 启用慢查询日志

编辑 MySQL 配置文件 (my.cnfmy.ini):

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1  # 设置记录慢查询的阈值,单位为秒

重启 MySQL 服务以应用配置:

sudo systemctl restart mysql
2.2 启用通用查询日志(可选)

启用通用查询日志会记录所有查询,通常用于调试,不建议在生产环境长期启用:

[mysqld]
general_log = 1
general_log_file = /var/log/mysql/mysql-general.log

重启 MySQL 服务以应用配置:

sudo systemctl restart mysql

三、使用 pt-query-digest 分析查询日志

3.1 分析慢查询日志

使用 pt-query-digest 分析慢查询日志:

pt-query-digest /var/log/mysql/mysql-slow.log > slow_query_report.txt

输出示例(部分):

# 220ms user time, 10ms system time, 26.56M rss, 115.73M vsz
# Current date: Tue May 18 10:12:34 2021
# Hostname: myserver
# Files: /var/log/mysql/mysql-slow.log
# Overall: 100 total, 20 unique, 0 QPS, 0x concurrency _______________
# Time range: 2021-05-17 10:00:00 to 2021-05-17 10:05:00
# Attribute    total   min     max     avg     95%  stddev  median
# ============ ======= ======= ======= ======= ======= ======= =======
# Count          100
# Exec time     22s     50ms    1s      220ms   900ms  300ms   180ms
# Lock time      1s      0ms     20ms    10ms    15ms   5ms     8ms
# Rows sent      1000    1       100     10      50     20      5
# Rows examine   10000   10      500     100     400    150     75
3.2 分析通用查询日志

使用 pt-query-digest 分析通用查询日志:

pt-query-digest /var/log/mysql/mysql-general.log > general_query_report.txt

四、分析结果

pt-query-digest 输出的报告通常分为几个部分:

  1. Overall Summary:总结了日志文件中的总体情况,包括总查询数、独特查询数、平均执行时间等。
  2. Top 10 Queries:列出了资源消耗最大的前10个查询,按总执行时间排序。
  3. Detailed Query Information:详细列出了每个查询的执行情况,包括执行次数、总时间、平均时间、最大时间、锁时间等。
4.1 Overall Summary 示例
# Overall: 100 total, 20 unique, 0 QPS, 0x concurrency _______________
# Time range: 2021-05-17 10:00:00 to 2021-05-17 10:05:00
# Attribute    total   min     max     avg     95%  stddev  median
# ============ ======= ======= ======= ======= ======= ======= =======
# Count          100
# Exec time     22s     50ms    1s      220ms   900ms  300ms   180ms
# Lock time      1s      0ms     20ms    10ms    15ms   5ms     8ms
# Rows sent      1000    1       100     10      50     20      5
# Rows examine   10000   10      500     100     400    150     75
4.2 Top 10 Queries 示例
# Query 1: 0.25 QPS, 0.05x concurrency, ID 0x123456789ABCDEF
# Query_time: min=0.100s max=0.500s avg=0.300s 95%_interval=0.200s
# Lock_time: min=0.001s max=0.005s avg=0.003s 95%_interval=0.004s
# Rows_sent: min=10 max=100 avg=50 95%_interval=80
# Rows_examined: min=100 max=500 avg=300 95%_interval=400
SELECT * FROM orders WHERE customer_id = ?;

五、优化建议

根据 pt-query-digest 的分析结果,可以采取以下优化措施:

  1. 创建或优化索引:根据分析结果中显示的频繁查询和慢查询,创建或优化索引。
  2. 优化查询语句:重写具有高执行时间和高锁等待时间的查询,优化查询逻辑。
  3. 调整配置参数:根据查询的执行情况,调整MySQL的配置参数,如缓冲池大小、查询缓存、连接数等。
  4. 分区和分表:对于大表,考虑使用分区或分表策略,以提高查询效率。
  5. 使用EXPLAIN分析执行计划:使用 EXPLAIN 命令进一步分析查询的执行计划,找出优化的具体措施。
5.1 创建索引示例
CREATE INDEX idx_customer_id ON orders(customer_id);
5.2 优化查询语句示例

优化前:

SELECT * FROM orders WHERE customer_id = ?;

优化后(假设创建了索引):

SELECT * FROM orders USE INDEX (idx_customer_id) WHERE customer_id = ?;
5.3 使用EXPLAIN分析执行计划
EXPLAIN SELECT * FROM orders WHERE customer_id = ?;

六、总结

通过使用 pt-query-digest 工具,可以深入分析 MySQL 查询的性能瓶颈,找出慢查询、频繁查询和资源消耗大的查询。通过分析报告,可以采取针对性的优化措施,包括创建索引、优化查询语句、调整配置参数等,从而显著提升 MySQL 数据库的性能和稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918371.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918371.shtml
英文地址,请注明出处:http://en.pswp.cn/news/918371.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享一个基于Python和Hadoop的的电信客户特征可视化分析平台 基于Spark平台的电信客服数据存储与处理系统源码

💕💕作者:计算机源码社 💕💕个人简介:本人八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题…

初识STL

一 、STL的诞生在C发展早期,程序员在不同的项目中需要反复编写相似的数据结构和算法。重复开发带来以下问题:代码冗余:每个项目都要重新实现基本数据结构和算法维护困难:不同人编写的代码风格不一致,难以维护效率低下&…

DDoS 防护的未来趋势:AI 如何重塑安全行业?

随着网络攻击规模和复杂性的不断升级,分布式拒绝服务(DDoS)攻击已成为企业数字化转型中的一大威胁。传统防御手段在应对智能化、动态化的攻击时逐渐显露出局限性。而人工智能(AI)技术的崛起,正为 DDoS 防护…

【每天一个知识点】深度领域对抗神经网络

Deep Domain Adversarial Neural Network(深度领域对抗神经网络,DDANN) 是一类结合 深度学习 与 领域自适应(domain adaptation) 思想的神经网络结构,主要用于不同数据域之间的知识迁移,尤其是在…

【C语言】深入理解预处理

文章目录一、预定义符号二、#define定义常量:便捷的符号替换常见用法示例:注意事项:三、#define定义宏:带参数的文本替换关键注意点:四、带有副作用的宏参数五、宏替换的规则:预处理的执行步骤重要注意&…

展锐平台(Android15)WLAN热点名称修改不生效问题分析

前言 在展锐Android V项目开发中,需要修改softAp/P2P热点名称时,发现集成GMS后直接修改framework层代码无效。具体表现为: 修改packages/modules/Wifi/WifiApConfigStore中的getDefaultApConfiguration方法编译烧录后修改不生效 问题根源在…

wsl ubuntu访问(挂载)vmware vmdk磁盘教程

之前使用VMware Workstation 虚拟机跑了个ubuntu,现在改用wsl了, 想把vmware的磁盘挂载到wsl ubuntu。一、磁盘合并我原先的vmware跑的ubuntu存在多个vmdk文件(磁盘文件),需要先将磁盘合并成一个才方便挂载。首先你电脑…

UGUI源码剖析(3):布局的“原子”——RectTransform的核心数据模型与几何学

UGUI源码剖析(第三章):布局的“原子”——RectTransform的核心数据模型与几何学 在前几章中,我们了解了UGUI的组件规范和更新调度机制。现在,我们将深入到这个系统的“几何学”核心,去剖析那个我们每天都在…

c++注意点(15)----设计模式(桥接模式与适配器模式)

一、结构型设计模式两者有点相似,都是为了做到解耦的功能。适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。桥接模式是一种结构型设计模式, 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构&…

DuoPlus支持导入文件批量配置云手机参数,还优化了批量操作和搜索功能!

作为我常用的一款还不错的跨境工具,DuoPlus云手机帮我高效完成了很多跨境工作,它的功能也在逐步完善和优化,今天来聊聊它最近新更新的一些功能。功能更新一览新增导入文件配置参数:批量初始化代理、批量修改参数支持导入文件一键配…

PLC如何实现通过MQTT协议物联网网关接入管理云平台

在工业4.0与智能制造浪潮下,企业亟需实现设备数据的高效采集与云端协同,以支撑远程监控、预测性维护等场景。工业智能网关凭借其强大的协议解析能力、边缘计算功能及安全传输机制,成为PLC接入云平台的核心解决方案。本文将从技术架构、功能模…

通过sealos工具在ubuntu 24.02上安装k8s集群

一、系统准备(1)安装openssh服务 sudo apt install openssh-server sudo systemctl start ssh sudo systemctl enable ssh(2)放通防火墙 sudo ufw allow ssh(3)开通root直接登录 vim /etc/ssh/sshd_config#…

nginx+Lua环境集成、nginx+Lua应用

nginxluaredis实践 概述 nginx、lua访问redis的三种方式: 1。 HttpRedis模块。 指令少,功能单一 ,适合简单的缓存。只支持get 、select命令。 2。 HttpRedis2Module模块。 功能强大,比较灵活。 3。 lua-resty-redis库 OpenResty。…

机器学习 K-Means聚类 无监督学习

目录 K-Means 聚类:从原理到实践的完整指南 什么是 K-Means 聚类? 应用场景举例 K-Means 算法的核心原理 K-Means 算法的步骤详解 可视化理解 K-Means 的优缺点分析 优点 缺点 如何选择合适的 K 值? 1. 肘部法(Elbow Me…

RabbitMQ面试精讲 Day 16:生产者优化策略与实践

【RabbitMQ面试精讲 Day 16】生产者优化策略与实践 开篇 欢迎来到"RabbitMQ面试精讲"系列第16天,今天我们聚焦RabbitMQ生产者优化策略与实践。在消息队列系统中,生产者的性能表现直接影响整个系统的吞吐量和可靠性。掌握生产者优化技巧不仅能…

Android 系统的安全 和 三星安全的区别

维度Android(AOSP 通用)Samsung(Knox 强化)本质差异一句话信任根标准 Verified Boot(公钥由谷歌或 OEM 托管)额外在 自家 SoC 里烧录 Knox 密钥 熔丝位,一旦解锁即触发 Knox 0x1 熔断&#xff…

开源大模型实战:GPT-OSS本地部署与全面测评

文章目录一、引言二、安装Ollama三、Linux部署GPT-OSS-20B模型四、模型测试4.1 AI幻觉检测题题目1:虚假历史事件题目2:不存在的科学概念题目3:虚构的地理信息题目4:错误的数学常识题目5:虚假的生物学事实4.2 算法题测试…

【无标题】命名管道(Named Pipe)是一种在操作系统中用于**进程间通信(IPC)** 的机制

命名管道(Named Pipe)是一种在操作系统中用于进程间通信(IPC) 的机制,它允许不相关的进程(甚至不同用户的进程)通过一个可见的文件系统路径进行数据交换。与匿名管道(仅存在于内存&a…

Baumer相机如何通过YoloV8深度学习模型实现危险区域人员的实时检测识别(C#代码UI界面版)

《------往期经典推荐------》 AI应用软件开发实战专栏【链接】 序号 项目名称 项目名称 1 1.工业相机 + YOLOv8 实现人物检测识别:(C#代码,UI界面版) 2.工业相机 + YOLOv8 实现PCB的缺陷检测:(C#代码,UI界面版) 2 3.工业相机 + YOLOv8 实现动物分类识别:(C#代码,U…

本文章分享一个本地录音和实时传输录音给app的功能(杰理)

我用的是杰理手表sdk,该功能学会就可自行在任何杰里sdk上做,库函数大致一样,学会运用这个方向就好。1.我们要验证这个喇叭和麦是否正常最简单的的办法,就是直接万用表测试,直接接正负极,看看是否通路&#…