[SQL SERVER][TS] 找出 blocking 源頭SQL

[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

image

image

可以看到 spid=56(update) 被 spid 54 封鎖,這時如果想要知道spid 54的SQL,

執行 dbcc inputbuffer (spid)即可。

 

DBCC INPUTBUFFER(54)--輸入源頭 spid

image

可以看到源頭(spid 54) 交易沒有處理commit ,對於不良的作業就可以使用 Kill 來處理。

 

kill 54

image

可以看到 spid 56 就沒被blocking了,更新作業也順利完成了。

 

 

參考

DBCC INPUTBUFFER