程式碼如以下:
SELECT request_session_id AS spid,
resource_type AS rt,
resource_databASe_id AS rdb,
(CASE resource_type
WHEN 'OBJECT' then object_name(resource_ASsociated_entity_id)
WHEN 'DATABASE' then '<db_name>'
ELSE
(SELECT object_name(object_id) FROM sys.partitions
WHERE hobt_id = resource_ASsociated_entity_id) END) AS objname,
resource_description AS rd,
request_mode AS rm,
request_status AS rs
FROM sys.dm_tran_locks
找到被鎖定的spid名稱 (rm狀態為 X,IX)
假設是spid 61
直接下 kill 61 即可!
===========狀態==========
spid:該次Request的編號。
objname:該次Request處理的物件,從圖中可以看到Customers。
rm/rs:該次Request的鎖定狀態。
rm = X 表示 dead lock,一般就是我們需要處理的。
rm = IX 表示 wait lock ,這種是因為前一個Request已經dead lock,而被pending的狀態。
rm = S or IS 表示 shared lock,一般的長時間查詢就會顯示這種狀態。
參考來源