【问题标题】:Simple select not returning all rows and sp_who returns no blocks简单选择不返回所有行并且 sp_who 不返回任何块
【发布时间】:2015-03-19 20:42:44
【问题描述】:

我正在对包含少量行的表运行一个简单的选择,并且它会一直运行。我发现如果我运行它会返回正常:

SELECT TOP 23 * FROM MyTable ORDER BY 1

但是,如果我运行,它会永远挂起:

SELECT TOP 24 * FROM MyTable ORDER BY 1

如果我运行sp_whosp_who2,没有人阻塞。为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 这两个查询的性能应该基本相同。
  • @GordonLinoff 问题是插入第 24 行的打开事务。使用nolock 运行返回有问题的行。

标签: sql sql-server transactions nolock


【解决方案1】:

如果您在nolock 上运行(忽略未提交的事务),您应该能够选择所有行:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-14
    • 2017-12-28
    • 2023-03-12
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多