过期的命令超时是否会终止挂起的"deadlocks"?



当 SQL 命令的CommandTimeout到期时,是否保证立即终止该命令?

也就是说,当正在执行的 SQL 在数据库中处于"死锁"状态时,CommandTimeout 是否会终止命令?

在这种情况下,"死锁"实际上可能是一个活锁,无法从SQL Server检测到;因此引号。在代码中,命令失败将导致关闭连接。

我最近遇到了一个类似的问题。无论引发 CommandTimeout 异常的 C# 代码如何,死锁都可能保持不变。我相信有一个取消事件信号从您的 C# 应用程序层发送到数据库,表明命令超时并且查询应该中止,但由数据库来清除死锁。这可能需要一些时间,具体取决于必须回滚的事务数量等(您可以随时尝试杀死死锁的SPID,但我会非常小心,因为这可能会导致一些问题,而不会给您任何错误日志来找出出了什么问题。

如果您正在使用事务并且经常超时,则可以考虑使用 SET XACT_ABORT ON

我认为问题是为什么它陷入僵局?您可以使用exec SP_WHO2来查看被锁定的内容,或者运行 SQL 事件探查器/跟踪来查看罪魁祸首。

相关内容

  • 没有找到相关文章