SELECT
Request_Session_Id AS SPID,
OBJECT_NAME(Resource_Associated_Entity_Id) AS TableName
FROM Sys.dm_Tran_Locks
WHERE Resource_Type = 'OBJECT';
回傳 SPID(鎖定進程 ID)與 TableName(被鎖定表名)。
EXEC Sp_Who2 'SPID_Value'; -- 替換實際 SPID
結果包含 HostName、ProgramName、LoginName 等資訊,定位來源應用/主機。
DECLARE @SPID INT = 57; -- 目標 SPID DECLARE @SQL VARCHAR(1000) = 'KILL ' + CAST(@SPID AS VARCHAR); EXEC(@SQL);
-- 查詢阻塞鏈
SELECT
Blocking_Session_Id AS Blocker,
Session_Id AS Victim,
Wait_Type,
Wait_Time_Ms,
Wait_Resource
FROM Sys.dm_Os_Waiting_Tasks
WHERE Blocking_Session_Id > 0;
-- 自動生成 KILL 指令(謹慎使用)
DECLARE @KillCmd NVARCHAR(MAX) = '';
SELECT @KillCmd += 'KILL ' + CAST(Blocking_Session_Id AS VARCHAR) + '; '
FROM Sys.dm_Os_Waiting_Tasks
WHERE Blocking_Session_Id > 0 AND Wait_Time_Ms > 30000; -- 超過 30 秒
-- PRINT @KillCmd; -- 先檢視再執行
-- EXEC Sp_ExecuteSql @KillCmd;
PROCESSADMIN 或 SYSADMIN 權限死鎖處理標準流程:DMV 定位表與 SPID → Sp_Who2 定位主機 → KILL 終止進程。輔以阻塞鏈監控、應用端優化,從根源減少死鎖發生。