2015-10-17 146 views
0

我有以下代碼來限制在MySQL中的執行時間,但它不工作。 有人幫我解決。如何限制MySQL中的執行時間?

delimiter // 
    CREATE PROCEDURE `classicWatches`.kill_long_running_queries() 

BEGIN 
    DECLARE process_id BIGINT; 
    DECLARE finished INT DEFAULT 0; 
    DECLARE kill_process_id CURSOR FOR SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND = 'Query' AND TIME > 5; # only for 5 seconds just testing whether it works or not 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1; 
    OPEN kill_process_query; 

    loop_loop: LOOP 

FETCH kill_process_id INTO process_id; 

IF process_id >=1 THEN 
    KILL QUERY process_id ; # Here showing error in mysql workbench but don't know what error 
END IF ; 
IF finished THEN 

    LEAVE loop_loop; 
END IF; 
    END LOOP loop_loop; 
    CLOSE kill_process_id; 

END // 
delimiter ; 

CREATE EVENT kill_long_running_queries 
ON SCHEDULE EVERY 10 SECOND 
DO CALL `classicWatches`.kill_long_running_queries(); 

回答

0

我不太清楚你想完成什麼。

enter image description here 在工作臺所示的錯誤是因爲一個整數預期(上線23所示 - 線23僅僅是一個例子),但它被發現process_id可變,但是,存儲的過程是創建並正確地執行時調用。

enter image description here 光標是kill_process_id,但在第13行打開遊標kill_process_query不存在,您需要更改線路14

+0

我要殺死這些都佔用更多的時間.Suppose這一進程的所有進程時間超過最大時間限制。那麼它應該被自動殺死。 –

+0

@SRSharma:根據你想要達到的目標,你可以使用'KILL CONNECTION'或'KILL QUERY'。請參見[13.7.6.4 KILL語法](http://dev.mysql.com/doc/refman/5.6/en/kill.html)。 – wchiquito

+0

我想殺死查詢,但我不知道這段代碼有什麼問題。你能改正它嗎?如果可以的話? –

相關問題