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)
或
两种可能性:
如果有很多其他活动正在进行,则可能是其他原因导致了锁定,而您的选择可能是死锁的受害者。如果您运行以下命令
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)