MySQL的数据库性能分析利器Percona toolkit

发布于:2025-04-17 ⋅ 阅读:(29) ⋅ 点赞:(0)

简介

  • Percona Toolkit是Percona公司出品的,是一个功能强大、稳定、易用的MySQL工具集
  • 用于管理MySQL数据库,可以提供很多实用工具,简化MySQL的管理,提高MySQL的性能,并能够解决很多常见的MySQL问题
  • Percona Toolkit的开源特性和丰富的社区资源,为用户提供了很多灵活的解决方案,非常适合用于高性能、高可用的MySQL环境
  • 官网:https://docs.percona.com/percona-toolkit/index.html

使用场景

  • 慢查询分析
    • Percona Toolkit中的pt-query-digest工具可以分析MySQL的慢查询日志,找出慢查询语句,通过分析排除MySQL性能瓶颈和优化查询
  • 复制监控
    • Percona Toolkit的pt-table-checksum和pt-table-sync工具可用于验证MySQL主从复制是否一致,检测数据同步的延迟或故障,并保持主从数据的一致性。
  • 表和索引优化
    • Percona Toolkit的pt-online-schema-change工具通过在线方式修改MySQL表结构,避免了长时间锁表带来的影响,从而避免对业务造成影响。
  • 数据备份
    • Percona Toolkit的xtrabackup工具可以实现MySQL的在线备份,无需停止数据库,保障业务连续性。
  • 状态监控
    • Percona Toolkit的pt-mysql-summary和pt-summary等工具用于定期生成汇总MySQL服务器统计信息的报告,包括MySQL运行时间、活跃线程状态、连接统计信息等,方便管理员快速掌握数据库的情况。

使用示例

Mysql 慢查询分析诊断

临时开启慢SQL
  • 查询状态
show variables like 'slow%'

在这里插入图片描述

  • slow_query_log属性是OFF,处于关闭状态,也可以通过 0和1进行配置,1表示开启,0表示关闭
    • 开启慢查询日志
set global slow_query_log = on
  • slow_query_log_file表示慢查询日志文件的存放路径
set global slow_query_log_file = '自定义路径'
  • 如何定义慢sql语句 show variables like ‘%long%’
  • long_query_time属性,值为10.000000,表示的只记录查询时间在10s以上的语句
  • 数据不多的情况,慢查询的临界值设置为0.02:set long_query_time=0.02
持久化开启慢SQL日志
  • 配置持久化 vim /etc/mysql/my.cnf
[mysqld]
slow_query_log = 1
long_query_time = 0.1
slow_query_log_file =/usr/local/mysql/mysql_slow.log
  • 重启mysql生效
  • 利用上面的命令进行验证 参数是否生效
  • 模拟慢查询,睡眠10秒, select sleep(10);
  • 进入容器查看日志 cat /usr/local/mysql/mysql_slow.log

使用包管理器安装

包管理器安装 percona-release
-  Red Hat Enterprise Linux 或兼容衍生产品
sudo yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
  • Debian 或 Ubuntu Linux
sudo apt update
sudo apt install curl
curl -O https://repo.percona.com/apt/percona-release_latest.generic_all.deb
sudo apt install gnupg2 lsb-release ./percona-release_latest.generic_all.deb
sudo apt update
使用相应的包管理器安装 Percona Toolkit
  • 对于 Debian 或 Ubuntu
sudo apt-get install percona-toolkit
  • 对于 RHEL 或 CentOS
sudo yum install percona-toolkit
  • 查看安装的版本
 pt-query-digest --version

pt-query-digest 安装

  • 前置依赖包安装
yum install -y perl-DBI
yum install -y perl-DBD-MySQL 
yum install -y perl-Time-HiRes
yum install -y perl-IO-Socket-SSL
yum install -y perl-TermReadKey
  • 下载安装包
wget https://downloads.percona.com/downloads/percona-toolkit/3.1.0/binary/redhat/7/x86_64/percona-toolkit-3.1.0-2.el7.x86_64.rpm
  • 下载超时使用其它链接
https://file.laoweiio.cn/develop/perconaToolkit/percona-toolkit-3.1.0-2.el7.x86_64.rpm
https://file.laoweiio.cn/develop/perconaToolkit/percona-toolkit-3.5.7-1.el7.x86_64.rpm

安装

