KILL (Transact-SQL)
更新: 2006 年 4 月 14 日
根據工作階段識別碼 (SQL Server 2000 或更早版本中的 SPID ) 或工作單位 (UOW) 來結束使用者處理序。如果指定的工作階段識別碼或 UOW 有許多工作要恢復,KILL 陳述式可能需要花一些時間來完成,特別是當它牽涉到回復較長的交易時。
在 Microsoft SQL Server 2000 及更新的版本中,KILL 可用以結束正常的連接,這樣就可在內部結束與指定的工作階段識別碼關聯的交易。當 Microsoft 分散式交易協調器 (MS DTC) 在使用中時,此陳述式也可用以結束被遺棄和不確定的分散式交易。
語法
KILL { session ID | UOW } [ WITH STATUSONLY ]
引數
session ID
是要結束之處理序的工作階段識別碼。session ID 是在建立連接時,指派給每個使用者連接的唯一整數 (int)。在連接持續時間,工作階段識別碼值會繫結連接。當連接結束時,會釋出這個整數值,它可以重新指派給新的連接。請利用 KILL session ID 來結束與指定工作階段識別碼關聯的一般非分散式和分散式交易。
UOW
識別分散式交易的工作單位識別碼 (UOW)。UOW 是可從 sys.dm_tran_locks 動態管理檢視的 request_owner_guid 資料行來取得的 GUID。您也可以從錯誤記錄檔或透過 MS DTC 監視器來取得 UOW。如需有關監視分散式交易的詳細資訊,請參閱 MS DTC 文件集。利用 KILL UOW 來結束被遺棄的分散式交易。這些交易並未與任何真正的工作階段識別碼關聯,相反地,它們是人工地關聯於 session ID = '-2'。透過查詢 sys.dm_tran_locks、sys.dm_exec_sessions 或 sys.dm_exec_requests 動態管理檢視中的 session ID 資料行,此工作階段識別碼使得識別被遺棄的交易變得更容易。
- WITH STATUSONLY
針對先前的 KILL 陳述式而回復的指定 session ID 或 UOW,產生一份進度報告。KILL WITH STATUSONLY 並不會結束或回復 session ID 或 UOW,此命令只會顯示目前的回復進度。
備註
KILL 通常用來結束利用鎖定來封鎖其他重要處理序的處理序,或所執行的查詢在使用必要系統資源的處理序。系統處理序和執行擴充預存程序的處理序無法結束。
使用 KILL 時,要非常小心,當執行重要處理序時,尤其如此。您無法清除自己的處理序。其他不應清除的處理序如下:
- AWAITING COMMAND
- CHECKPOINT SLEEP
- LAZY WRITER
- LOCK MONITOR
- SIGNAL HANDLER
請利用 @@SPID 來顯示目前工作階段的工作階段識別碼值。
若要取得使用中工作階段識別碼值的報告,您可以查詢 sys.dm_tran_locks、sys.dm_exec_sessions 以及 sys.dm_exec_requests 動態管理檢視中的 session_id 資料行。您也可以檢視由 sp_who 系統預存程序傳回的 SPID 資料行。如果特定 SPID 的回復正在進行中,sp_who 結果集中該 SPID 的 cmd 資料行會指出 KILLED/ROLLBACK。
當特定連接對資料庫資源有鎖定並封鎖另一個連接的進度時,封鎖連接的工作階段識別碼會出現在 sys.dm_exec_requests 的 blocking_session_id 資料行或是由 sp_who 傳回的 blk 資料行中。
KILL 命令可用來解決不確定的分散式交易。這些交易是未解決的分散式交易,之所以會發生是因為資料庫伺服器或 MS DTC 協調器發生了非計劃的重新啟動。如需有關不確定交易的詳細資訊,請參閱<使用標示的交易 (完整復原模式)>中的「兩階段認可」一節。
使用 WITH STATUSONLY
只有因先前的 KILL session ID|UOW 陳述式使得工作階段識別碼或 UOW 正在回復中時,KILL WITH STATUSONLY 才會產生報表。進度報告會指出已完成的回復量 (百分比) 及估計的剩下時間長度 (以秒為單位),格式如下:
Spid|UOW <xxx>: Transaction rollback in progress. Estimated rollback completion: <yy>% Estimated time left: <zz> seconds
如果執行 KILL session ID|UOW WITH STATUSONLY 陳述式時,工作階段識別碼或 UOW 的回復已經完成,或沒有回復中的作業階段識別碼或 UOW,KILL session ID|UOW WITH STATUSONLY 便會傳回下列錯誤:
「訊息 6120,層級 16,狀態 1,行 1」
「無法取得狀態報告。處理序識別碼 <session ID> 的回復作業尚未進行。」
您可以重複不含 WITH STATUSONLY 選項的相同 KILL session ID|UOW 陳述式來取得相同的狀態報告,但不建議您這麼做。如果回復已完成,且在執行新的 KILL 陳述式之前,已將工作階段識別碼重新指派給新的工作,重複 KILL session ID 陳述式可能會結束新的處理序。指定 WITH STATUSONLY 會防止發生這個情況。
權限
需要系統管理員 (sysadmin) 和處理序管理員 (processadmin) 固定資料庫角色中的成員資格。
範例
A. 使用 KILL 來結束工作階段
下列範例顯示如何結束工作階段識別碼 53
。
KILL 53;
GO
B. 使用 KILL 工作階段識別碼 WITH STATUSONLY 來取得進度報告
下列範例會產生特定工作階段識別碼的回復處理序狀態。
KILL 54;
KILL 54 WITH STATUSONLY;
GO
--This is the progress report.
spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.
C. 利用 KILL 來結束被遺棄的分散式交易
下列範例顯示如何結束 UOW 為 D5499C66-E398-45CA-BF7E-DC9C194B48CF
的被遺棄分散式交易 (session ID = -2)。
KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';
請參閱
參考
KILL STATS JOB (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)
函數 (Transact-SQL)
SHUTDOWN (Transact-SQL)
@@SPID (Transact-SQL)
sys.dm_exec_requests
sys.dm_exec_sessions
sys.dm_tran_locks
sp_lock (Transact-SQL)
sp_who (Transact-SQL)
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2006 年 4 月 14 日 |
|