一、pt-query-digest工具的简单使用
-
简介
- pt-query-digest是用于分析mysql慢查询的一个第三方工具,它可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的Mysql协议数据来进行分析。
- 可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。
-
安装
-
pt-query-digest本质是pert脚本,所以首先安装perl模块
yum install -y perl-CPAN perl-Time-HiRes
-
快速安装
-
官网地址:https://www.percona.com/downloads/
-
下载资源
wget https://www.percona.com/downloads/percona-toolkit/3.2.0/binary/redhat/7/x86_64/percona-toolkit-3.2.0-1.el7.x86_64.rpm
-
本地安装
yum localinstall -y percona-toolkit-3.2.0-1.el7.x86_64.rpm
-
检查是否安装完成
pt-query-digest --help
-
-
相关命令简单用法【这边的每一个命令都需要自己使用时去详细查看】
-
查看服务器信息
pt-summary
-
查看磁盘开销使用信息
pt-diskstats
-
查看mysql数据库信息
pt-mysql-summary --user=root --password=123456
- 可以看到mysql相关的具体信息:有系统时间,数据库实例,msyql服务路径,主从信息等信息。
-
分析慢查询日志
// pt-query-digest xxx慢日志文件路径 // --limit=100% 查看所有记录 // 总分模式,先描述总体信息,然后分条分析 pt-query-digest /var/lib/mysql/xxx-slow.log
-
查找mysql的从库和同步状态
pt-slave-find --host=localhost --user=root --password=123456
-
查看mysql的死锁信息
// 将死锁信息放入库为test,表为deadlocks,用户root,密码123456 pt-deadlock-logger --run-time=10 --interval=3 --create-dest-table --dest D=test,t=deadlocks u=root,p=123456
-
从慢查询日志中分析索引使用情况
pt-index-usage --user=root --password=123456 --host=localhost /var/lib/mysql/myshop02-slow.log
-
查找慢查找数据库表中重复的索引
pt-duplicate-key-checker --host=localhost --user=root --password=123456
-
查看mysql表和文件的当前活动IO开销(不要在高峰使用)
pt-ioprofile
-
查看不同mysql配置文件差异(集群常用,双方都生效的变量)
pt-config-diff /etc/my.cnf /root/my_master.cnf
- 用在集群中,主从复制或者出现问题排查,主机和从机差异的时候经常用到。
-
pt-find查找mysql表和执行命令
// 查找数据库里大于1M的表 pt-find --user=root --password=123456 --tablesize +1M // 查找表和索引大小排序 pt-find --user=root --password=123456 --printf "%T\t%D.%N\n" | sort -rn
-
pt-kill杀掉符合标准的mysql进程
// 显示查询时间大于3秒的查询 pt-kill --user=root --password=123456 --busy-time 3 --print // 杀掉大于3秒的查询 pt-kill --user=root --password=123456 --busy-time 3 --kill
-
查看mysql授权(集群常用,授权复制)
pt-show-grants --user=root --password=123456 pt-show-grants --user=root --password=123456 --separate --revoke
-
验证数据库复制的完整性(集群常用,主从复制后检验)
pt-table-checksum --user=root --password=123456
-
-
-
使用过程遇到的问题
-
问题一:
-
DBI connect(’;;mysql_read_default_group=client’,‘test’,…) failed: Access denied for user ‘test’@‘localhost’ (using password: YES) at /usr/bin/pt-find line 323.
-
解决方案:
-
连接数据之后,更改
// 重点:WITH mysql_native_password // username 就是数据库的用户名 // ip_address 对应自己设置 可以是localhost 可以是ip 可以是% // password 密码 ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY 'password';
-
重新登录mysql,再次尝试相关命令
-
-
-
二、使用pt-query-digest可以分析的三大类有问题的SQL
- 查询次数多且每次查询占用时间长的sql
- 通常为pt-query-digest分析的前几个查询,该工具可以很清楚的看出每个SQL执行的次数及百分比等信息,执行的次数多,占比比较大的SQL
- IO大的sql
- 注意pt-query-digest分析中的Rows examine项,扫描的行数越大,IO越大
- 未命中的索引的SQL
- pt-query-digest分析中的Rows examine 和 Rows Send的对比。说明该SQL的索引命中率不高,对于这种SQL,我们要重点进行关注。