pt-kill常见用法

简介

pt-kill是一个优秀的kill MySQL连接的工具,是percona toolkit的一部分,在因为空闲连接较多导致超过最大连接数、某个有问题的sql导致mysql负载过高时,都需要将一些连接kill掉,这个工具主要就是这个用途。

从show processlist中获取满足条件的连接或是从包含show processlist的文件中读取满足要求的连接并打印或是傻吊或是执行其他操作,这个工具在工作中实用性很高,当服务器连接出现异常后第一个想到的就是pt-kill,自己写一个脚本也可以,但是功能还是没有pt-kill强大。

参数

## --daemonize 
## 以守护进程的形式运行

## --interval 
## 多久运行一次,单位可以是s/m/h/d,默认是s

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

## --kill 
## 杀掉连接并退出

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

## --print
## 打印满足条件的语句

## --busy-time 
## 批次查询已运行的时间草果这个时间的线程

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

常见用法

## 按user kill
pt-kill --busy-time 15   --match-user="dbUSER1 | dbUSER2,..." --victim all --interval 1 --kill --daemonize --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log

## 按query来源host
pt-kill --busy-time 15   --match-host="192.168.10.10 | 192.168.10.11" --victim all --interval 1 --kill --daemonize --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log

## 按command kill
pt-kill --busy-time 15   --match-command="query | Execute" --victim all --interval 1 --kill --daemonize --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log
pt-kill --busy-time 15   --ignore-command="sleep | binlogdump" --victim all --interval 1 --kill --daemonize --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log

## 严格区分大小写,command有:Query Sleep/Binlog Dump/Connect/Delayed insert/Execute/Fetch/InitDB/Kill/Prepare/Processlist/Quit/Reset stmt/Table Dump
pt-kill --match-command Query --busy-time 5 --host --port --interval --print --kill --victims all

## 按state kill
pt-kill --busy-time 15 --match-state="Locked | Sending data" --victim all --interval 1 --kill --daemonize --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log

## 按info关键字kill
pt-kill --busy-time 15 --match-info="SELECT | DELETE" --victim all --interval 1 --kill --daemonize --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log

## 按访问的dbname kill
pt-kill --busy-time 15 --match-db="db1 | db2"  --victim all --interval 1 --kill --daemonize --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log

## 杀掉空闲连接
pt-kill --match-command Sleep --idle-time 100 --host hostname --port 5002 --interval 0.5 --print --kill --victims all

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

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

## 杀掉正在filesort的SQL
pt-kill --match-command Query --match-state "Sorting result" --busy-time 5 --host –port --interval --print --kill --victims all

## 杀掉正在Copying to tmp table的SQL
pt-kill --match-command Query --match-state "Copying to tmp table" --busy-time 5 --host --port --interval --print --kill --victims all

参考