运行选择查询时,我收到错误'超出锁定请求超时'。
我知道什么时候会出现这个错误。某些事务应该锁定表。
但我需要知道如何找到它。
请注意,我锁定时无法检查。它就像它过去发生的那样,但我需要知道那个时候阻塞它的其他事务/查询是什么。
简单地说,我希望在发生这种情况时将这些事件记录在sql错误日志中,这样我以后就可以看到并查找阻止它的长时间运行查询。
知道如何记录它。 我试着设置跟踪标志并检查。 DBCC TRACEON(1204,1222,-1) 但我找不到与此相关的任何记录。 提前谢谢。
答案 0 :(得分: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'