我们的 ERP 软件使用 SQL Server 2000 数据库。当我们在软件上运行一个过去只需要几秒钟的特定任务时,会发生 300 秒的延迟,并且 SQL Server 返回错误“锁定超时。SQL Server 连接超时”。
我尝试使用 SQL Server Profiler 来识别问题,并且我看到其中有一些 ROLLBACK,但是我没有得出任何结论。
有没有更好的方法来确定哪个查询锁定了哪个资源以及哪个查询超时?
答案1
您可以查询 master.dbo.sysprocesses 和 master.dbo.syslocks 表,查看系统上实际运行的内容以及它们占用的锁。此操作与 sp_who2 一起可以帮助您找出锁定记录的内容或正在发生哪些阻塞。
您是否对 SQL 数据库执行过任何类型的常规数据库维护?如果没有,这种缺乏维护可能会导致各种性能问题。
答案2
在查询分析器中运行:
sp_who2
查看 BlkBy 列,其中显示了 spid 被什么阻止
然后运行:
DBCC INPUTBUFFER(spid)
其中 spid 是一个实际数字,例如 51,用于查看阻塞 spid 的最后一条语句是什么。
答案3
为了建立 Nick 和 Denny 所写的内容,请将这些查询放入 SQL Agent 作业中,以最适合您情况的时间间隔运行。将输出捕获到 .txt 文件中以供后续操作。听起来它不应该运行那么长时间才能找到问题源。