Percona Toolkit使用之pt-duplicate-key-checker

     pt-duplicate-key-checker的功能是查找出MySQL表中的重复索引和外键。

     用法如下:

pt-duplicate-key-checker [OPTIONS] [DSN]

     pt-duplicate-key-checker通过检查MySQL表来查找重复或者冗余的索引和外键。连接参数读取自MySQL配置文件。

pt-duplicate-key-checker --host host1

     该程序检查MySQL表的“ SHOW CREATE TABLE ”查询输出:如果发现索引间以相同的次序覆盖相同的字段或者最左前缀部分字段,就打印出可疑的索引。默认情况下,索引必须是相同的类型。即即便有相同的索引字段,一个BTREE索引和一个FULLTEXT索引并不互相重合。这可以忽略。

     该程序也查找重复外键。重复外键间覆盖同一张表的相同字段,并引用相同的父表。

     程序输出的结尾是一个简短的小结,包括以字节计的重复索引所占用的总空间大小的预估。计算方式为索引宽度乘以各个表中的记录数量。

     以下为个人本地环境的测试数据。

     首先建张示例表,包括若干冗余索引。

CREATE TABLE `player`.`player` (
	`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
	`number` INT(10) UNSIGNED NOT NULL COMMENT 'player number',
	`name` VARCHAR(15) NOT NULL COMMENT 'player name',
	`role` VARCHAR(15) NOT NULL COMMENT 'player role',
	PRIMARY KEY (`id`),
	INDEX `number_name_role` (`number`, `name`, `role`),
	INDEX `number_name` (`number`, `name`),
	INDEX `number` (`number`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;

     然后终端命令行跑一下pt-duplicate-key-checker。

root@ubuntu:~# pt-duplicate-key-checker -h192.168.112.129 -P3306 -uroot -p123456
# ########################################################################
# player.player                                                           
# ########################################################################

# number_name is a left-prefix of number_name_role
# Key definitions:
#   KEY `number_name` (`number`,`name`),
#   KEY `number_name_role` (`number`,`name`,`role`),
# Column types:
#	  `number` int(10) unsigned not null comment 'player number'
#	  `name` varchar(15) not null comment 'player name'
#	  `role` varchar(15) not null comment 'player role'
# To remove this duplicate index, execute:
ALTER TABLE `player`.`player` DROP INDEX `number_name`;

# number is a left-prefix of number_name_role
# Key definitions:
#   KEY `number` (`number`)
#   KEY `number_name_role` (`number`,`name`,`role`),
# Column types:
#	  `number` int(10) unsigned not null comment 'player number'
#	  `name` varchar(15) not null comment 'player name'
#	  `role` varchar(15) not null comment 'player role'
# To remove this duplicate index, execute:
ALTER TABLE `player`.`player` DROP INDEX `number`;

# ########################################################################
# Summary of indexes                                                      
# ########################################################################

# Size Duplicate Indexes   25
# Total Duplicate Indexes  2
# Total Indexes            35
root@ubuntu:~# 
     可以看出输出结果比较翔实,两个较于`number_name_role`的冗余索引`number_name`和`number`都找了出来,而且包含没有注释掉的用于删除重复索引的DDL。小结部分给出索引总大小(Total Indexes)为35(包括1个primary key和3个secondary index),其中冗余索引的大小(Size Duplicate Indexes)为25,冗余索引数量(Total Duplicate Indexes)为2个。



参考:

https://www.percona.com/doc/percona-toolkit/LATEST/pt-duplicate-key-checker.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值