我在一个只有少量行的表上运行一个简单的选择,并且它会永远运行。我发现如果我运行它会返回正常:
SELECT TOP 23 * FROM MyTable ORDER BY 1
但是,如果我运行,它会永远挂起:
SELECT TOP 24 * FROM MyTable ORDER BY 1
如果我运行sp_who
or sp_who2
,则没有人阻塞。为什么会发生这种情况,我该如何解决?
我在一个只有少量行的表上运行一个简单的选择,并且它会永远运行。我发现如果我运行它会返回正常:
SELECT TOP 23 * FROM MyTable ORDER BY 1
但是,如果我运行,它会永远挂起:
SELECT TOP 24 * FROM MyTable ORDER BY 1
如果我运行sp_who
or sp_who2
,则没有人阻塞。为什么会发生这种情况,我该如何解决?
如果您使用nolock
on 运行(忽略未提交的事务),您应该能够选择所有行:
SELECT * FROM MyTable WITH (NOLOCK)
某处有一个事务尚未提交或回滚(我不确定它为什么没有出现在 中sp_who
)。您可以运行以下命令强制所有事务回滚,然后选择应该可以正常工作,而无需nolock
:
USE master
ALTER DATABASE DbName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE DbName SET MULTI_USER