Percona Toolkit使用

2024-04-15 10:32
文章标签 使用 toolkit percona

本文主要是介绍Percona Toolkit使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Percona Toolkit使用

pt-query-digest

TIPS

官方文档:pt-query-digest

  • 作用

    分析日志(包括binlog、General log、slowlog)、processlist以及tcpdump中的查询

  • 语法

    pt-query-digest [OPTIONS] [FILES] [DSN]      
    
  • 常用OPTIONS

    --create-review-table			当使用--review参数把分析结果输出到表中时,如果没有表就自动创建
    --create-history-table		当使用--history参数把分析结果输出到表中时,如果没有表就自动创建
    --filter									输出符合条件的内容
    --limit    								限制输出的百分比或数量。可指定百分比或数字,例如90%表示按响应时间从小到大排序,输出90%的结果;20表示输出最慢的20条
    --host  									指定MySQL地址,也可用-h指定
    --port										指定MySQL端口
    --user  									指定MySQL用户名,也可用-u指定
    --password  							指定MySQL密码,也可用-p指定
    --history 								将分析结果保存到表中,分析结果比较详细,下次再使用--history时,如果存在相同的语句,且查询所在的时间区间和历史表中的不同,可通过查询同一CHECKSUM来比较某类型查询的历史变化
    --review 									将分析结果保存到表中,从而方便未来review。这个分析只是对查询条件进行参数化,一个类型的查询一条记录,比较简单。当下次使用--review时,如果存在相同的语句分析,就不会记录到数据表中
    --output 									指定将结果输出输出到哪里,值可以是report(标准分析报告)、slowlog(Mysql slow log)、json、json-anon,一般使用report,以便于阅读
    --since 									指定分析的起始时间,值为字符串,可以是指定的某个”yyyy-mm-dd [hh:mm:ss]”格式的时间点,也可以是简单的一个时间值:s(秒)、h(小时)、m(分钟)、d(天),如12h就表示从12小时前开始统计
    --until 									指定分析的截止时间,配合--since可以分析一段时间内的慢查询                     
    
  • 常用DSN

      A    指定字符集D    指定连接的数据库P    连接数据库端口S    连接Socket fileh    连接数据库主机名p    连接数据库的密码t    使用--review或--history时把数据存储到哪张表里u    连接数据库用户名                
    

    DSN使用key=value的形式配置;多个DSN使用,分隔

  • 使用示例

    # 展示slow.log中最慢的查询的报表
    pt-query-digest slow.log# 分析最近12小时内的查询
    pt-query-digest --since=12h slow.log# 分析指定范围内的查询
    pt-query-digest slow.log --since '2020-06-20 00:00:00' --until '2020-06-25 00:00:00'# 把slow.log中查询保存到query_history表
    pt-query-digest --user=root --password=root123 --review h=localhost,D=test,t=query_history --create-review-table slow.log# 连上localhost,并读取processlist,输出到slowlog
    pt-query-digest --processlist h=localhost --user=root --password=root123 --interval=0.01 --output slowlog# 利用tcpdump获取MySQL协议数据,然后产生最慢查询的报表
    # tcpdump使用说明:https://blog.csdn.net/chinaltx/article/details/87469933
    tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 > mysql.tcp.txt
    pt-query-digest --type tcpdump mysql.tcp.txt# 分析binlog
    mysqlbinlog mysql-bin.000093 > mysql-bin000093.sql
    pt-query-digest  --type=binlog mysql-bin000093.sql# 分析general log
    pt-query-digest  --type=genlog  localhost.log
    
  • 结果可视化:

    在Percona官方 https://www.percona.com/blog/2012/08/31/visualization-tools-for-pt-query-digest-tables/ 有介绍两款工具:

    • Query Digest UI
    • Box Anemometer
    • 但两款工具都已N多年不维护了,如果感兴趣也可以搭建玩一玩,个人不建议用于生产。此外,Box Anemometer安装教程可参考 https://www.cnblogs.com/lixigang/articles/5011055.html

pt-index-usage

TIPS

