我有一个查询来查找长时间运行的事务以解决死锁问题 -
SELECT spid, cmd, status, loginame, open_tran, datediff(s, last_batch, getdate ()) AS [WaitTime(s)]
FROM master..sysprocesses p
WHERE open_tran > 0
AND spid > 50
AND datediff (s, last_batch, getdate ()) > 30
ANd EXISTS (SELECT * FROM master..syslockinfo l
WHERE req_spid = p.spid AND rsc_type <> 2)
但它没有返回任何rcord,我仍然遇到我的应用程序的死锁问题。可能是什么原因?
答案 0 :(得分:1)
DBCC TRACEON(1222,-1)
- 要启用跟踪标记,死锁信息将记录到日志文件DBCC TRACESTATUS (1222, -1)
- 检查跟踪标志的状态DBCC TRACEOFF (1222,-1)
- 禁用跟踪标记答案 1 :(得分:1)
我在某些方面意识到这需要澄清,但重要的是它属于答案。
死锁是一个非常具体的事件,其中2个进程正在等待相同的资源,并且它们处于catch-22情况,他们无法通过等待来解决它。良好的阅读There is a very simple explanation,即使它说SQL Server 2000.另请查看this great script to reproduce it。理解死锁的最重要的事情可能是它们通常非常快。您陷入僵局,SQL Server足够聪明,可以识别它并杀死其中一个进程。
因此,如果您仍然认为自己遇到了死锁,那么请回答#1,因为海报是正确的。如果你认为你正在让人们更松散地使用术语“死锁”,那就是锁定和阻塞进程占用资源的位置,而所有其他进程都需要等待。您可以通过运行SQL Server Profiler并慢慢处理问题进程来解决这些问题。
希望这有助于为未来的读者澄清,如果不是原始海报。确保你知道你在研究什么!
答案 2 :(得分:0)
你可以试试 DBCC TRACEON(1204)