主要用途: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"包含大小寫.
