2010-12-22 65 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