PT工具集pt-fingerprint使用

2019/11/13 15:14
阅读数 249

一、简介

官网地址:https://www.percona.com/doc/percona-toolkit/LATEST/pt-fingerprint.html

用途:将SQL语句抽象化,对指定SQL提取SQL指纹,便于SQL分析。即:所有where条件中指定的具体值以?代替。

二、使用

2.1  SQL指纹的逻辑

  • 将所有来自mysqldump的SELECT查询组合在一起,即使它们针对的是不同的表。对于pt-table checksum的所有校验和查询也是如此。
  • 将多值INSERT 语句缩短为单个 VALUES() 列表。
  • 去除注释
  • 抽象USE语句中的数据库,因此所有的USE语句都被分组在一起。
  • 替换所有的文字,例如带引号的字符串。为了提高效率,替换文字数字的代码在某种程度上是非选择性的,并且可能会替换一些实际上不是数字的东西。十六进制文字也被替换。NULL被视为文字。嵌入到标识符中的数字也被替换,因此类似名称的表将被指纹识别为相同的值(例如users_2009和users_2010将指纹识别为相同的值)。
  • 将所有空格折叠成一个空格。
  • 将整个查询小写。
  • 用一个占位符替换IN()和VALUES()列表中的所有文字,不管基数如何。
  • 将多个相同的UNION查询合并为一个查询

2.2  使用示例

用法:

pt-fingerprint [OPTIONS] [FILES]

简单语句的SQL指纹提取:

[root@BigData ~]# pt-fingerprint --query "select a, b, c from users where id = 500 and price > 100"
select a, b, c from users where id = ? and price > ?

[root@BigData ~]# pt-fingerprint --query "INSERT INTO product(ID,NAME,PRICE) VALUES(1,'apple',100)"
insert into product(id,name,price) values(?+)

文本文件的SQL指纹提取:

pt-fingerprint sql.txt

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部