有沒有辦法強制Mysql從PHP殺死一個查詢,如果它沒有在特定時間範圍內返回?從PHP的MysqlQuery強制超時
我有時會看到運行數小時的昂貴查詢(顯然這時HTTP連接超時或用戶離開了)。一旦足夠多的查詢累積起來,就會嚴重影響整體性能。
有沒有辦法強制Mysql從PHP殺死一個查詢,如果它沒有在特定時間範圍內返回?從PHP的MysqlQuery強制超時
我有時會看到運行數小時的昂貴查詢(顯然這時HTTP連接超時或用戶離開了)。一旦足夠多的查詢累積起來,就會嚴重影響整體性能。
長時間運行的查詢是設計不佳的標誌。最好檢查有問題的查詢以及它們如何進行優化。這隻會忽略問題。
如果仍然希望這樣,您可以使用SHOW PROCESSESLIST命令來獲取所有正在運行的進程。然後使用KILL x來終止客戶端連接。但是爲了這個工作,你必須從另一個PHP腳本檢查這個,因爲多線程還不可能。也不建議讓PHP用戶使用的用戶弄亂服務器設置。
我正在考慮設置一些連接屬性的線。我不是非常喜歡SHOW PROCESSLIST和KILL。我希望有更好的東西 – Ghostrider 2010-08-21 00:00:18
警告:預期的行爲現在應該用於像upstart
之類的東西。
你想爲這種事情創建DAEMONS
,但你也可以使用cron。
只需要查看xyz time
以上查詢的設置間隔並殺死它們即可。
// this instruction kills all processes executing for more than 10 seconds
SELECT CONCAT('KILL ',id,';')
FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE state = "executing" AND `time` >= 10
然而,如果查詢是這樣運行了很長時間...... 他們必須優化。
另一方面,您可能試圖管理共享服務器,可能會有一些流氓用戶。在這種情況下,您應該在服務條款中指定腳本將被監視和禁用,這正是應該對這樣的冒犯者做的事情。
哇,從來沒有見過的查詢運行了幾個小時... – jolt 2010-08-20 23:51:23