SQL Server:当一个进程阻塞另一个进程时应该怎么做?

jra*_*ara 7 sql-server locking

我是一个偶然的 DBA 并且仍在学习。

当我从 DMV:s 或 Activity Monitor 看到某个进程正在阻塞另一个进程时,应该怎么做?

我应该简单地终止这些进程还是有办法“释放”或者抢占这种阻塞?

Mar*_*ith 7

尽管已经回答了这个问题并且答案被接受了,但我将尝试为相反的方法提出一个案例......

不要盲目杀死 SPID

除非您知道 SPID 做了什么工作,否则您不会了解您将要启动的回滚的规模。

最糟糕的阻塞链是那些意外使您的 24/7 系统瘫痪的链。在 99% 的情况下,该阻塞链开头的查询将是一个普通的旧选择查询出错,将所有写入活动排在其后面。在这些情况下,KILL 将挽救局面。

在另外 1% 的时间里,该恶意查询将是长时间运行的事务的最后一步,回滚所需的时间与到达当前阶段的时间一样长。花点时间了解您是如何到达这里的,在 99% 的时间里都是不必要的。1% 的时间,您可以节省几分钟/几小时/几天的停机时间。


gbn*_*gbn 5

有时,超暴力就是答案

无论如何,块只是一个持续时间过长的锁。“太长”当然是可变的。如果您通过 sysprocesses 或 DMV 看到阻塞,那么它几乎总是“太长”,因为块应该是瞬态且非常短的

如果您确实有可衡量的阻塞,那么您需要调查原因,例如长时间运行的事务

  • 高度引用的答案。 (2认同)