2012-02-22 20 views
2

是否有一些配置可以在MySQL端執行,以自動終止或超時非常慢的查詢,比如說100秒。在MySQL中自動終止/超時緩慢查詢

+1

你需要小心的是,因爲如果你設置類似的東西在全球範圍內運營總有上一大桌殺死了重新編制風險反過來可能會導致腐敗。你可以做的是將超時添加到與MySQL服務器連接的應用程序的連接字符串中 – 2012-02-22 14:43:55

回答

0

從MySQL 5.1開始,您可以創建一個存儲過程來查詢與您的條件相匹配的所有查詢(您的案例中的「長時間運行時間」)的information_schmea.PROCESSLIST表。在查詢processlist表時,只需遍歷遊標即可殺死超出超時條件的正在運行的查詢進程。

看看下面的例子:程序查找並終止所有非SUPER比N秒運行更長的「系統帳戶」查詢

http://forge.mysql.com/tools/tool.php?id=106

1

您可以列出所有通過下面的命令你的MySQL查詢:

$ mysqladmin processlist 

所以你可以運行一些腳本來解析這個列表,並且它會終止特定的查詢。

在例子中,你可以用任何語言通過cron運行一些腳本,以定期檢查長的查詢,如:

$result = mysql_query("SHOW FULL PROCESSLIST"); 
while ($row=mysql_fetch_array($result)) { 
    $process_id=$row["Id"]; 
    if ($row["Time"] > 200) { 
    $sql="KILL $process_id"; 
    mysql_query($sql); 
    } 
} 

又如:

mysql> select concat('KILL ',id,';') from information_schema.processlist 
where user='root' and time > 200 into outfile '/tmp/a.txt'; 

mysql> source /tmp/a.txt; 

相關:

瞭解更多: