代码之家  ›  专栏  ›  技术社区  ›  JosephStyons

为什么此SELECT语句会锁定在SQL Server上?

  •  5
  • JosephStyons  · 技术社区  · 15 年前

    我有一个这样的简单问题

    SELECT * FROM MY_TABLE;
    

    当我运行它时,SQLServerManagementStudio挂起。

    其他表和视图工作正常。

    这是什么原因造成的?我以前在运行UPDATE语句时遇到过锁,我知道如何处理这些锁。但是什么会导致SELECT锁定呢?

    我已经运行了“所有阻塞事务”报告,它说没有。

    5 回复  |  直到 15 年前
        1
  •  11
  •   Raj More    15 年前

    锁定的可能不是select,而是其他一些正在编辑(udpate/delete/insert)表的过程导致了锁定。

    您可以通过运行 exec sp_who2 在您的SQL Server上。

    或者,如果你不介意脏读,你可以做两件事之一

    SELECT * FROM Table WITH (NOLOCK)
    

    SET Transaction Isolation Level Read Uncommitted
    SELECT * FROM Table 
    
        2
  •  3
  •   David Hedlund    15 年前

    如果有很多其他活动正在进行,则可能是其他原因导致了锁定,而您的选择可能是死锁的受害者。如果您运行以下命令

    SELECT * FROM my_table WITH(nolock)
    

    您告诉数据库您可以读取脏(未写入)数据,并且可以安全地忽略由其他活动引起的锁定。

    此外,如果这样的查询导致ManagementStudio挂起,那么您的表可能需要进行一些优化

        3
  •  3
  •   hichris123 Andreas Sewe    11 年前

    使用以下命令:

    SELECT * FROM MY_TABLE with (NOLOCK)
    
        4
  •  1
  •   BradC    15 年前

    两种可能性:

    1. 这是一个非常大的表,您试图返回5亿行。
        5
  •  1
  •   Grzegorz Gierlik    8 年前

    MY_TABLE