pt-kill的使用
Pt-kill的使用
pt-kill是用来杀死MySQL线程(连接)的工具(MySQL中通过show processlist查询线程情况),杀死某些匹配特定的queries,如负载较高的SQL或sleep较久的查询(短连接时杀死空闲久的以防止超过最大连接数)。
Action:
--kill为杀掉相关线程id
--kill-query为杀掉相关SQL保留线程id
--print为打印出相关线程id
Query matches:
(都是匹配于show processlist的输出信息)
注:--ignore要优先于其他选项
--busy-time
running匹配超过此值(时间秒的)线程;
--idle-time
匹配于idle/sleeping超过此时间的线程;
--ignore-command
匹配忽略匹配此command的线程;
--ignore-db
匹配忽略此db相关的线程;
--ignore-host
匹配忽略来源于host的相关线程;
--ignore-info
匹配忽略关键字(SQL)的相关线程;
--ignore-state
匹配忽略此State相关线程;
--ignore-user
匹配忽略此user相关线程;
注:DNS连接基本上与MySQL一样
--kill掉空闲大于100s的连接
eg:pt-kill --idle-time 100 --kill --victims all --interval 10 -uroot -pxxx -S /tmp/mysql3312.sock
--打印出线程
pt-kill --idle-time 20 --print --victims all --interval 10 -uroot -pxxx -S /tmp/mysql3312.sock
# 2016-10-19T11:18:15 KILL 20528 (Sleep 111 sec) NULL --打印出线程,线程id为20528
--kill掉running超过60s的连接
eg:pt-kill --busy-time 20 --kill --victims all -uroot -pxxx -S /tmp/mysql3312.sock
--match-command
eg:kill掉sleep线程(超过20s的),每间隔10s执行kill一次
pt-kill --match-command Sleep --idle-time 20 --kill --victims all --interval 10 -uroot -pxxx -S /tmp/mysql3312.sock
--match-state
eg:kill掉state为User sleep的线程,关键字要匹配到state的状态部分词,如“sleep”
pt-kill --match-state "User sleep" --print --victims all --busy-time 20 -uroot -pxxx -S /tmp/mysql3312.sock
Common State values are:
- Locked
- login
- copy to tmp table
- Copying to tmp table
- Copying to tmp table on disk
- Creating tmp table
- executing
- Reading from net
- Sending data
- Sorting for order
- Sorting result
- Table lock
- Updating
--match-user
kill掉用户为jicc、tester的线程
pt-kill --match-user "jicc|tester" --kill --victims all --busy-time 20 -uroot -pxxx -S /tmp/mysql3312.sock
--match-host
kill掉来源于host的线程
pt-kill --match-host "192.168.50.239|xxxhost" --print --victims all --busy-time 20 -uroot -pxxx -S /tmp/mysql3312.sock
--match-info 【匹配SQL关键字】
kill掉匹配关键字“select|delete”的线程,注意匹配字为原关键字SQL(注意大小写)
pt-kill --match-info "select" --kill --victims all --busy-time 20 -uroot -pxxx -S /tmp/mysql3312.sock
--match-db
kill掉某个db相关的线程
pt-kill --match-db "db001|zk" --print --victims all --busy-time 20 -uroot -pxxx -S /tmp/mysql3312.sock
--test-matching
查看show processlist信息
通过pt-kill查看抓取的show processlist结果
mysql -e “show processlist” > process.txt
pt-kill --test-matching process.txt --busy-time 60 --print
--victims是所有的queries,默认是the oldest query