官方文档:pt-index-usage

  • 作用

    通过日志文件分析查询,并分析查询如何使用索引

  • 原理

    • 清点数据库中所有的表与索引,并将库中现有的索引和日志中的查询所使用的索引进行比较
    • 对日志中的每个查询运行EXPLAIN(这一步使用单独的数据库连接清点表并执行EXPLAIN)
    • 对于无用的索引,展示删除的语句
  • 语法

    pt-index-usage [OPTIONS] [FILES]         
    
  • 常用OPTIONS

    --drop					打印建议删除的索引,取值primary、unique、non-unique、all。默认值non-unique,只会打印未使用的二级索引
    --databases			只分析指定数据库的索引,多个库用,分隔
    --tables				只分析指定表的索引,多张表用,分隔
    --progress			打印执行进度
    --host  				指定MySQL地址,也可用-h指定
    --port					指定MySQL端口
    --user  				指定MySQL用户名,也可用-u指定
    --password  		指定MySQL密码,也可用-p指定                 
    

    DSN使用key=value的形式配置;多个DSN使用,分隔

  • 常用DSN

      A    指定字符集D    指定连接的数据库h    连接数据库主机名p    连接数据库的密码P    连接数据库端口S    连接Socket fileu    连接数据库用户名             
    
  • 使用示例

    # 读取slow.log,并连上localhost,去分析有哪些索引是可以删除的
    pt-index-usage slow.log --user=root --password=root123 --host=localhost --port=
    # 读取slow.log,并连上localhost,只分析employees库中,有有哪些索引是可以删除的
    pt-index-usage slow.log --user=root --password=root123 --host=localhost --databases=employees              
    
  • 注意点

    • 此工具使用MySQL资源比较多,因此,在使用此工具时候:
      • 如果有条件,尽量不要直接在生产环境执行,而应在有相同表结构的数据库环境执行;
      • 如果必须在生产环境执行,请避开高峰期,比如在凌晨低谷期执行
    • 此工具分析大文件比较慢,使用时需注意这点,并做一定处理(比如把遗留的超大的慢查询日志先删除,而可以新建一个慢查询日志,并运行一段时间后用pt-index-usage分析)
    • 由于pt-index-usage只会扫描慢查询,而非所有的查询,所以有可能某个索引在慢查询日志中未使用,但其实还是被使用了的(只是使用这个索引的SQL并非慢查询)。因此:
      • 正式删除之前,应当先review下,确保可以删除该索引后再操作,避免发生问题
      • 对于MySQL 8.0及更高版本,善用“ 不可见索引 ”,进一步降低风险。

TIPS

pt-duplicate-key-checker :可以帮助我们找到重复的索引或外键,使用方式基本类似。

pt-variable-advisor

TIPS

官方文档:pt-variable-advisor

  • 作用

    分析MySQL变量,并对可能出现的问题提出建议

  • 原理

    执行 SHOW VARIABLES ,并分析哪些变量的值设置不合理,给出建议

  • 语法

    pt-variable-advisor [OPTIONS] [DSN]       
    
  • 常用OPTIONS

    --source-of-variable			指定变量来源,可选mysql/none或者文件
    --user  									指定MySQL用户名,也可用-u指定
    --password  							指定MySQL密码,也可用-p指定         
    
  • 常用DSN

      A    指定字符集D    指定连接的数据库h    连接数据库主机名p    连接数据库的密码P    连接数据库端口S    连接Socket fileu    连接数据库用户名             
    

    DSN使用key=value的形式配置;多个DSN使用,分隔

  • 使用示例

    # 连接上localhost:3306,并分析变量
    pt-variable-advisor localhost --user=root --password=root123
    pt-variable-advisor P=3306,u=root,p=root123 localhost:3306# 先将show global variables生成文件,然后用pt-variable-advisor分析文件
    mysql -uroot -proot123 -e'show global variables' > /root/vars.txt
    pt-variable-advisor --source-of-variables /root/vars.txt          
    

pt-online-schema-change

TIPS

  • 官方文档:pt-online-schema-change
  • MySQL从5.6开始,已支持online r功能,pt-online-schema-change越来越弱化了。
    • 有关Online DDL,可详见 Online DDL Operations
    • 有关online DDL和pt-online-schema-change之间的对比详见《 MySQL ONLINE DDL 和PT-ONLINE-SCHEMA-CHANGE对比 》
  • 作用

    在线修改表结构,无需锁表地ALTER表结构

  • 原理

    • 创建一张一模一样的表,表名一般是_new后缀
    • 在新表上执行更改字段操作
    • 在原表上加三个触发器,分别对应于DELETE/UPDATE/INSERT操作,并将原表中要执行的语句也在新表中执行
    • 将原表的数据拷贝到新表中
    • 使用原子的RENAME TABLE操作同时重命名原始表和新表,完成此操作后,删除原始表。
  • 语法

    pt-online-schema-change [OPTIONS] DSN    
    
  • 常用OPTIONS

    --dry-run											创建并修改新表的结构,但不会创建触发器、拷贝旧表数据也不会替换旧表
    --execute											如果指定该选项,则会修改表结构,否则只会做一些安全检查
    --charset											指定编码
    --alter												修改表结构的语句(其实就是你alter table语句,去掉alter table后剩下的部分),多条语句使用,分隔。该选项有一些限制,详见 https://www.percona.com/doc/percona-toolkit/3.0/pt-online-schema-change.html#cmdoption-pt-online-schema-change-alter 
    --no-version-check						是否检查版本
    --alter-foreign-keys-method		处理带有外键约束的表,以保证它们可以引用到正确的表。取值:auto(自动选择最佳策略)、rebuild_constraints(适用于删除和重新添加引用新表的外键约束)、drop_swap(禁用外键检查,然后在重命名新表之前将其删除)、none(无)           
    
  • 常用DSN

      A    指定字符集D    指定连接的数据库h    连接数据库主机名p    连接数据库的密码P    连接数据库端口S    连接Socket filet    想要alter的表u    连接数据库用户名             
    

    DSN使用key=value的形式配置;多个DSN使用,分隔

  • 使用示例

    # 为employees库的employees表添加字段my_test_column
    pt-online-schema-change -uroot -proot123 --alter='add column my_test_column int' --alter-foreign-keys-method=rebuild_constraints --execute D=employees,t=employees --charset=utf8mb4# 修改字段
    pt-online-schema-change -uroot -proot123 --alter='modify column my_test_column bigint(25)' --alter-foreign-keys-method=rebuild_constraints --execute D=employees,t=employees --charset=utf8mb4# 添加索引
    pt-online-schema-change -uroot -proot123 --alter='add key indx_my_test_column(my_test_column)' --alter-foreign-keys-method=rebuild_constraints --execute D=employees,t=employees# 删除索引
    pt-online-schema-change -uroot -proot123 --alter='drop key indx_my_test_column' --alter-foreign-keys-method=rebuild_constraints --execute D=employees,t=employees# 删除字段
    pt-online-schema-change -uroot -proot123 --alter='drop column my_test_column int' --alter-foreign-keys-method=rebuild_constraints --execute D=employees,t=employees                      
    
  • 注意点

    • 尽管用pt-online-schema-change 在线修改表结构不会锁表,但是对性能还是有一定的影响的。这是因为在执行过程中会做全表扫描,所以大表应在业务低峰期执行该操作;
    • 对于主从复制架构,考虑到主从的一致性,应在主库上执行pt-online-schema-change操作。

