Son muchas las ocasiones en las que ante un problema de bloqueos podemos sentirnos impotentes, la falta de información de que está pasando puede atenazarnos e impedirnos hacer nuestra labor, descubrir quien bloquea y que está haciendo.
Es cierto que a través de procedimientos del sistema, como sp_who o sp_who2 y algunas versiones que circulan por la red podemos tener cierta información de este tipo de cosas. La verdad es que yo nunca fuí muy fan de esos métodos, me parece que podemos personalizar más y mejor la información que nos da el sistema y podemos encontrar exactamente lo que estamos buscando.

Voy a poner aquí el resultado final, es decir el código terminado que determina quien bloquea y que hace, pero en las próximas lineas contaré el porqué de cada una de las decisiones.

lo primero que puede notar un observador detenido es que mientras que las consultas bloqueadas se obtienen de la DMV sys_dm_exec_requests, los bloqueadores se obtienen sin embargo de exec_conections, el motivo es que el bloqueador puede haber terminado su ejecución, al no estar bloqueado y por tanto el comando desaparece de las peticiones actuales, por lo que no podríamos obtener mas datos de la consulta que nos bloquea, mientras que usando el campo most_recent_sql_handle de la dmv connections podemos obtener esa información.

Se podría obtener tambien el plan de ejecución del bloqueador, pero en este momento no me parece relevante.

En los próximos días escribiré algunas mejoras a este procedimiento.

En el video de demostración, verás, no solamente como usar este comando sino también como obtener el plan de ejecución y visualizarlo en SQL Server Management Studio.

Os dejo el video de demostración

 

Hasta el próximo!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *