2010-12-22 83 views
3

運行選擇查詢時,出現'鎖定請求超時超時'錯誤。SQL服務器錯誤 - 超出鎖定請求超時

我知道什麼時候會出現這個錯誤。某些事務應該鎖定表。

但我需要知道如何找到它。

請注意,當它被鎖定時,我無法對其進行檢查。就好像它發生在過去一樣,但我需要知道那次阻止它的其他事務/查詢是什麼。

簡單地說,我希望這些事件在發生這種情況時記錄在sql錯誤日誌中,以便稍後可以看到並查找誰是長時間運行的查詢來阻止它。

任何想法如何讓它記錄。 我試圖設置跟蹤標誌並檢查。 DBCC TRACEON(1204,1222,-1) 但我找不到與此相關的任何記錄。 在此先感謝。

回答

1

你運行的是哪個版本的sql server?如果您使用的是SQL 2008之前的版本,那麼您需要與我們的IT人員合作,在現場進行實時分析。

如果2008年可以追溯查看死鎖事件,因爲它們在管理視圖中顯示。它存儲爲XML,但你可以很容易地打破它...

Select 
    DLEvent.XEvent.value('(data/value)[1]', 'varchar(max)') as DeadlockGraph 
From 
    (
     select CAST(target_data as xml) as DLData 
     from sys.dm_xe_session_targets st 
     join sys.dm_xe_sessions s 
     on s.address = st.event_session_address 
     where name = 'system_health' 
    ) AS DLData 

CROSS APPLY DLData.nodes ('//RingBufferTarget/event') AS DLEvent (XEvent) 

Where DLEvent.XEvent.value('@name', 'varchar(max)') = 'xml_deadlock_report' 
+0

是啊我在SQL 2008年。感謝這個查詢。但看起來它提供了死鎖事件的細節。 我沒有死鎖我只是得到鎖定時間。我的意思是表被其他一些長時間運行的事務或查詢鎖定,所以我的查詢超時。我只需要一種方法來查找誰是持有鎖的其他查詢。我無法在鎖定期間找到它,所以我只想將此事件記錄或保存在某處供我檢查。 我不需要死鎖事件,我想鎖定超時事件被記錄。 – tamizhan 2010-12-22 16:06:49