其他工具

# 展示系统概要信息
pt-summary# 展示MySQL相关的概要信息
pt-mysql-summary --user=root --password=root123 --host=localhost --port=3306# 把explain的结果转换成树形展示(在早期MySQL中,没有explain format=tree时,比较有用,可以增强explain的可读性)
mysql -uroot -proot123 -e "explain select * from employees.employees" > test-explain.sql
pt-visual-explain --host=localhost --user=root --password=root123 test-explain.sql        

遇到的问题

无法连接数据库,并报类似如下的异常:

DBI connect(';host=localhost;mysql_read_default_group=client','root',...) failed: Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory at /usr/bin/pt-query-digest line 1001.     

这是由于目前Percona Toolkit中的部分工具暂不支持caching_sha2_password导致的。

解决方案有两种:

  • 方法一、连接数据,并输入类似如下命令:

    mysql> ALTER USER 你的用户@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';    
    

    例如:

    ALTER USER root@'localhost' IDENTIFIED WITH mysql_native_password BY 'root123';      
    
  • 方法二、修改mysql配置文件 my.cnf ,在其中添加如下内容,并重启。

    [mysqld]
    default_authentication_plugin=mysql_native_password
    

所有工具官方文档

  • pt-align :对齐其他工具的输出
  • pt-archiver :将数据归档到其他表或文件
  • pt-config-diff :比较配置文件和变量
  • pt-deadlock-logger :记录MySQL死锁
  • pt-diskstats :交互式IO监控工具
  • pt-duplicate-key-checker :找到重复的索引或外键
  • pt-fifo-split :模拟分割文件并输出
  • pt-find :查找表,并执行命令
  • pt-fingerprint :将查询转换成fingerprint
  • pt-fk-error-logger :记录外键错误信息
  • pt-heartbeat :监控MySQL复制延迟
  • pt-index-usage :通过日志分析查询,并分析查询如何使用索引
  • pt-ioprofile :监控进程IO并打印IO活动表
  • pt-kill :kill掉符合条件查询
  • pt-mext :并行查询SHOW GLOBAL STATUS的样本信息
  • pt-mongodb-query-digest :通过汇总来自MongoDB查询分析器(query profiler)的查询来报告查询使用情况统计信息
  • pt-mongodb-summary :收集有关MongoDB集群的信息,它从多个来源收集信息从而提供集群的概要信息
  • pt-mysql-summary :展示MySQL相关的概要信息
  • pt-online-schema-change :在线修改表结构。无需锁表地ALTER表结构
  • pt-pg-summary :收集有关PostgreSQL集群的信息
  • pt-pmp :针对指定程序,聚合GDB的stack traces
  • pt-query-digest :从日志、processlist以及tcpdump中分析MySQL查询
  • pt-secure-collect :收集、清理、打包、加密数据
  • pt-show-grants :规范化打印MySQL授权
  • pt-sift :浏览由pt-stalk创建的文件
  • pt-slave-delay :使MySQL从属服务器滞后于其Master
  • pt-slave-find :查找和打印MySQL slave的复制层级树
  • pt-slave-restart :监控MySQL slave,并在发生错误后重启
  • pt-stalk :发生问题时收集有关MySQL的诊断数据
  • pt-summary :展示系统概要信息
  • pt-table-checksum :验证MySQL主从复制的一致性
  • pt-table-sync :高效同步表数据
  • pt-table-usage :分析查询是如何使用表的
  • pt-upgrade :验证不同服务器上的查询结果是否相同
  • pt-variable-advisor :分析MySQL变量,并对可能出现的问题提出建议
  • pt-visual-explain :将explain的结果格式化成树形展示

参考文档

  • percona toolkit 学习记录
  • Percona Toolkit 实战
  • Percona Toolkit(pt)的安装与使用

这篇关于Percona Toolkit使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/905566

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU