博客文章除注明转载外,均为原创。转载请注明出处。
本文链接地址:http://blog.chinaunix.net/uid-31396856-id-5768434.html
pt-kill 是一个简单而且很实用的查杀mysql线程和查询的工具,主要是为了防止一些大/复杂/长时间查询占用数据库及系统资源,而对线上业务造成影响的情况。
说明如下:
1.匹配processlist的查杀线程或者会话的重要参数
举几个匹配例子如下:
(1)按照命令command查杀线程
--match-command多个command之间用 | 分隔,否则会失效。
command类型:Query、Sleep、Binlog Dump、Connect、Delayed insert、Execute、Fetch、Init DB、Kill、Prepare、Processlist、Quit、Reset stmt、Table Dump
(2)按state 来杀掉线程,
state类型有: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
注意state 的内容一定要严格匹配大小写,否则会杀不掉。注意--match-state多个state之间用 | 分隔,否则会失效。
(3)按info关键字来查杀线程
测试通过按info来杀掉线程,注意info的内容一定要严格匹配大小写,否则会杀不掉。注意--match-info多个info之间用 | 分隔,否则会失效。
--ignore-info 不匹配
--match-info 匹配
info可以使用select、update、insert、delete来进行匹配,并可使用"|"进行多项匹配,如"select|SELECT|delete|DELETE|update|UPDATE"
(4)按照访问来源host/ip查杀线程
--ignore-host/--match-host
(5)按照DB来查杀线程
--ignore-db/--match-db
(6)按照数据库用户
--ignore-user/--match-user
2.行为参数
Action:
--kill 杀掉连接并且退出
--kill-query 只杀掉连接执行的语句,但是线程不会被终止
--print 打印满足条件的语句
3.其它重要参数
--interval 运行检查query的间隔,
--victim 有三种情况:
oldest (默认值),只杀最老的查询(最先发起的最长时间) 。这是防止被查杀是不是真的长时间运行的查询,他们只是长期等待 。这种种匹配按时间查询,杀死一个时间最高值 。
all 杀掉所有满足的线程
all-but-oldest 杀死所有,但最长的保留不杀
--busy-time 批次查询已运行的时间超过这个时间的线程;
--idle-time 杀掉sleep 了多少时间的连接线程,必须在--match-command sleep时才有效
4.常用使用如下:
每10秒检查一次,发现有sleeping的进程就给干掉
pt-kill --match-command Sleep --victims all --interval 10 --host=localhost --port=3306 --user=root --password=********* --kill --print -S
查杀sleep大于5s的会话
pt-kill --match-command Sleep --busy-time 5 --host localhost --port 3306 --user=root --password=********* --interval 10 --run-time 1 --print --kill --victims all
查杀select大于10s的会话
pt-kill --match-info "select" --kill --victims all --busy-time 20 -uroot -p********* -S /mysql/data/mysql.sock
pt-kill --match-info "Select" --kill --victims all --busy-time 20 -uroot -p********* -S /mysql/data/mysql.sock
pt-kill --match-info "SELECT" --kill --victims all --busy-time 20 -uroot -p******* -S /mysql/data/mysql.sock
查杀某IP来源的会话
pt-kill --match-host "10.100.50.29" --print --victims all --busy-time 20 -uroot -p********* -S /mysql/data/mysql.sock
查杀访问某用户的会话
pt-kill --match-user "" --kill --victims all --busy-time 20 -uroot -p********* -S /mysql/data/mysql.sock
杀掉正在进行filesort的sql
pt-kill -match-command Query -match-state “Sorting result” busy-time 10 --host localhost --port 3306 --user=root --password=********* -interval 10 --run-time 1 -print -kill -victims all
pt-kill -match-command Query -match-state “Sorting result” busy-time 5 --host localhost --port 3306 --user=root --password=********* -interval 10 --run-time 1 -print -kill -victims all
杀掉正在Sending data的sql
pt-kill -match-command Query -match-state “Copying to tmp table” busy-time 10 --host localhost --port 3306 --user=root --password=********* -interval 10 --run-time 1 -print -kill -victims all
pt-kill -match-command Query -match-state “Copying to tmp table” busy-time 5 --host localhost --port 3306 --user=root --password=********* -interval 10 --run-time 1 -print -kill -victims all
杀掉正在Copying to tmp table的sql
pt-kill -match-command Query -match-state “Sending data”busy-time 10 --host localhost --port 3306 --user=root --password=********* -interval 10 --run-time 1 -print -kill -victims all
--The end!
阅读(4717) | 评论(0) | 转发(0) |