4

我在 SQL Server 2008 R2 中有一个数据库,其中所有表似乎都正常运行,除了一个表。

在此表中,我无法删除一行或插入一行,因为它持续了 30 多分钟并超时。

我的插入看起来像这样:

INSERT INTO [dbo].[brokenTable] ([Change], [Date], [ProdId], [IntCol]) 
VALUES ('test', getdate(), null, '99999')

但是,我可以选择。选择前 200,000 名需要 33 秒。表中只有约 260,000 行。有五列(一个 int 主键、一个日期、另一个 int 列和 2 个 varchar 列。)

这张桌子过去工作得很好而且很快,我根本没有做任何结构改变。

有谁知道为什么会发生这种情况,以及如何解决?

4

1 回答 1

10

对于未来可能有同样问题的人。

我认为查询进行得很慢,事实并非如此。它被另一个会话锁定。如果您关注 Martin Smith 的评论,他会帮助我找到要修复的问题。

首先,我跑了

select * from sys.dm_os_waiting_tasks

在运行一个无法完成的查询时,以及在不运行它时再次查找 LCK_M_IX。我使用了该行中的会话 ID,并将其与来自的行匹配

select * from sys.dm_exec_sessions

并找到了阻止我查询的违规会话!

因为我知道这是一个安全的会议结束,所以我结束了它

Kill [sessionId]
于 2012-06-06T23:29:02.063 回答