如何安全地终止长时间运行的 MSSQL 查询?

Ano*_*ous 5 sql kill sql-server sql-server-2005

最近我们有一个 SQL 作业插入到数据库中。该查询已不必要地运行了几天,因此使用 KILL SPID 将其终止。然后这个过程开始回滚好几天,似乎只是挂在那里。

运行 KILL SPID WITH STATUSONLY 给出一条消息,指出“估计完成”为 100%,“估计剩余时间”为 0 秒。

最终,我们不得不重新启动删除该进程的 SQL 服务。

我的问题是 - 你应该如何杀死 SQL 进程?这是唯一的方法吗?

Dav*_*ney 5

你做的一切都是正确的,但你已经考虑了回滚的成本。您说您的查询已运行数天,因此它会将数天的数据作为未提交的事务写入日志文件。通过终止任务,您启动了回滚,这就是您必须等待的。

如果您希望能够以较小的影响终止事务,请考虑批处理事务并偶尔提交。如果您可以完全避免事务,那对于长时间运行的作业会更好。