当SQL命令的CommandTimeout
到期时,是否可以立即终止命令?
也就是说,当执行的SQL在数据库中处于“死锁”状态时,CommandTimeout会终止命令吗?
在这种情况下,“死锁”实际上可能是一个活锁,并且无法从SQL Server中检测到;因此报价。在代码中,命令失败将导致关闭连接。
答案 0 :(得分:1)
我最近遇到过类似的问题。无论您的C#代码抛出 CommandTimeout 异常,死锁都可能保持不变。我相信有一个 取消事件信号 从您的C#应用程序层发送到数据库,命令超时,查询应该被中止,但它是直到数据库来清除僵局。这可能需要一些时间,具体取决于必须回滚的事务数等等。(你总是可以尝试杀死死锁的SPID但我会非常小心,因为这可能会导致一些问题,而不会给你任何错误日志来找出问题所在。)
如果您正在使用交易并且频繁超时,则可以考虑使用SET XACT_ABORT ON
。
我认为问题是它为何陷入僵局?您可以使用exec SP_WHO2
查看被锁定的内容或运行SQL事件探查器/跟踪以查看罪魁祸首。