Los procesos bloqueados son uno de los problemas más comunes en SQL Server y aunque muchas veces puedes ser simplemente puntuales, otras veces pueden causar problemas de rendimiento y de malfunción que pueden afectar bastante a la instancia. En este articulo te explicaré por qué ocurren y cómo puedes detectarlos.
¿Qué es un bloqueo de procesos en SQL Server?
Un bloqueo de procesos ocurre cuando 2 o más procesos estás intentando acceder al mismo recurso de una base de datos. Cuando esto ocurre, uno de los procesos tendrá que esperar a que el otro finalice antes de poder acceder a ese recurso, lo que provoca que se pueda producir una cola de procesos que genere, por ejemplo, problemas de rendimiento.
Esto es muy cómun, por ejemplo, cuando se lanza una sentencia pero no se hace commit o rollbacks (cosas de devs).
Esto no sólo puede provocar problema de rendimiento, también puede provocar fallos en los backups o problemas en los jobs de mantenimiento del la instancia.
¿Cómo detectar procesos bloqueados?
Si tenemos sospechas de que esto puede estar ocurriendo, bien porque detectamos problemas de rendimiento o vemos jobs que están tardando más de lo normal en ejecutarse , podemos usar la siguiente consulta en SQL Server para detectar procesos que están siendo bloqueados por otros.
SET NOCOUNT ON SELECT DB_NAME(dbid) as [DBname], spid, CASE WHEN (ecid > 0) THEN 'Parallel process, false alert' ELSE '' END as 'Parallel?', blocked, loginame, hostname, program_name, cmd, status, login_time, last_batch, GETDATE() as [current_time], waittime, lastwaittype, waitresource FROM sys.sysprocesses WHERE blocked <> 0 OR spid IN (SELECT blocked FROM sys.sysprocesses)
Si existen procesos bloqueados, la consulta mostrará un resultado similar a este:
Cómo podeis ver, la consulta nos muestra toda la información relevante de todas las sesiones que están bloqueando o siendo bloqueadas.
Esto nos ayudará a identificar que sesiones están causando los bloqueos y a tomar una decisión (o ayudar al cliente a que tome una decisión) sobre lo que hacer con estas sesiones.
¿Todavía tienes dudas?
Si este post no ha solucionado tu problema o todavía tienes dudas sobre este o cualquier otro asunto relacionado con SQL Server, puedes enviarme un mensaje o solicitar una consultoría gratuita haciendo clic aquí.
1 comentario en «Detectar procesos bloqueados en SQL Server»