KILL [CONNECTION | QUERY] processlist_id
每個連線到 mysqld 的程序都會在個別的執行緒中執行。您可以使用 KILL
陳述式來終止執行緒。processlist_id
執行緒處理程序清單識別碼可以從 INFORMATION_SCHEMA
PROCESSLIST
表格的 ID
欄位、SHOW PROCESSLIST
輸出的 Id
欄位,以及 Performance Schema 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
操作會導致資料表損壞且無法使用。在您再次最佳化或修復(不中斷)之前,對此類資料表的任何讀取或寫入都會失敗。