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
作業會導致表格損毀且無法使用。在您再次最佳化或修復(不中斷)之前,對此類表格的任何讀取或寫入都會失敗。