pt工具介绍
Percona Toolkit简称pt工具,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性、检查重复索引、定位IO占用高的表文件、在线DDL等,DBA熟悉掌握后将极大提高工作效率。
下载地址https://www.percona.com/downloads/percona-toolkit/LATEST/
CentOS 7下安装
[root@testdb_172_16_123_101 /root]# yum -y install https://www.percona.com/downloads/percona-toolkit/3.0.1/binary/redhat/7/x86_64/percona-toolkit-3.0.1-1.el7.x86_64.rpm
1. pt-ioprofile的使用
这个工具可以定位哪个文件IO占用比较高
原理是对某个pid附加一个strace进程进行IO分析, --profile-pid指定pid, --cell=sizes,该参数将结果已 B/s 的方式展示出来
[root@testdb_172_16_123_101 /root]# yum -y install strace
[root@testdb_172_16_123_101 /root]# ps aux | grep mysqld
mysql 5178 0.0 16.4 1087412 209504 ? Sl Mar05 0:44 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my.cnf
root 10174 0.0 0.0 112648 960 pts/0 R+ 12:38 0:00 grep --color=auto mysqld
[root@testdb_172_16_123_101 /root]# pt-ioprofile --profile-pid=5178 --cell=sizes
Tue Mar 7 12:38:22 CST 2017
Tracing process ID 5178
total write lseek ftruncate filename
15332 7666 7666 0 /data/mysql/mysql3306/data/innodb_status.5178
0 0 0 0 /data/mysql/mysql3306/tmp/ibFRPjUp
2. pt-duplicate-key-checker 检查冗余索引
[root@testdb_172_16_123_101 /root]# pt-duplicate-key-checker --socket=/tmp/mysql3306.sock --user=root --password=mysql --databases=testdb
# ########################################################################
# testdb.t1
# ########################################################################
# i_uid is a left-prefix of i_uid_name
# Key definitions:
# KEY `i_uid` (`uid`),
# KEY `i_uid_name` (`uid`,`name`)
# Column types:
# `uid` int(11) not null comment 'udi'
# `name` varchar(10) not null comment 'username'
# To remove this duplicate index, execute: #提示说找到冗余索引,并用以下SQL删除
ALTER TABLE `testdb`.`t1` DROP INDEX `i_uid`;
# ########################################################################
# Summary of indexes
# ########################################################################
# Size Duplicate Indexes 4
# Total Duplicate Indexes 1
# Total Indexes 3
[root@testdb_172_16_123_101 /root]# mysql -S /tmp/mysql3306.sock -uroot -p
Enter password:
root@localhost [(none)]>ALTER TABLE `testdb`.`t1` DROP INDEX `i_uid`;
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0
root@localhost [(none)]>exit
Bye
[root@testdb_172_16_123_101 /root]# pt-duplicate-key-checker --socket=/tmp/mysql3306.sock --user=root --password=mysql --databases=testdb
# ########################################################################
# Summary of indexes
# ########################################################################
# Total Indexes 2