2010-12-16 68 views
8

如果我們希望立即解鎖,有什麼辦法可以列出鎖定表並殺死事務。如何查找鎖定的表名(特定於任何事務處理)

還是有任何其他術語,我們需要遵循上述操作,我正在尋找。

任何幫助或指導,將不勝感激。

+1

真的沒有必要把你的主題作爲你的問題的第一行 - 我們都閱讀它。另外,你不需要大寫字母,它只是使閱讀變得困難。 – Robert 2010-12-16 09:30:19

回答

13

這將顯示與正在舉行獨佔鎖的所有數據庫(其可以包括在此運行時間保持短暫的),使用sys.dm_tran_locks DMV:

select d.*, l.* from sys.dm_tran_locks l 
join sys.databases d on l.resource_database_id = d.database_id 
where l.request_mode = 'X' 

(X =獨佔,S =共享, IS =意圖共享)請參閱Lock Modes

不過,也許最好的辦法是打開跟蹤標誌1204和1222:

跟蹤標誌1204和跟蹤標誌1222 當死鎖發生時,跟蹤標誌1204 和跟蹤標誌1222返回信息 即在SQL Server 2005錯誤日誌中捕獲。跟蹤標誌1204 報告由死鎖中涉及的每個節點格式化的死鎖信息 。 跟蹤標誌1222格式死鎖 信息,首先由進程和 然後由資源。有可能 啓用兩個跟蹤標誌來獲得兩個 表示相同的死鎖 事件。

價:Detecting and Ending Deadlocks

此外,運行sp_who2和尋找在BlkBy(阻塞者)列中的條目;遵循這些直到你到達僵局鏈的頭部。這是進程標識符(或PID)的責任。

得到什麼SQL是落後於特定的過程中,你可以運行:

dbcc inputbuffer (@pid) 

,並使用PID終止該進程(謹慎和風險自負):

kill @pid 

退房Who is Active? v10.00: DMV Monitoring Made Easy

又讀Blocking is not Deadlocking(區分兩種情形)

+0

BlkBy列究竟意味着什麼與事務相關的事務由於表已被鎖定。以及如何使用PID來終止進程。當我執行「sp_who2」時,我能夠SPID列名 – 2010-12-16 10:11:05

+0

sys.dm_tran_locks.request_mode對S,IS和X的含義與上面的查詢中一樣。你能描述一下嗎? – 2010-12-16 10:30:02

+0

@K Maheshwar Rao:這是有幫助的如何關於一些upvote愛? – 2010-12-16 10:35:41