当前位置:  开发笔记 > 编程语言 > 正文

DELETE语句在SQL Server上挂起,没有明显的原因

如何解决《DELETE语句在SQLServer上挂起,没有明显的原因》经验,为你挑选了0个好方法。

编辑:已解决,桌面上有一个带循环的触发器(请在下面进一步阅读我自己的答案).


我们有一个简单的删除语句,如下所示:

DELETE FROM tablename WHERE pk = 12345

这只是挂起,没有超时,没有任何东西.

我们已经查看了执行计划,它包含许多相关表的查找,以确保没有外键可以删除,但我们已经验证其他表中没有任何行引用该特定行.

目前没有其他用户连接到数据库.

我们对它运行DBCC CHECKDB,并报告0错误.

综观结果sp_who,并sp_lock同时查询是挂,我发现我的spid有大量的PAG和KEY锁,以及偶尔的TAB锁.

该表有1.777.621行,是的,pk是主键,因此它是基于索引的单行删除.执行计划中没有表扫描,但是我注意到它包含了表Spool(Eager Spool)的内容,但是表示估计的行数1.这实际上是伪装的表扫描吗?它只是说它看着主键列.

在表上尝试了DBCC DBREINDEX和UPDATE STATISTICS.两者都在合理的时间内完成

不幸的是,这个特定的表上有很多索引.它是我们系统中的核心表,包含大量列和引用,包括传出和传入.确切的数字是48个索引+主键聚集索引.

我们还应该注意什么?

另请注意,此表之前没有此问题,今天突然出现此问题.我们还有许多具有相同表设置的数据库(客户数据库的副本),并且它们的行为与预期一致,只是这个有问题.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有