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