2011-02-10 36 views
2

是否有可能讓mysql,需要超過突然想到說20秒後自動殺死查詢?MySQL的自動殺查詢

+0

你的意思是中止運行一個查詢?類似於「Ctrl c」?或者你的意思是編程20秒後自動中止? –

+2

如果查詢了超過20秒這是危險的是一個寫操作,這可能會導致表損壞 – ajreal

+0

@ajreal:如果是這樣的情況下,MySQL應該修復這個bug。當您取消查詢時,表格永遠不會損壞。 dbms應該是可靠的,這就是爲什麼你首先使用dbms的原因。 [設置MySQL查詢超時]的 –

回答

2

我猜你正在尋找maatkit實用叫MK-殺,將殺死符合某些條件的查詢。

+0

做,我們需要安裝任何東西????或者我們可以簡單地執行這個命令,cuz對我來說它說,mk-kill命令沒有找到 –

+1

該工具現在被稱爲'pt-kill',來自Percona。您將需要安裝它。請參閱http://www.percona.com/software/percona-toolkit –

1

它可以編寫一個程序做的。您的程序將使用SHOW PROCESSLIST來發現當前正在運行的查詢以及它們運行的​​時間,然後發出KILL查詢來終止一個查詢。

1

安裝RubyGem mysql_managersudo gem install mysql_manager),然後像這樣添加一個命令添加到crontab:

mysql-manager --kill --kill:user api --kill:max-query-time 30 --log:level DEBUG 

更多選項,運行mysql-manager --help

您可能需要指定替代方案--db:dsn,--db:username--db:password

瞭解更多關於在這裏:​​https://github.com/osterman/mysql_manager

0

要根據自己的thread_id嘗試查詢和人工捕殺他們殺了查詢,

SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND = 'Query' AND TIME > 10; 

的替代性和互動的方式將輸出的值到文件中使用的查詢,

SELECT CONCAT('KILL ',ID,';') 
FROM INFORMATION_SCHEMA.PROCESSLIST 
WHERE USER = ‘new’ 
AND COMMAND = 'Query' 
AND TIME > 10 
INTO OUTFILE '/tmp/thread_kill.txt';  

,然後使用殺文件中的線程,

\. /tmp/thread_kill.txt 

另一種方法是尋找像Percona工具包,MONyog,MySQL Enterprise Monitor這樣的監視工具,您可以讓工具查找更長/更慢的查詢,鎖定查詢並殺死它們。通過MONyog,額外的優勢是不僅可以殺死緩慢的查詢,還可以通過電子郵件通知用戶哪些查詢阻止了資源並使服務器變慢。