每天一个percona 工具 --- pt-kill

主要用途:pt-kill是用来kill MySQL连接的一个工具,在MySQL中因为空闲连接较多导致超过最大连接数,或某个有问题的sql导致mysql负载很高时,需要将其KILL掉来保证服务器正常运行。

 

从show processlist 中获取满足条件的连接或者从包含show processlist的文件中读取满足条件的连接并打印或者杀掉或者执行其他操作。

这个工具在工作中实用性很高,当服务器连接出现异常后第一想到的就是pt-kill,我们这里主要用来防止某些select操作时间过长,从而影响其他线上SQL。

 

范例:

pt-kill --log-dsn D=test1,t=pk_log --create-log-table --host=host2 --user=root --password=123--port=3306 --busy-time=10 --print --kill-query --match-info "SELECT|select" --victims all

 

该使用范例的作用:

如果不存在test1.pk_log表,则创建该表,然后将所有pt-kill的操作记录到该表中。对所有查询时间超过10秒的SELECT语句进行print显示出来,同时会kill该query。

pt-kill 默认检查间隔为5秒。

 

参数:

--log-dsn D=testdb,t=kill_log --create-log-table 是创建testdb.kill_log表,之后将pt-kill操作的日志记录在表中。

--busy-time=10 执行时间超过10秒的。

--print --kill-query 动作是进行print和kill query,除此之外的动作还有kill连接:--kill

--match-info 'SELECT|select' 只匹配SELECT 语句。

 

重要参数:

--daemonize  放在后台以守护进程的形式运行;

--interval  多久运行一次,单位可以是s,m,h,d等,默认是s。默认30s,有点长,可以根据实际情况来调节

--victims 默认是oldest,只杀最古老的查询。这是防止被查杀是不是真的长时间运行的查询,他们只是长期等待。这种匹配按时间查询,杀死一个时间最高值。

    all 杀掉所有满足的线程

     all-but-oldest 杀死所有,但最长的保留不杀。

--kill 杀掉连接并且退出

--kill-query 只杀掉连接执行的语句,但是线程不会被终止

--print 打印出来kill掉的连接

--busy-time 批次查询已运行的时间超过这个时间的线程;

--idle-time 杀掉sleep 了多少时间的连接线程,必须在--match-command sleep时才有效

–busy-time 批次查询已运行的时间超过这个时间的线程;

–idle-time 杀掉sleep了多少时间的连接线程,必须在--match-command sleep时才有效

–match-command 匹配当前连接的命令

 

常用用法:

pt-kill --defaults-file xx --match-command Sleep --kill --victims all --interval 10 每隔10s 杀掉处于sleep状态的连接数;

pt-kill --defaults-file xx --busy-time 60 --kill --victims all --interval 10 每隔10s 杀掉处初步runnning状态超过60s的连接数;

pt-kill –match-command Sleep –idle-time 5 –host –port –interval –print –kill –victims all 杀掉空闲链接

pt-kill –match-command Query –busy-time 5 –host –port –interval –print –kill –victims all 杀掉运行时间超过5s的链接

pt-kill –match-command Query –busy-time 5 –host –port –interval –print –kill –victims all –match-info 杀掉匹配某个规则的正在运行的sql

pt-kill –match-command Query –match-state “Sorting result” busy-time 5 –host –port –interval –print –kill –victims all 杀掉正在进行filesort的sql

pt-kill –match-command Query –match-state “Copying to tmp table” busy-time 5 –host –port –interval –print –kill –victims all 杀掉正在Copying to tmp table的sql

 

使用--config写配置文件的方式简化命令:

pt-kill --config tmp.txt --log-dsn D=testdb,t=kill_log --create-log-table --match-info "SELECT|select" --victims all

 

cat tmp.txt

host=host2

user=root

password=123

port=3306

busy-time=10

print

kill-query

 

--match-info 是区分大小写的,匹配SELECT也就意味着对select无法匹配,因此使用"SELECT|select"包含大小写.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值