终止跨服务器 SELECT 查询导致无限期的 KILLED/ROLLBACK 进程。这是怎么回事?

终止跨服务器 SELECT 查询导致无限期的 KILLED/ROLLBACK 进程。这是怎么回事?

一个长时间运行的查询正在 SQL Server 2005 数据库上运行,该查询引用了 SQL Server 2000 数据库上的表。两个 SQL Server 实例都在同一台计算机上运行。这只是一个选择查询,它没有更改任何记录。它在被终止之前运行了大约 2 个小时。该进程已处于“KILLED/ROLLBACK”状态超过 6 个小时。

该进程的 CPU 时间持续增加(截至此消息为 12827264),而磁盘 IO 保持在低位且恒定(8)。

我们可以重启服务器,这样可能会解决问题,但我很想知道这是什么原因造成的。它到底回滚了什么?它做了什么,占用了这么多 CPU?为什么会花这么长时间?

答案1

一种可能性是:SQL Server 2005 创建了一个临时表来缓存 2000 上的远程查询结果,而远程查询实际上返回了大量数据。因此回滚可能是 SQL Server 2005 清理本地 tempdb。一个合理的指标是看到 tempdb 的事务日志文件增长到意外的比例。

答案2

SQL Server 不擅长终止进程外的东西,例如链接服务器调用(使用 OLEDB/COM)。xp_cmdshell 也可能是一个问题。我见过 ADSI 调用冻结并且再也没有恢复。尝试关闭应用程序或回收 IIS 应用程序,而不是尝试从后端终止它。

相关内容