识别SQL Server 2000上的“locking超时”错误

我们的ERP软件使用SQL Server 2000数据库。 当我们在过去需要几秒钟的软件上运行一个特定的任务时,会发生300秒的延迟,SQL Server将返回错误“locking超时.SQL Server连接超时”。

我尝试使用SQL Server Profiler来识别问题,我可以看到一些ROLLBACK,但是我没有任何结论。

有没有更好的方法来确定什么查询是locking什么资源和什么查询超时?

您可以查询master.dbo.sysprocesses和master.dbo.syslocks表以查看系统上实际运行的内容以及它们正在执行的locking。 这与sp_who2一起可以帮助您找出什么是lockinglogging,或者是哪些块正在发生。

你在SQL数据库上执行任何types的常规数据库维护吗? 否则,这种缺乏维护可能会导致各种性能问题。

在查询分析器运行:

sp_who2 

看看BlkBy columed,它显示了spid被阻塞的东西

然后运行:

 DBCC INPUTBUFFER(spid) 

其中spid是一个像51这样的实际数字,以查看阻塞spid的最后一条语句是什么。

要build立在Nick和Denny编写的基础之上,将这些查询放置在以任何间隔运行的SQL代理作业中最适合您的情况。 将输出捕获到.txt文件以供后续使用。 听起来就像它不应该运行那么长时间来find问题来源。