Chinaunix首页 | 论坛 | 博客
  • 博客访问: 528588
  • 博文数量: 100
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1172
  • 用 户 组: 普通用户
  • 注册时间: 2016-09-22 09:50
个人简介

一个守望数据库的老菜鸟

文章分类

全部博文(100)

文章存档

2019年(21)

2018年(17)

2017年(38)

2016年(24)

我的朋友

分类: Mysql/postgreSQL

2017-07-27 16:17:36

博客文章除注明转载外,均为原创。转载请注明出处。
本文链接地址: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!
阅读(2964) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~