KILL [CONNECTION | QUERY] processlist_id每個連線到 mysqld 的操作都會在獨立的執行緒中進行。您可以使用 KILL 陳述式來終止執行緒。processlist_id
執行緒程序清單識別碼可以從 INFORMATION_SCHEMA 的 PROCESSLIST 表格的 ID 欄位、SHOW PROCESSLIST 輸出的 Id 欄位以及效能架構的 threads 表格的 PROCESSLIST_ID 欄位中取得。目前執行緒的值會由 CONNECTION_ID() 函式傳回。
KILL 允許選用的 CONNECTION 或 QUERY 修飾詞
KILL CONNECTION與不帶修飾詞的KILL相同:它會終止與指定processlist_id相關聯的連線,並在終止連線正在執行的任何陳述式之後進行。KILL QUERY會終止連線目前正在執行的陳述式,但會保留連線本身。
檢視哪些執行緒可供終止的能力取決於 PROCESS 權限
終止執行緒和陳述式的功能取決於 CONNECTION_ADMIN 權限和已棄用的 SUPER 權限
沒有
CONNECTION_ADMIN或SUPER權限,您只能終止自己的執行緒和陳述式。擁有
CONNECTION_ADMIN或SUPER權限,您可以終止所有執行緒和陳述式,但若要影響使用SYSTEM_USER權限執行的執行緒或陳述式,您自己的工作階段也必須額外擁有SYSTEM_USER權限。
您也可以使用 mysqladmin processlist 和 mysqladmin kill 命令來檢查和終止執行緒。
當您使用 KILL 時,會為該執行緒設定一個特定執行緒的終止旗標。在大多數情況下,執行緒可能需要一些時間才會停止,因為終止旗標只會在特定的間隔檢查。
在
SELECT作業期間,對於ORDER BY和GROUP BY迴圈,會在讀取一個資料列區塊後檢查旗標。如果設定了終止旗標,陳述式將會中止。對表格複製的
ALTER TABLE作業會定期檢查終止旗標,針對從原始表格讀取的每幾個複製資料列。如果設定了終止旗標,陳述式將會中止,並且會刪除暫存表格。KILL陳述式會傳回而不等待確認,但終止旗標檢查會在相當短的時間內中止操作。中止操作以執行任何必要的清理工作也需要一些時間。在
UPDATE或DELETE作業期間,會在讀取每個區塊之後以及更新或刪除每個資料列之後檢查終止旗標。如果設定了終止旗標,陳述式將會中止。如果您未使用交易,則不會回滾變更。GET_LOCK()會中止並傳回NULL。如果執行緒位於表格鎖定處理常式中 (狀態:
Locked),則表格鎖定會快速中止。如果執行緒在寫入呼叫中等待可用磁碟空間,則寫入將會中止並顯示 「磁碟已滿」錯誤訊息。
EXPLAIN ANALYZE會中止並列印輸出的第一列。
在 MyISAM 表格上終止 REPAIR TABLE 或 OPTIMIZE TABLE 作業會導致表格損毀且無法使用。在您再次最佳化或修復(不中斷)之前,對此類表格的任何讀取或寫入都會失敗。