日期:2014-05-17  浏览次数:20518 次

求助 SQL update 语句更新问题
update 语句根据主键 更新一条记录时,用了20分钟还没完成。
如 update table_a set  col_b = 1000
where col_a = ‘A’

在执行过程中 ,select * from table_a  where col_a = ‘A’没问题。
查询其它列都没问题。
另外恢复一个数据库备份到其它地方,进行测试,update很快完成。
搞不明白为何出现这种问题?

------解决方案--------------------
1、贴出update的执行计划,
2、进行update的时候执行select * from sys.sysprocesses where blocked<>0看看有没有阻塞
------解决方案--------------------
sp_who2 看看有没有blockby
------解决方案--------------------
查看SP_LOCK是否该表一直被X锁定而此时载UPDATE无法获得独占锁,可以考虑使用HINT(with  updlock)
------解决方案--------------------
死锁?

不懂
------解决方案--------------------
引用:
Quote: 引用:

1、贴出update的执行计划,
2、进行update的时候执行select * from sys.sysprocesses where blocked<>0看看有没有阻塞


怎么查看 死锁执行的语句
阻塞不一定就是死锁啊。阻塞通常是等待某些资源释放而已,死锁是既要等待,又持有别人需要的,形成一个死循环
------解决方案--------------------
所以我说要查阻塞,不然你下次update还是有可能出现
------解决方案--------------------
假设你找到了一个阻塞的spid,可以用DBCC INPUTBUFFER SPID来查看这个SPID是做什么的