批量 kill mysql 中運轉時光長的sql。本站提示廣大學習愛好者:(批量 kill mysql 中運轉時光長的sql)文章只能為提供參考,不一定能成為您想要的結果。以下是批量 kill mysql 中運轉時光長的sql正文
KILL語法
KILL [CONNECTION | QUERY] thread_id
每一個與mysqld的銜接都在一個自力的線程裡運轉,您可使用SHOW PROCESSLIST語句檢查哪些線程正在運轉,並應用KILL thread_id語句終止一個線程。
KILL許可自選的CONNECTION或QUERY修正符:
· KILL CONNECTION與不含修正符的KILL一樣:它會終止與給定的thread_id有關的銜接。
· KILL QUERY會終止銜接以後正在履行的語句,然則會堅持銜接的原狀。
假如您具有PROCESS權限,則您可以檢查一切線程。假如您具有SUPER權限,您可以終止一切線程和語句。不然,您只能檢查和終止您本身的線程和語句。
您也能夠應用mysqladmin processlist和mysqladmin kill敕令來檢討和終止線程。
正文:您不克不及同時應用KILL和Embedded MySQL Server庫,由於內植的辦事器只運轉主機運用法式的線程。它不克不及創立任何本身的銜接線程。
當您停止一個KILL時,對線程設置一個獨有的終止標志。在多半情形下,線程終止能夠要花一些時光,這是由於終止標志只會在在特定的距離被檢討:
· 在SELECT, ORDER BY和GROUP BY輪回中,在讀取一組行後檢討標志。假如設置了終止標志,則該語句被廢棄。
· 在ALTER TABLE進程中,在每組行從本來的表中被讀取前,檢討終止標志。假如設置了終止標志,則語句被廢棄,暫時表被刪除。
· 在UPDATE或DELETE運轉時代,在每一個組讀取以後和每一個已更行或已刪除的行以後,檢討終止標志。假如終止標志被設置,則該語句被廢棄。留意,假如您正在應用事務,則變革不會被 回滾。
· GET_LOCK()會廢棄和前往NULL。
· INSERT DELAYED線程會疾速地刷新(拔出)它在存儲器中的一切的行,然後終止。
· 假如線程在表鎖定治理法式中(狀況:鎖定),則表鎖定被疾速地廢棄。
· 假如在寫入挪用中,線程正在期待余暇的磁盤空間,則寫入被廢棄,並隨同”disk full”毛病新聞。
· 正告:對MyISAM表終止一個REPAIR TABLE或OPTIMIZE TABLE操作會招致湧現一個被破壞的沒有效的表。對如許的表的任何讀取或寫入都邑掉敗,直到您再次優化或修復它(不中止)。
1、經由過程information_schema.processlist表中的銜接信息生成須要處置失落的MySQL銜接的語句暫時文件,然後履行暫時文件中生成的指令
mysql> select concat('KILL ',id,';') from information_schema.processlist where user='root'; +------------------------+ | concat('KILL ',id,';') +------------------------+ | KILL 3101; | KILL 2946; +------------------------+ 2 rows in set (0.00 sec) mysql>select concat('KILL ',id,';') from information_schema.processlist where user='root' into outfile '/tmp/a.txt'; Query OK, 2 rows affected (0.00 sec) mysql>source /tmp/a.txt; Query OK, 0 rows affected (0.00 sec)
2、殺失落以後一切的MySQL銜接
mysqladmin -uroot -p processlist|awk -F "|" '{print $2}'|xargs -n 1 mysqladmin -uroot -p kill
殺失落指定用戶運轉的銜接,這裡為Mike
mysqladmin -uroot -p processlist|awk -F "|" '{if($3 == "Mike")print $2}'|xargs -n 1 mysqladmin -uroot -p kill
3、經由過程SHEL劇本完成
#殺失落鎖定的MySQL銜接 for id in `mysqladmin processlist|grep -i locked|awk '{print $1}'` do mysqladmin kill ${id} done
4、經由過程Maatkit對象集中供給的mk-kill敕令停止
#殺失落跨越60秒的sql
mk-kill -busy-time 60 -kill
#假如你想先不殺,先看看有哪些sql運轉跨越60秒
mk-kill -busy-time 60 -print
#假如你想殺失落,同時輸入殺失落了哪些過程
mk-kill -busy-time 60 -print –kill
mk-kill更多用法可參考:
http://www.maatkit.org/doc/mk-kill.html
http://www.sbear.cn/archives/426
Maatkit對象集的其它用法可參考:
http://code.谷歌.com/p/maatkit/wiki/TableOfContents?tm=6
參考文檔:
http://www.谷歌.com
http://www.orczhou.com/index.php/2010/10/kill-mysql-connectio-in-batch/
http://www.mysqlperformanceblog.com/2009/05/21/mass-killing-of-mysql-connections/