yum install -y percona-toolkit-3.1.0-2.el7.x86_64.rpm
  • 验证成功安装命令 pt-query-digest --help
  • pt工具各个命令的基本功能介绍,使用 command --help 来查看每个命令的具体作用和使用方法

pt-query-digest案例实战之慢查询分析诊断

查看慢SQL日志

在这里插入图片描述

使用pt-query-digest本地查看

pt-query-digest /local/path//mysql_slow.log > slow_report.log
  • 结果解读
    • 第一部分:总体统计结果
    • 第二部分:查询分组统计结果
    • 第三部分:每一种查询的详细统计结果
# 该工具执行日志分析的用户时间,系统时间,物理内存占用大小,虚拟内存占用大小
# 130ms user time, 10ms system time, 26.10M rss, 220.60M vsz
# Current date: Thu Jun  8 19:02:27 2023

# 运行分析工具的主机名
# Hostname: iZwz90pegu9budx5tk4rv0Z

# 被分析的文件名
# Files: ./slow.log

# 语句总数量,唯一的语句数量,QPS,并发数
# Overall: 26 total, 8 unique, 0.00 QPS, 0.01x concurrency _______________
# Time range: 2023-06-05T02:38:20 to 2023-06-05T09:46:49

# 属性               总计      最小    最大    平均    95%  标准    中等
# Attribute          total     min     max     avg     95%  stddev  median
# ============     ======= ======= ======= ======= ======= ======= =======
# 语句执行时间
# Exec time           152s   156ms    122s      6s      4s     23s   501ms
# 锁占用时间
# Lock time          122us     1us    27us     4us    12us     5us     2us
# 发送到客户端的行数
# Rows sent             66       0      10    2.54    3.89    2.62    0.99
# select语句扫描行数
# Rows examine       8.77M       0 976.57k 345.56k 961.27k 443.31k       0
# 查询的字符数
# Query size         1.30k      20     393   51.04   92.72   68.70   28.75

# Rank:所有语句的排名,默认按查询时间降序排列,通过--order-by指定
# Query ID:语句的ID,(去掉多余空格和文本字符,计算hash值)
# Response:总的响应时间
# time:该查询在本次分析中总的时间占比
# calls:执行次数,即本次分析总共有多少条这种类型的查询语句
# R/Call:平均每次执行的响应时间
# V/M:响应时间Variance-to-mean的比率
# Item:查询对象

# Profile
# Rank Query ID                       Response time  Calls R/Call   V/M
# ==== ============================== ============== ===== ======== =====
#    1 0x1D25CEA76BFE1965475EA3672... 121.7419 79.9%     1 121.7419  0.00 DELETE product
#    2 0xA23F51D9043009CE58C87A94D...  20.6882 13.6%    10   2.0688  5.36 SELECT product
#    3 0x0A5F86B31A5B0237C47F0790C...   7.5473  5.0%     8   0.9434  0.05 SELECT product
# MISC 0xMISC                           2.4501  1.6%     7   0.3500   0.0 <5 ITEMS>

#查询队列1:每秒查询量,查询的并发,队列1的ID值
# Query 1: 0 QPS, 0x concurrency, ID 0x1D25CEA76BFE1965475EA3672D60F6ED at byte 3062
# This item is included in the report because it matches --limit.
# Scores: V/M = 0.00
# Time range: all events occurred at 2023-06-05T09:36:08
# Attribute    pct   total     min     max     avg     95%  stddev  median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count          3       1
# Exec time     79    122s    122s    122s    122s    122s       0    122s
# Lock time      3     4us     4us     4us     4us     4us       0     4us
# Rows sent      0       0       0       0       0       0       0       0
# Rows examine  10 976.57k 976.57k 976.57k 976.57k 976.57k       0 976.57k
# Query size     1      20      20      20      20      20       0      20
# String:
# 使用的数据库名称
# Databases    shop
# Hosts        61.140.183.79
# Users        root

#查询时间分布
# Query_time distribution
#   1us
#  10us
# 100us
#   1ms
#  10ms
# 100ms
#    1s
#  10s+  ################################################################
# Tables
#    SHOW TABLE STATUS FROM `shop` LIKE 'product'\G
#    SHOW CREATE TABLE `shop`.`product`\G
DELETE  from product\G
# Converted for EXPLAIN
# EXPLAIN /*!50100 PARTITIONS*/
select * from  product\G


网站公告

今日签到

点亮在社区的每一天
去签到