0

我有一个查询要找出长期运行的事务以解决死锁问题-

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,而且我的应用程序仍然遇到死锁问题。可能是什么原因?

4

3 回答 3

1
  • DBCC TRACEON(1222,-1)- 启用跟踪标志,死锁信息将被记录到日志文件
  • DBCC TRACESTATUS (1222, -1)- 检查跟踪标志的状态
  • DBCC TRACEOFF (1222,-1)- 禁用跟踪标志
于 2012-11-12T11:27:31.147 回答
1

我意识到在某些方面这是要求澄清,但重要的是它属于答案。

死锁是一个非常特殊的事件,其中 2 个进程正在等待相同的资源,并且它们处于无法通过等待解决它的 catch-22 情况。很好的阅读有一个非常简单的解释,即使它说的是 SQL Server 2000。也可以看看这个伟大的脚本来重现它。了解死锁最重要的一点可能是它们通常非常快。您进入了死锁情况,而 SQL Server 足够聪明,可以识别它并终止其中一个进程。

因此,如果您仍然认为自己遇到了死锁,请听答案#1,因为海报是正确的。如果您认为您遇到了人们更宽松地使用术语“死锁”的意思,即锁定和阻塞进程占用资源并且所有其他进程需要等待的位置。您可以通过运行 SQL Server Profiler 并在问题过程中慢慢磨练来解决这些问题。

希望这将有助于为未来的读者澄清,如果不是原始海报的话。确保你知道你实际上在研究什么!

于 2013-01-24T22:01:50.927 回答
0

您可以尝试使用 DBCC TRACEON (1204)

于 2012-11-12T10:55:35.997 回答