Detectar dónde se originan bloqueos en SQL Server

Suele suceder que cuando un simple y silvestre SELECT en una tabla, el cuál inicia con un BEGIN TRAN pero no tiene un COMMIT respectivo (ya sea por fallos de conexión o codificación del programa…) éste proceso queda “Enllavado” con la tabla, y es cuando al querer hacer querys referentes a ésta tabla se congelan los procesos releativos. ¿Porqué se dá ésto? por lo famosos bloqueos…

Efectivamente, cuando en el SQL Query Analizer ponemos (en la BD master):

sp_who2

Éste comando nos muestra los procesos que son usados y, adicional, en la columna “BlkBy” se muestra el SPID (código del proceso) del proceso que está bloqueando a otro.

sp_who2

El problema está cuando hay varios bloqueos… Se hace difícil conocer cuál es el proceso que está originando el problema, pero existe un par de comandos que nos ayudará en ésta tarea.

El comando:

DBCC OPENTRAN

Nos muestra el proceso original que está bloqueando el acceso a una tabla, getessay.orgdado que está esperando un COMMIT o algo así, por lo que perfectamente se pueda dar KILL a dicho proceso para solventar el problema así:

KILL [# SPID] –>    Ejemplo:    Kill 61

Para poder identificar qué query es el que dió el problema, hay que tomar en cuenta antes de hacer el KILL correr el siguiente comando:

DBCC INPUTBUFFER(61)

Donde 61 realmente es el SPID el cuál se detectó mediante DBCC OPENTRAN.

De ésta forma se nos mostrará en el SQL Query Analizer la instrucción sql que está provocando el bloqueo a los demás.

Comentarios por Facebook

comentarios

Deja un comentario

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

*