SQL Server 2008 R2 GHOST CLEANUP 挂起进程

SQL Server 2008 R2 GHOST CLEANUP 挂起进程

2008 R2(SP1) — 10.50.2500.0 (X64)

你好,

我在开发机器上间歇性地遇到以下问题。我在 FOR 循环中运行一些 T-SQL。在每次循环迭代期间,我们首先删除表中的所有行,然后向其中添加一些行(我们谈论的是数千行,因此没有什么特别的)。然后我们查询此表中的行几次并将结果存储在表变量中。

有时(相当频繁)进程似乎完全挂起。我无法终止 sp_id。DBCC OPENTRAN 指示我们卡在 INSERT 上。经过大量研究,我现在在 sys.sysprocesses 中看到以下内容:

两个不同的 spid 都连接到我正在处理的数据库。

其中一个是我的 T-SQL 语句,正在等待“WRITELOG”,状态为“已暂停”,cmd 为“INSERT”。另一个正在等待“WRITELOG”,状态为“后台”,cmd 为“GHOST CLEANUP”。

当我重新查询 sys.sysprocesses 时,wattime 值正在发生变化,所以我不确定是否真的将内容写入磁盘。

我不是 DBA,但这似乎是一个相当高级的话题,并且已经让我沮丧了好几天。有趣的是,我目前只在我的开发机器上看到这个,所以我想知道这是否与我的硬件以及我们插入/删除速度如此之快有关...

任何帮助都值得感激...

-更新-- 所以我意识到,由于问题表实际上只是用于暂存,我可以使用一些 TVF 和表变量。这似乎已经阻止了问题的发生,并且具有很好的性能提升副作用。不过,我仍然对问题是什么感到好奇,想知道如果 SQL Server 开始使用 tempdb,它是否会再次发生(正如我所说,我不是 DBA,但是http://msdn.microsoft.com/en-us/library/ms190768.aspx似乎表明 tempdb 可以用于表变量)

答案1

又经历了几天的这种痛苦之后,我更新了 BIOS 以及硬盘固件(这是一个 Crucial M4 SSD - 自购买以来我遇到了一些问题,所以可能不太对劲),我仍然看到奇怪的磁盘 I/O 相关的等待类型“挂起”服务器,即使只是简单删除几千行。

我确实查看了性能监视器中的一些磁盘计数器,但不太确定自己在看什么。也许它们与最佳值相比很高,但由于没有基准可供比较,因此很难说。

作为最后的手段,我向系统添加了另一个硬盘并将有问题的数据库移到那里(注意:我必须以管理员身份启动 SSMS 来附加数据库),看起来问题已经消失了。

因此,问题很可能与磁盘有关。我将这个问题留在这里以供参考,以防其他人遇到同样的问题。

相关内容