首页 > mysql > percona toolkit使用之pt-duplicate-key-checker
2017
06-11

percona toolkit使用之pt-duplicate-key-checker

一:pt-duplicate-key-checker 使用

参考地址:http://www.percona.com/doc/percona-toolkit/pt-duplicate-key-checker.html

使用方法:

pt-duplicate-key-checker [OPTION...] [DSN]

使用说明:检查重复或多余的索引和外键,并打印出信息。

语法

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

Options:

  --all-structs         Compare indexes with different structs (BTREE, HASH,etc)
  --ask-pass            Prompt for a password when connecting to MySQL
  --charset=s       -A  Default character set
  --[no]clustered       PK columns appended to secondary key is duplicate (
                        default yes)
  --config=A            Read this comma-separated list of config files; if
                        specified, this must be the first option on the command
                        line
  --databases=h     -d  Check only this comma-separated list of databases
  --defaults-file=s -F  Only read mysql options from the given file
  --engines=h       -e  Check only tables whose storage engine is in this comma-
                        separated list
  --help                Show help and exit
  --host=s          -h  Connect to host
  --ignore-databases=H  Ignore this comma-separated list of databases
  --ignore-engines=H    Ignore this comma-separated list of storage engines
  --ignore-order        Ignore index order so KEY(a,b) duplicates KEY(b,a)
  --ignore-tables=H     Ignore this comma-separated list of tables
  --key-types=s         Check for duplicate f=foreign keys, k=keys or fk=both (
                        default fk)
  --password=s      -p  Password to use when connecting
  --pid=s               Create the given PID file
  --port=i          -P  Port number to use for connection
  --set-vars=A          Set the MySQL variables in this comma-separated list of
                        variable=value pairs
  --socket=s        -S  Socket file to use for connection
  --[no]sql             Print DROP KEY statement for each duplicate key (
                        default yes)
  --[no]summary         Print summary of indexes at end of output (default yes)
  --tables=h        -t  Check only this comma-separated list of tables
  --user=s          -u  User for login if not current user
  --verbose         -v  Output all keys and/or foreign keys found, not just
                        redundant ones
  --version             Show version and exit
  --[no]version-check   Check for the latest version of Percona Toolkit, MySQL,
                        and other programs (default yes)

Option types: s=string, i=integer, f=float, h/H/a/A=comma-separated list, d=DSN, z=size, m=time

Rules:

  This tool accepts additional command-line arguments. Refer to the SYNOPSIS and usage information for details.

DSN syntax is key=value[,key=value...]  Allowable DSN keys:

  KEY  COPY  MEANING
  ===  ====  =============================================
  A    yes   Default character set
  D    yes   Default database
  F    yes   Only read default options from the given file
  P    yes   Port number to use for connection
  S    yes   Socket file to use for connection
  h    yes   Connect to host
  p    yes   Password to use when connecting
  u    yes   User for login if not current user

  If the DSN is a bareword, the word is treated as the 'h' key.

Options and values after processing arguments:

  --all-structs         FALSE
  --ask-pass            FALSE
  --charset             (No value)
  --clustered           TRUE
  --config              /etc/percona-toolkit/percona-toolkit.conf,/etc/percona-toolkit/pt-duplicate-key-checker.conf,/root/.percona-toolkit.conf,/root/.pt-duplicate-key-checker.conf
  --databases           (No value)
  --defaults-file       (No value)
  --engines             (No value)
  --help                TRUE
  --host                (No value)
  --ignore-databases
  --ignore-engines
  --ignore-order        FALSE
  --ignore-tables
  --key-types           fk
  --password            (No value)
  --pid                 (No value)
  --port                (No value)
  --set-vars
  --socket              (No value)
  --sql                 TRUE
  --summary             TRUE
  --tables              (No value)
  --user                (No value)
  --verbose             FALSE
  --version             FALSE
  --version-check       TRUE

参数说明:加粗的为常用的

--all-structs
结构(B树,哈希等)的索引,默认情况下是禁止的。因为BTREE索引可能会覆盖作为FULLTEXT索引的列,其实他们不是真正
的重复,因为是不同的索引结构。

--ask-pass
提示输入密码。

--[no]clustered

    主键和第二索引一起是重复的,默认开启。检测时的非主键索引的多列索引的后缀是一个主键最左边的前缀,则作为一个重复键。如:

PRIMARY KEY  (`a`)

KEY `b` (`b`,`a`)

SELECT ... WHERE b=1 ORDER BY a;

如果按照这个工具去掉b索引,则会出现filesort,他给的意见是 留下b(b)单列索引,把order by a去掉,因为他们的结果是一样的,a是主键。

--config 
 读取该配置文件的列表。

--databases
只检查该列表中的数据库。

--defaults-file
缩写-F,读取Mysql的配置文件,需要绝对路径。

--engines
缩写-e,只检查该列表中指定的表的存储引擎。

--tables

缩写-t,只检查列表中指定的表。

--help
显示帮助

--host

缩写-h,连接到主机地址。

--ignore-databases

 跳过检查的某些数据库。

--ignore-engines
跳过检查的某些存储引擎。

--ignore-tables
 跳过检查某些表。

--ignore-order
加了这个参数会报: KEY(a,b)和 KEY(b,a) 是重复索引,默认关闭。

--key-types
检查索引的类型:f=foreignkeys, k=keys or fk=both,默认是fk。

--password
缩写-p,连接mysql时候的密码。

--user

缩写-u,连接mysql时候的用户

--pid
连接的PID

--port
缩写-P,连接时候的端口。

--socket
缩写-S,连接时候的套接字。

--[no]sql
打印出sql,如果有重复会答应出删除重复索引的sql。默认开启。

--[no]summary
打印出索引的统计信息。默认开启。

--verbose
缩写-v,打印出所有的索引信息,包括重复索引。

--version
打印版本信息。

列子说明

$ pt-duplicate-key-checker --user=root --password=passwd --host=10.10.0.254 --databases=igp2 --tables=user_medals


# ########################################################################
# igp2.user_medals
# ########################################################################

# user_id is a left-prefix of index_user_id_medal_id
# Key definitions:
#   KEY `user_id` (`user_id`) USING BTREE
#   UNIQUE KEY `index_user_id_medal_id` (`user_id`,`medal_id`),
# Column types:
#         `user_id` int(11) not null comment '用户id'
#         `medal_id` int(11) not null comment '对应user_medal_cert的勋章id'
# To remove this duplicate index, execute:
ALTER TABLE `igp2`.`user_medals` DROP INDEX `user_id`;

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

# Size Duplicate Indexes   1128
# Total Duplicate Indexes  1
# Total Indexes            3


可以看到列出了重复的索引,并给了如何优化的sql

本文》有 0 条评论

留下一个回复