percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的 mysql 任务和系统任务,这些任务包括:
检查 master 和 slave 数据的一致性
有效地对记录进行归档
查找重复的索引
对服务器信息进行汇总
分析来自日志和 tcpdump 的查询
当系统出问题的时候收集重要的系统信息
percona-toolkit 源自 Maatkit 和 Aspersa 工具,这两个工具是管理 mysql 的最有名的工具,现在 Maatkit 工具已经不维护了,请大家还是使用 percona-toolkit 吧! 这些工具主要包括开发、性能、配置、监控、复制、系统、实用六大类,作为一个优秀的 DBA,里面有的工具非常有用,如果能掌握并加以灵活应用,将能极大的提高工作效率。
软件安装存在三种安装方式,分别为RPM包、二进制包、源码安装。
需安装依赖包
|
1 |
yum
install
perl-DBI perl-DBD-MySQL |
1.RPM包安装方式
|
1 |
rpm –ivh percona-toolkit-3.1.0-2.el7.x86_64.rpm |
2.二进制包安装
|
1
2
3
4
5 |
tar
–xvf percona-toolkit-3.0.11_x86_64.
tar
.gzcd
percona-toolkit-3.0.11perl Makefile.PLmakemake
install |
下面介绍它自带的一些工具
pt-kill 是一个简单而且很实用的查杀mysql线程和查询的工具,主要是为了防止一些大/复杂/长时间查询占用数据库及系统资源,而对线上业务造成影响的情况。
常用参数 |
含义 |
--user |
用户 |
--password |
密码 |
--port |
端口 |
--host |
主机 |
--socket |
本地套接字 |
--match-command |
匹配状态 |
--match-info |
匹配信息 |
--match-state |
匹配声明 |
--ignore-host/--match-host |
匹配主机 |
--ignore-db/--match-db |
匹配数据库 |
--ignore-user/--match-user |
匹配用户 |
--kill |
杀掉连接并且退出 |
--kill-query |
只杀掉连接执行的语句,但是线程不会被终止 |
|
|
打印满足条件的语句 |
--busy-time |
SQL运行时间的线程 |
--idle-time |
sleep时间的连接线程,必须在--match-command sleep时才有效 |
--interval |
query的间隔 |
--victim |
oldest|all|all-but-oldest 针对范围 |
--daemonize |
是否放到后台执行 |
--interval |
执行频率(s=seconds, m=minutes, h=hours, d=days) |
--log-dsn D=test,t=pk_log |
记录信息到表中 |
以下均省略连接参数!
3.1 杀运行时间超过10s的SQL语句但保留线程
|
1 |
pt-
kill
--busy-
time
=10 --victims all --print --
kill
-query |
3.2 查某IP来源且运行时间超过20s的会话
|
1 |
pt-
kill
--match-host
"10.100.50.29"
--print --victims all --busy-
time
=20s |
3.3 每10秒检查一次,状态为sleep的进程就给干掉
|
1 |
pt-
kill
--match-
command
Sleep --victims all --interval 10 --
kill
--print |
3.4 查杀select大于10s的会话
|
1 |
pt-
kill
--match-info
"select|Select|SELECT"
--print --victims all --busy-
time
20s |
3.5 查状态为sleep的进程且时间超过1h
|
1 |
pt-
kill
--match-
command
Sleep --victims all --idle-
time
=1h --print |
3.6 查杀访问某用户的会话
|
1 |
pt-
kill
--match-user
"test"
--victims all --print --
kill |
3.7 将执行记录记录到表中
|
1 |
pt-
kill
--log-dsn D=
test
,t=pk_log --create-log-table --host=192.168.186.11 --user=root --password=mysql --port=3306 --busy-
time
=10 --print --
kill
-query |
3.8 杀掉正在进行filesort的sql
|
1 |
pt-
kill
--match-
command
Query --match-state “Sorting result” --busy-
time
10 --interval 10 --run-
time
1 --print --
kill
--victims all |
3.9 后台执行杀掉正在进行filesort的sql
|
1 |
pt-
kill
--match-
command
Query --match-state “Sorting result” --busy-
time
10 --interval 10 --run-
time
1 --print --
kill
--victims all --daemonize |
3.10 筛选文件中processlist
|
1
2 |
mysql -e
"SHOW PROCESSLIST"
> proclist.txtpt-
kill
--
test
-matching proclist.txt --busy-
time
60 --print |
分析查询执行日志,并产生一个查询报告,为 MySQL、 PostgreSQL、memcached 过滤、重放或者转换语句。
常用参数 |
含义 |
--create-review-table |
当使用--review参数把分析结果输出到表中时,如果没有表就自动创建 |
--create-history-table |
当使用--history参数把分析结果输出到表中时,如果没有表就自动创建 |
--filter |
对输入的慢查询按指定的字符串进行匹配过滤后再进行分析 |
--limit |
限制输出结果百分比或数量,默认值是20,即将最慢的20条语句输出 |
--host |
mysql服务器地址 |
--user |
mysql用户名 |
--password |
mysql用户密码 |
--history |
将分析结果保存到表中,分析结果比较详细,下次再使用--history时,如果存在相同的语句,且查询所在的时间区间和历史表中的不同,则会记录到数据表中,可以通过查询同一CHECKSUM来比较某类型查询的历史变化 |
--review |
将分析结果保存到表中,这个分析只是对查询条件进行参数化,一个类型的查询一条记录,比较简单。当下次使用--review时,如果存在相同的语句分析,就不会记录到数据表中 |
--output |
分析结果输出类型,值可以是report(标准分析报告)、slowlog(Mysql slow log)、json、json-anon,一般使用report,以便于阅读 |
--since |
从什么时间开始分析,值为字符串,可以是指定的某个”yyyy-mm-dd (hh:mm:ss)”格式的时间点,也可以是简单的一个时间值:s(秒)、h(小时)、m(分钟)、d(天),如12h就表示从12小时前开始统计。 |
--until |
截止时间,配合—since可以分析一段时间内的慢查询 |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70014851/viewspace-2867430/ ,如需转载,请注明出处,否则将追究法律责任。