程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 批量 kill mysql 中運轉時光長的sql

批量 kill mysql 中運轉時光長的sql

編輯:MySQL綜合教程

批量 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/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved