目录
简介
- 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