我有时会运行一个查询,但它只是挂起。我去查看活动监视器(SQL Server 2008 R2)中的进程,它显示了它,只是事务是打开的,它会连接整个服务器。
这是没有意义的,即使这是一个长时间运行的查询,它应该在某个时间点超时。
我对其进行了跟踪,它显示了这一点:
有什么建议么?
我有时会运行一个查询,但它只是挂起。我去查看活动监视器(SQL Server 2008 R2)中的进程,它显示了它,只是事务是打开的,它会连接整个服务器。
这是没有意义的,即使这是一个长时间运行的查询,它应该在某个时间点超时。
我对其进行了跟踪,它显示了这一点:
有什么建议么?
BEGIN TRANSACTION
INSERT INTO ... VALUES ...
GO
健忘的弗雷德打开了一笔交易,去吃午饭了。由于没有请求处于活动状态,因此没有什么可以超时的。最终,用户必须明确提交或回滚。管理员可以使用KILL
. 如果将此类会话/事务留在自己的设备上(假设您没有用完日志并且没有重新启动服务器),此类会话/事务可以保持打开数年。
即使用户确实发出了 COMMIT,也可能会出现更复杂的情况,如果涉及分布式事务,请参阅工作原理:孤立 DTC 事务(会话/SPID = -2)。