>我在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 列)。
这张桌子曾经工作得很好而且速度很快,我根本没有进行任何结构更改。
有没有人知道为什么会发生这种情况,以及如何解决它?
给未来可能有同样问题的人。
我认为查询进行得很慢,事实并非如此。它被另一个会话锁定。如果你遵循马丁史密斯的评论,他帮助我找到了修复它的方法。
首先,我跑了
select * from sys.dm_os_waiting_tasks
在运行无法完成的查询时,以及在未运行查询时再次查找LCK_M_IX。我使用了该行中的会话 ID,并将其与来自
select * from sys.dm_exec_sessions
并找到了阻止我查询的违规会话!
因为我知道这是一个安全的会议结束,所以我以
Kill [sessionId]