[SQL SERVER][TS] 找出 blocking 源頭SQL
今天處理blocking問題,雖然有很多方法可以找出blocking源頭SQL,
但我個人覺得使用 sp_who2+dbcc inputbuffer 真的快速又方便,
自己紀錄一下。
模擬blocking 狀況
connection1
BEGIN tran
UPDATE dbo.ap_log SET linenumber = 500 WHERE aplogid = 1
connection2
UPDATE dbo.ap_log SET linenumber = 50000 WHERE aplogid = 1
先利用 sp_who2 找出源頭 blocking spid
可以看到 spid=56(update) 被 spid 54 封鎖,這時如果想要知道spid 54的SQL,
執行 dbcc inputbuffer (spid)即可。
DBCC INPUTBUFFER(54)--輸入源頭 spid
可以看到源頭(spid 54) 交易沒有處理commit ,對於不良的作業就可以使用 Kill 來處理。
kill 54
可以看到 spid 56 就沒被blocking了,更新作業也順利完成了。
參考