如果我们在数据库中看到很多被阻止的进程,那么最佳解决方案是什么?
答案 0 :(得分:3)
答案 1 :(得分:2)
WITH(NOLOCK)不一定是个不错的选择。这将导致查询返回未提交的读取。在交易系统上,这可能是您不想要的行为。
答案 2 :(得分:-1)
使用sp_who查找spid并杀死spid(即kill 59,其中59是阻塞进程的spid)以终止进程。
这会对问题进行排序,但不会再阻止它再次发生。要做到这一点,你需要查看你的代码。我建议您至少在任何选择中使用WITH NO LOCK以减少锁定的可能性。
此外,您可以重构您的代码,以便您只访问最少的次数。考虑复制到临时(#或##)表进行详细处理,然后根据需要复制回位置。这特别适用于准备报告数据的目的。最好将数据拉一次,然后远离主表进行任何其他处理。
如果由于基础数据变化太快或者您需要将更改应用于其他目的而无法实现,则使用SQL Service Broker排队异步工作项。这可以用于根据您的情况解决阻止问题。