Como detectar y reconocer los bloqueos?
-
7 Mayo, 2018
-
SQL Server
![about](../../images/blog/SQLServer/bloqueos_1.jpg)
Muchas veces como administradores de base de datos nos encontramos con los temidos bloqueos que no solo limitan las operaciones que se realizan por parte de las aplicaciones sino que son un verdadero dolor de cabeza al no poder obtener informacion clara y consisa sobre el porque del bloqueo y cual es el tipo del tamaño del bloqueo.
SQL Server nos provee dos herramientas muy practicas para obtener información del tipo de bloqueos que estan ocurriendo en nuestra base de datos y adicionalmente saber cual es la afectacion del bloqueo. Aunque algunas personas utilizar el Monitor de Actividades en algunas ocasiones debido a los bloqueos que se presentan puede ocurrir que el Monitor de Actividades no se puede desplegar o para otras personas entender la información que alli se muestra no es facil.
El primer procedimiento que aprenderemos a usar es SP_WHO2, este procedimiento nativa de SQL SERVER nos ofrece informacion completa de los procesos que se estan ejecutando sobre nuestro servidor de base de datos y adicionalmente sin importar cuando pesado este la ejecucion en su servidor siempre mostrara informacion. Ahora para poder identificar y entender la informacion que nos ofrece SP_WHO2 es necesario comprender cada una de los columnas de información que nos ofrece.
![about](../../images/blog/SQLServer/bloqueos_2.jpg)
En primera instancia por cada proceso nos muestra su estado, para este articulo nos centraremos en dos tipos de estado SUSPENDED y RUNNABLE, estos dos estados nos muestra procesos que se estan ejecutando (RUNNABLE) y nos mostrara aquellos procesos que estan bloqueados por otras ejecuciones como suspendidos (SUSPENDED). Adicionalmente, nos muestra el usuario de SQL que esta ejecutando cada tarea, la base de datos donde se esta ejecutando y una columna que es super importante BlkBy que nos permite identificar que proceso ha bloqueado a otro.
Como vemos en la imagen, el proceso 51 se encuentra bloqueando el proceso 55 y este a su vez esta bloqueado el proceso 54. De esta forma podremos identificar por medio de los codigos de procesos/usuario/base de datos que procesos estan afectando el rendimiento de nuestro servidor de base de datos y en caso de ser necesario usar el aclamado KILL para cancelar la ejecucion de cualquier proceso que sea el causante del bloqueo. Obviamente antes de definir que hacer con el proceso que identifiquemos como el causante del bloqueo es necesario identificar exactamente las implicaciones, ya que cancelar una ejecucion de forma forzada puede generarnos problemas de transacciones, pero de esos temas hablaremos despues. Por ahora usemos esta herramienta que trae SQL Server para identificar correctamente los bloqueos que nuestro servidor de base de datos presenta.