考虑到一个 MS SQL Server 实例正在执行一个长时间运行的查询,该服务通过 services.msc 停止,或者 - 正如它实际发生的那样 - 由 UPS 触发的系统关闭,因为服务器位于经历滚动停电的发展中国家。
发生这种情况时,服务会在一段时间内保持“停止”状态,并且该进程的 CPU 和磁盘 I/O 仍然很高。
正在运行的查询会发生什么情况?是否允许它们在服务进入“停止”状态之前完成,或者它们是否被取消并回滚?
理想情况下,我正在寻找权威来源(Microsoft 文档)作为答案,因为我怀疑不同的行为取决于我不知道的因素。即有时我们看到查询回滚,有时我们看到它们完成。也许服务会调用事务处理的距离以及回滚或完成是否更快。
如果它有所作为,那就是 SQL 2012。
提前致谢!
这取决于您是否使用NOWAIT 关闭服务器。
来自MSDN:
至于立即关闭:
默认是等待当前正在运行的事务完成(NOWAIT 是可选的)。