Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 为什么此SELECT语句会锁定在SQL Server上?_Sql Server 2005_Locking - Fatal编程技术网

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

Sql server 2005 为什么此SELECT语句会锁定在SQL Server上?,sql-server-2005,locking,Sql Server 2005,Locking,我有一个这样的简单问题 SELECT * FROM MY_TABLE; 当我运行它时,SQLServerManagementStudio挂起 其他表和视图工作正常 这是什么原因造成的?我以前在运行UPDATE语句时遇到过锁,我知道如何处理这些锁。但是什么会导致SELECT锁定呢 我已经运行了“所有阻塞事务”报告,报告中说没有任何事务。使用以下命令: SELECT * FROM MY_TABLE with (NOLOCK) 锁定的可能不是select,而是其他一些正在编辑(udpate/del

我有一个这样的简单问题

SELECT * FROM MY_TABLE;
当我运行它时,SQLServerManagementStudio挂起

其他表和视图工作正常

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

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

使用以下命令:

SELECT * FROM MY_TABLE with (NOLOCK)

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

您可以通过在SQL Server上运行
exec sp_who2
来查看哪个进程被阻塞

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

SELECT * FROM Table WITH (NOLOCK)

两种可能性:

  • 这是一个非常大的表,您试图返回5亿行
  • 其他一些进程在表上有一个锁,在释放该锁之前,阻止您的选择

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

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


    此外,如果类似的查询导致management studio挂起,则您的表可能会使用一些优化,而MY#u表也可能会被一些未提交的事务锁定,即脚本/存储过程在另一个MSMM窗口中运行(或运行时失败)。

    否至#1。对#2是的,但谁/什么?@BradC in#1是5亿意味着5亿,或者是别的什么。@robert,是的,我是说5亿,或者其他一些荒谬的高数字。请看BradC的答案:其他进程有一个锁在桌子上,在释放锁之前阻止您的选择dexec sp_who2给了我一个正在进行的ALTER索引。似乎是罪魁祸首。谢谢
    SELECT * FROM my_table WITH(nolock)