2008 R2(SP1) – 10.50.2500.0(X64)
嗨,
我的开发机器上间歇性地出现以下问题。 我在FOR循环中运行一些T-SQL。 在每个循环迭代中,首先我们删除表中的所有行,然后添加一些行(我们正在谈论数千行,所以没有什么特别的)。 然后我们几次查询这个表中的行,并将结果存储在一个表variables中。
有时(经常),这个过程似乎完全挂起。 我不能杀死sp_id。 DBCC OPENTRAN表示我们被卡在INSERT上。 经过大量研究,我现在可以在sys.sysprocesses中看到以下内容:
两个不同的spid都附加到我正在处理的数据库上。
其中之一就是我的T-SQL语句,等待'WRITELOG',状态为'挂起',cmd为'INSERT'。 另一个等待'WRITELOG',状态是'背景',cmd是'GHOST CLEANUP'。
正如我询问sys.sysprocesses wattime值正在改变,所以我不知道事情是否真的被写入磁盘或不。
我不是DBA,但这似乎是一个相当先进的话题,让我沮丧了几天。 有趣的是,我现在只是在我的开发机器上看到这个,所以我想知道这是否与我的硬件有关,以及我们如此快速地插入/删除的事实…
任何帮助赞赏…
-UPDATE–所以我意识到,因为问题表真的只是为了分阶段,我可以使用一些TVF和表variables。 这似乎已经停止了问题的发生,并有一个不错的性能提升副作用。 我仍然对这个问题感兴趣,并想知道如果SQL Server开始使用tempdb,它是否会再次发生(正如我所说的,我不是DBA,而是http://msdn.microsoft.com/en- us / library / ms190768.aspx似乎表明tempdb可以用于表variables)
在经历了几天之后,更新了我的BIOS以及硬盘的固件(这是一款Crucial M4固态硬盘 – 自购买以来我有一些问题,所以也许不太对),但我还是看到奇怪的磁盘I / O相关的waittypes'挂'服务器,即使只是一个简单的几千行删除。
我在性能监视器中查看了一些磁盘计数器,但并不确定我在看什么。 也许他们比较高,但很难说没有比较的基线。
作为最后的手段,我添加了另一个硬盘驱动器到系统,并将我的违规数据库移到那里(注意:我必须以pipe理员身份启动SSMS来连接数据库),似乎问题已经消失。
所以问题是磁盘相关的可能性。 我会把这个问题留在这里作为参考,以防其他人有同样的问题。