Cuando tenemos un problema debido a un bloqueo, o incluso cuando son unos pocos bloqueos, resulta fácil identificarlo con sp_who2 o con el Activity Monitor del SQL Server Management Studio (SSMS). Pero si tenemos uno o varios procesos, bloqueando otros tantos procesos, que a su vez bloquean a unos cuantos procesos más, y así sucesivamente (un Arbol de Bloqueos ó Blocking Chain), necesitaremos identificar rápidamente el o los procesos raíz que están generando estos árboles de procesos, para de este modo, tomar las medidas oportunas (quizás un KILL, o alguna otra medida desde el lado de la aplicación), y de una forma rápida. Para ello, podemos ejecutar una simple consulta SQL sobre sys.sysprocesses, que nos identifique rápidamente los procesos raíz de los árboles de bloqueos que tengamos, una consulta como la siguiente: SELECT * FROM sys.sysprocesses WHERE blocked=0 AND spid IN(SELECT blocked from sys.sysprocesses WHERE blocked<>0 GROUP BY blocked) |
Para quién lo prefiera, aprovecho para adjuntar un fichero con la consulta SQL. Personalmente, me ha sido de utilidad en varias ocasiones, por lo que quería aprovechar para compartirla con todos vosotros. Poco más por hoy. Como siempre, confío que la lectura resulte de interés. |